public static void Main()
Console.WriteLine(Luhn("0"));
Console.WriteLine(Luhn("378282246310005"));
Console.WriteLine(Luhn("371449635398431"));
Console.WriteLine(Luhn("378734493671000"));
Console.WriteLine(Luhn("5610591081018250"));
Console.WriteLine(Luhn("30569309025904"));
Console.WriteLine(Luhn("38520000023237"));
Console.WriteLine(Luhn("6011111111111117"));
Console.WriteLine(Luhn("6011000990139424"));
Console.WriteLine(Luhn("3530111333300000"));
Console.WriteLine(Luhn("3566002020360505"));
Console.WriteLine(Luhn("5555555555554444"));
Console.WriteLine(Luhn("5105105105105100"));
Console.WriteLine(Luhn("4111111111111111"));
Console.WriteLine(Luhn("4012888888881881"));
Console.WriteLine(Luhn("5019717010103742"));
Console.WriteLine(Luhn("6331101999990016"));
public static bool Luhn(string digits)
return digits.All(char.IsDigit) && digits.Reverse()
.Select((thisNum, i) => i % 2 == 0
:((thisNum *= 2) > 9 ? thisNum - 9 : thisNum)