Ocena użytkownikóww: ***** / 3
Nadesłany przez Tomasz Lubiński, 02 kwietnia 2007 01:00
Kod przedstawiony poniżej przedstawia główną część rozwiązania problemu.
Pobierz pełne rozwiązanie.Jeżeli nie odpowiada Ci sposób formatowania kodu przez autora skorzystaj z pretty printer'a i dostosuj go automatycznie do siebie.
luhn.c:
//algorytm Luhn'a
//www.algorytm.org
//(c)2007 by Tomasz Lubinski
#include <stdio.h>
char DoubleArray[10] = {0, 2, 4, 6, 8, 1, 3, 5, 7, 9};
/*
* Check number - return check digit
*/
int luhnCheckDigit(char *number) {
int i;
int sum = 0;
int length = strlen(number);
for (i=2; i<=length; i++) {
if (i%2 != 0) {
sum += number[length - i] - 48;
} else {
sum += DoubleArray[number[length - i] - 48];
}
}
sum %= 10;
sum = 10 - sum;
sum %= 10;
return sum;
}
/*
* Luhn Algorithm
* Check number - return 1 if check digit in number is correct, 0 otherwise
*/
int luhnCheck(char *number) {
int i;
int sum = 0;
int length = strlen(number);
for (i=1; i<=length; i++) {
if (i%2 != 0) {
sum += number[length - i] - 48;
} else {
sum += DoubleArray[number[length - i] - 48];
}
}
if (sum % 10 == 0) {
return 1;
}
return 0;
}
/* Get number and check it */
int main(void)
{
char number[1000];
printf("Podaj numer do sprawdzenia\n");
scanf("%s", number);
if (luhnCheck(number))
{
printf("Numer jest prawidlowy\n");
}
else
{
printf("Numer jest nieprawidlowy\n");
}
return 0;
}