Huhu,
in diesem Code sollen einige Fehler drinne sein, komme aber grad nit wirklich weiter ... nen paar hatte ich schon rausgeholt aber naja.... seht ihr noch welche? Vielen Dank schonmal!
in diesem Code sollen einige Fehler drinne sein, komme aber grad nit wirklich weiter ... nen paar hatte ich schon rausgeholt aber naja.... seht ihr noch welche? Vielen Dank schonmal!
Code:
#include <stdio.h>
#include <string.h>
/* Die Kreditkarten-Prüfsumme basiert auf dem Luhn-Algorithmus. Alle Ziffern
werden von rechts beginnend addiert; die Ziffern mit den geraden Indizes
(beginnend bei 1 für die letzte Ziffer) werden verdoppelt. Falls die
Verdopplung 9 überschreitet, wird 9 von der Ziffer abgezogen.
Die Kartennummer ist gültig, wenn die Summe ein Vielfaches von 10 ergibt.
Testdaten
(http://www.paypalobjects.com/en_US/vhelp/paypalmanager_help/credit_card_numbers.htm):
Australian BankCard 5610591081018250
Visa 4111111111111111
Visa 4012888888881881
*/
void validate(int *digits)
{
int i;
int sum;
int is_valid;
for (i = 0; i < 16; i++)
{
int digit = digits[i] - '0';
if (i%2 = 0)
{
/* Ungerade Position: addieren */
sum += digit;
}
else
{
/* Gerade Position: Verdoppeln, evtl. 9 abziehen, addieren */
digit *= 2;
if (digit >= 9)
digit -= 9;
sum += digit;
}
}
is_valid = (sum % 10) == 0
}
int main(int argc, char *argv[])
{
if (argc != 2)
{
printf("Usage: csum <card number>\n");
return 1;
}
if (strlen(argv[1]) != 16)
{
printf("Only 16-digit card numbers are supported\n");
return 1;
}
if (!validate(argv[1])
{
printf("Checksum error\n");
return 2;
}
retrun(0);
}