Diff for libplaton/platon/misc/luhnchk.c between version 1.3 and 1.4
| version 1.3, 2002/03/15 21:48:17 |
version 1.4, 2002/09/20 16:17:33 |
|
|
| |
|
| int luhncheck(const char *number) |
int luhncheck(const char *number) |
| { |
{ |
| register unsigned int k, sum = 0, len_number = strlen(number); |
register int i, ii, num, parity, sum = 0; |
| |
register int len_number = strlen(number); |
| for (k = len_number % 2; k < len_number; k += 2) { |
register int real_len_number = 0; |
| |
|
| if ((((int) number[k] - 48) * 2) > 9) |
for (i = 0; i < len_number; i++) { |
| sum += ((((int) number[k] - 48) * 2) - 9); |
num = number[i] - 48; |
| else |
if (num < 0 || num > 9) |
| sum += (((int) number[k] - 48) * 2); |
continue; |
| |
real_len_number++; |
| } |
} |
| |
|
| for (k = (len_number % 2) ^ 1; k < len_number; k += 2) |
if (real_len_number <= 0) |
| sum += ((int) number[k] - 48); |
return 0; |
| |
parity = real_len_number % 2; |
| |
|
| |
for (ii = 0, i = 0; i < len_number; i++) { |
| |
num = number[i] - 48; |
| |
if (num < 0 || num > 9) |
| |
continue; |
| |
|
| |
if (ii % 2 == parity) { |
| |
sum += num * 2; |
| |
if (num * 2 > 9) |
| |
sum -= 9; |
| |
} else { |
| |
sum += num; |
| |
} |
| |
ii++; |
| |
} |
| |
/* |
| |
for (ii = 0, i = 0; i < len_number; i++) { |
| |
num = number[i] - 48; |
| |
if (num < 0 || num > 9) |
| |
continue; |
| |
if (ii % 2 != parity) |
| |
continue; |
| |
|
| return sum % 10 ? 0 : 1; |
ii++; |
| |
} |
| |
*/ |
| |
return ! (sum % 10); |
| } |
} |
| |
|
| #if defined(SELF) || defined(SELFTEST) || defined(SELF_LUHNCHK) |
#if defined(SELF) || defined(SELFTEST) || defined(SELF_LUHNCHK) |
Platon Group <platon@platon.org> http://platon.org/
|
|