Warum haben Kreditkartennummern (meistens) 16 Zahlen? Wie werden diese Zahlen generiert? Und warum kann nicht jeder Depp eine Reihenfolge an Zahlen zu einer Kreditkartennummer zusammenführen?*
Es gibt eine Website, die das alles anschaulich erklärt:
http://datagenetics.com/blog/july42013/index.html [via]
So geben z.B. die ersten vier Zahlen wieder, zu welcher Gesellschaft diese Karte gehört:
Visa: Präfix 4-
Mastercard: Präfix 51-, 52-, 53-, 54-, 55-
American Express: Präfix 34-, 37-
Da Kreditkartenfirmen bereits eingeplant haben, dass Menschen zu dämlich sein könnten die Nummer korrekt irgendwo anzugeben, hat man nach 15 Zahlen eine Prüfnummer eingefügt. Diese Zahl wurde mathematisch aus den vorangegangenen berechnet: Die Formel wurde 1954 von Hans Peter Luhn bei IBM entwickelt. Es gibt heute kein Patent mehr dafür, diese Formel ist Allgemeingut und läuft unter ISO/IEC 7812-1.
Solche Prüfnummern findet man übrigens auch in Barcodes, ISBNs von Büchern, etc. vor. Den Luhn-Algorithmus kann man aus Spaß auf dieser Website auch anwenden. Er ist jedoch nicht besonders stark (zumindest heute nicht mehr), es gibt weitaus bessere wie z.B. den Verhoeff-Algorithmus (1969) oder den von Damm (2004).
Mehr braucht man dazu eigentlich nicht wissen. Am Ende des Artikels werden noch ein paar Anwendungsbeispiele wie RAIDs genannt, die aber zur eigentlichen Thematik nichts mehr beitragen.
Wer will, der kann den Luhn-Algorithmus auch in einer Programmiersprache seiner Wahl einbauen. Eigentlich sollten sich so eigene Kreditkartennummern generieren lassen. Die entsprechende Funktion in C sieht beispielsweise so aus:
#include
#include
bool checkLuhn(const char *pPurported)
{
int nSum = 0;
int nDigits = strlen(pPurported);
int nParity = (nDigits-1) % 2;
char cDigit[2] = "\0\0"; // atoi erwartet einen null-terminierten String
for (int i = nDigits; i > 0 ; i--)
{
cDigit[0] = pPurported[i-1];
int nDigit = atoi(cDigit);
if (nParity == i % 2)
nDigit = nDigit * 2;
nSum += nDigit/10;
nSum += nDigit%10;
}
return 0 == nSum % 10;
}
[via]
So, haben wir wieder was gelernt! Nett.
*Im Internet gibt es zahlreiche Rechner um sich Fake-Kreditkartennummern generieren zu lassen. Die sind dann für diverse Webseiten durchaus benutzbar, sofern das z.B. eine Voraussetzung ist einen Dienst nutzen zu können. Allerdings sollten diese Nummern nicht bereits benutzt worden sein. Da es sich zudem um eine rechtliche Grauzone mit diesen Generatoren handelt werden die hier nicht verlinkt. Und noch ein Hinweis: Online-generiertes Gedöns kann immer abgefangen werden. Es ist daher sicherer sich sein Programm selber(!) zu bauen.