Diff for libplaton/platon/misc/luhnchk.c between version 1.1 and 1.2
| version 1.1, 2001/10/05 13:42:11 |
version 1.2, 2002/02/04 18:38:11 |
|
|
| |
|
| #include "luhnchk.h" |
#include "luhnchk.h" |
| |
|
| int luhncheck(const char*s){ |
int luhncheck(const char *number) |
| register unsigned int k,sum=0; |
{ |
| |
register unsigned int k, sum = 0, len_number = strlen(number); |
| |
|
| |
for (k = len_number % 2; k < len_number; k += 2) { |
| |
|
| |
if ((((int) number[k] - 48) * 2) > 9) |
| |
sum += ((((int) number[k] - 48) * 2) - 9); |
| |
else |
| |
sum += (((int) number[k] - 48) * 2); |
| |
} |
| |
|
| |
for (k = (len_number % 2) ^ 1; k < len_number; k += 2) |
| |
sum += ((int) number[k] - 48); |
| |
|
| |
return sum % 10 ? 0 : 1; |
| |
} |
| |
|
| for(k=strlen(s)%2;k<strlen(s);k+=2){ |
#if defined(SELF) || defined(SELFTEST) || defined(SELF_LUHNCHK) |
| if((((int)s[k]-48)*2)>9)sum+=((((int)s[k]-48)*2)-9); |
|
| else sum+=(((int)s[k]-48)*2); |
#include <stdio.h> |
| |
|
| |
int main(int argc, char **argv) |
| |
{ |
| |
|
| |
if (argc < 2) { |
| |
printf("Usage: %s <credit_card_number>\n", argv[0]); |
| |
return 1; |
| } |
} |
| |
|
| for(k=(strlen(s)%2)^1;k<strlen(s);k+=2)sum+=((int)s[k]-48); |
printf("Credit card with number '%s' is %svalid.\n", |
| |
argv[1], luhnchk(argv[1]) ? "" : "not "); |
| |
|
| return(sum%10?0:1); |
return 0; |
| } |
} |
| |
|
| |
#endif |
| |
|
Platon Group <platon@platon.org> http://platon.org/
|
|