// Function: luhnCheck // Description: Runs Luhn's algorithm on a given number. // Uses Functions: get_check_num // Parameters: Number being tested. // Pre-Conditions: Positive integer input. // Post-Conditions: Output must be 0 or 1. // Return: 0 - passes algorithm, 1 - does not pass algorithm. public static int luhn_check(ulong num) { int sum = 0; int checkDigit = CardFunctions.get_check_num(num); int[] digits = num.ToString().Select(Convert.ToInt32).ToArray(); // Convert num into array of digits. int everyOtherNumber = 0; // For tracking every other number. for (int i = digits.Length - 2; i >= 0; i--) // Run through digits in reverse order, skipping the ending digit. { digits[i] -= 48; // Convert char value to digit value. if (i % 2 == 1) { digits[i] *= 2; if (digits[i] > 9) { digits[i] -= 9; } } sum += digits[i]; everyOtherNumber++; } digits[digits.Length - 1] -= 48; // Convert check digit char value to digit value. // Number does not pass the test if the calculated check digit does not match the original last digit. if ((sum * 9) % 10 != checkDigit) { return(1); } else { return(0); } }
static void Main(string[] args) { Console.Write("Enter card number: "); ulong num = Convert.ToUInt64(Console.ReadLine()); Console.WriteLine("Result: " + CardFunctions.luhn_check(num)); Console.ReadKey(); }