In: Computer Science
write C# console app No arrays
Credit card validation Problem. A credit card number must be between 13 and 16 digits. It must start with: –4 for visa cards –5 for mater cards –37 for American express cards –6 for discover cards •Consider a credit card number 4380556218442727 •Step1: double every second digit from right to left. If doubling of a digit results in a two-digit number, add up the two digits to get a single-digit number. •Step2: now add all the single digit numbers from step1 4 + 4 + 8 + 2 + 3 + 1 + 7 + 8 •Step3: add all digits in the odd places from right to left in the card number 7+ 7 + 4 + 8 + 2 + 5 + 0 + 3 = 36 •Step4: sum the results from step 2 and step 3 37 + 36 = 73 •Step 5: if the results from step 4 is divisible by 10, the card number is valid; otherwise, it is invalid. In this case, the card number is not valid – because 75 not divisible by 10. use modulus operator
using System; using System.Linq; using System.Text; using System.IO; namespace SO { class Program { static void Main(string[] args) { string[] cards = new string[] { "378282246310005", "4012888888881881", "6011111111111117", "4222222222222", "76009244561", "5019717010103742", "6331101999990016", "30569309025904", "5147004213414803", "6011491706918120", "379616680189541", "4916111026621797", }; foreach (string card in cards) { Console.WriteLine(IsValid(card)); } Console.ReadLine(); } public static bool IsValid(object value) { if (value == null) { return true; } string ccValue = value as string; if (ccValue == null) { return false; } ccValue = ccValue.Replace("-", ""); ccValue = ccValue.Replace(" ", ""); int checksum = 0; bool evenDigit = false; foreach (char digit in ccValue.Reverse()) { if (digit < '0' || digit > '9') { return false; } int digitValue = (digit - '0') * (evenDigit ? 2 : 1); evenDigit = !evenDigit; while (digitValue > 0) { checksum += digitValue % 10; digitValue /= 10; } } return (checksum % 10) == 0; } } }