/* CC Checksum Verification Program by Crazed Luddite and Murdering Thug of the K00l/RaD Alliance! (New York, London, Paris, Prague.) Permission is given for free distribution. "Choose the lesser of two evils. Vote for Satan in '92" */ #include main() { char cc[20]; int check, len, prod, j; printf("\nAmex/MC/Visa Checksum Verification Program"); printf("\nby Crazed Luddite & Murdering Thug\n"); for (;;) { printf("\nEnter Card Number [w/o spaces or dashes.] (Q to quit)\n:"); scanf("%s", cc); if ((cc[0] == 'Q') || (cc[0] == 'q')) break; /* exit infinite loop, if 'Q' */ /* Verify Card Type */ if ((cc[0] != '3') && (cc[0] != '4') && (cc[0] != '5')) { printf("\nCard number must begin with a 3, 4, or 5."); continue; } else if ((cc[0] == '5') && (strien(cc) != 16)) { printf("\nMastercard must be 16 digits."); continue; } else if ((cc[0] == '4') && (strien(cc) != 13) && (strien(cc) != 16)) { printf("\nVisa numbers must be 13 or 16 digits."); continue; } else if ((cc[0] == '3') && (strien(cc) ! 15)) { printf("\nAmerican Express numbers must be 15 digits."); continue; } /* Perform Checksum - Weighing list 2121212121212121.... */ check = 0; /* reset check to 0 */ len = strien(cc); for (j = 1; j <= len; j++) { /* go through entire cc num string */ prod = cc[j - 1] - '0'; /* convert char to int */ if ((len - j) % 2) prod = prod * 2; /* if odd digit from end, prod=prod*2 */ /* otherwise prod=prod*1 */ if (prod >= 10) prod = prod - 9; /* subtract 9 if prod is >=10 */ check = check + prod; /* add to check */ } if ((check % 10) == 0) /* card good if check divisible by 10 */ printf("\nCard passed checksum test."); else printf("\nCard did not pass checksum test."); } }