Kreditkartennummer prüfen
Prüft mit dem Luhn-Verfahren, ob die Prüfziffer einer Kreditkartennummer stimmt — ganz ohne Datenübertragung.
Wenn ihr aus welchen Gründen auch immer mal die Gültigkeit einer Kreditkartennummer prüfen wollt, könnt ihr dieses Script nutzen. Es rechnet ausschließlich im Browser: Die eingegebene Nummer wird nirgendwohin geschickt, sondern direkt auf eurem Gerät durchgerechnet.
Die Bedienung ist denkbar einfach — Nummer ins Feld tippen (Leerzeichen zwischen den Vierergruppen dürft ihr stehen lassen) und auf „Nummer prüfen" klicken. Darunter erscheint, ob die Prüfziffer aufgeht. Als Beispiel ist eine öffentlich bekannte Testnummer vorbelegt, mit der ihr die Funktion gleich ausprobieren könnt. Ändert ihr darin eine einzelne Ziffer, schlägt die Prüfung fehl — genau dafür ist das Verfahren gemacht.
Dahinter steckt der Luhn-Algorithmus, benannt nach dem IBM-Ingenieur Hans Peter Luhn, der ihn in den 1950er Jahren entwickelte. Er ist heute in der Norm ISO/IEC 7812 festgeschrieben und wird nicht nur bei Kreditkarten eingesetzt, sondern auch bei IMEI-Nummern von Mobiltelefonen und einigen Sozialversicherungsnummern. Das Prinzip: Jede zweite Ziffer wird verdoppelt, aus zweistelligen Ergebnissen wird die Quersumme gebildet, und die Summe aller Ziffern muss glatt durch 10 teilbar sein. So fallen Zahlendreher und einzelne Tippfehler sofort auf.
Wichtig zum Verständnis: Geprüft wird nur, ob die Prüfziffer rechnerisch passt — nicht, ob die Karte existiert, gedeckt oder noch gültig ist. Gültigkeitsdauer und die kurze Prüfnummer auf der Rückseite, die man beim Bezahlen zusätzlich braucht, bleiben außen vor. Eine Kreditkarte berechtigt den Inhaber je nach Vereinbarung mit seiner Bank, einen Kredit für die Bezahlung seiner Einkäufe zu erhalten, ohne dafür jeweils einen Antrag stellen zu müssen. Die Zinsen können jedoch mitunter vergleichsweise hoch ausfallen, weshalb sich die regelmäßige Nutzung dieses Darlehens nicht unbedingt lohnen muss.
Wer sich für Quersummen und Ziffernspielereien interessiert: In derselben Kategorie liegen die Primfaktorzerlegung und die Teiler einer Zahl.
Die Nummer wird nur in eurem Browser geprüft und nicht übertragen.
So funktioniert das Script
Das Script besteht aus drei Funktionen: quersumme() und ziffer() sind kleine Helfer, pruef() ist die eigentliche Prüfung. Sie holt die Eingabe, läuft die Nummer von hinten nach vorn durch, summiert die Ziffern nach der Luhn-Regel auf und schreibt das Ergebnis in die Ausgabefläche. Alles steckt in einer sofort ausgeführten Funktion, damit die Namen nicht mit anderen Scripts kollidieren.
const knr = document.getElementById("kk-nr").value.replace(/\s/g, "");
Zuerst wird die Eingabe geholt und geputzt: /\s/g ist ein regulärer Ausdruck (ein Suchmuster) für „jedes Leerzeichen", das g steht für „global", also alle Fundstellen. So dürfen Besucher die Nummer bequem in Vierergruppen eintippen. Im ursprünglichen Script fehlte hier der Backslash, wodurch statt Leerzeichen der Buchstabe „s" entfernt wurde — ein alter Tippfehler, der jetzt behoben ist.
function ziffer(i, txt) {
if (txt.charAt(i) < "0" || txt.charAt(i) > "9") {
return -1;
}
return parseInt(txt.slice(i, i + 1), 10);
}
ziffer() liefert das Zeichen an der Position i als Zahl zurück — oder −1, wenn dort gar keine Ziffer steht. Der Vergleich < "0" || > "9" nutzt aus, dass JavaScript Zeichen nach ihrer Reihenfolge im Zeichensatz vergleicht: Alles außerhalb der Spanne von „0" bis „9" ist keine Ziffer. Die 10 in parseInt(…, 10) ist die Basis, also das Dezimalsystem.
function quersumme(x) {
return x % 10 + Math.floor(x / 10);
}
Diese Zeile bildet die Quersumme einer höchstens zweistelligen Zahl. % ist der Restoperator (Modulo): 16 % 10 ergibt 6, also die Einerstelle. Math.floor(16 / 10) rundet 1,6 auf 1 ab und liefert die Zehnerstelle. Zusammen 6 + 1 = 7 — genau die Quersumme von 16, wie der Luhn-Algorithmus sie für verdoppelte Ziffern verlangt.
for (let i = knr.length - 1; i >= 0; i--) {
if (ziffer(i, knr) !== -1) {
sum += quersumme(ziffer(i, knr) * gw);
gw = 3 - gw;
}
}
Das ist das Herzstück. Die Schleife läuft von der letzten Ziffer rückwärts zur ersten. gw ist das Gewicht und beginnt bei 1; nach jeder Ziffer schaltet gw = 3 - gw zwischen 1 und 2 hin und her — ein hübscher Trick, um abwechselnd zu verdoppeln und nicht zu verdoppeln. Das Produkt wandert durch quersumme() und wird aufaddiert. Nicht-Ziffern werden übersprungen.
if (sum % 10 === 0) {
ausgabe.textContent = "Die Prüfziffer ist in Ordnung.";
} else {
ausgabe.textContent = "Die Prüfziffer ist falsch.";
}
Am Ende die Entscheidung: Ist die Gesamtsumme ohne Rest durch 10 teilbar, stimmt die Prüfziffer. Zuvor werden noch offensichtlich unbrauchbare Eingaben abgefangen — leeres Feld, Buchstaben (erkannt über isNaN, „is Not a Number") oder weniger als 11 Ziffern. Die Meldung erscheint per textContent in der Ergebnisfläche; das Original benutzte dafür noch alert()-Fenster.
Zum Anpassen: Die Mindestlänge lässt sich über knr.length <= 10 ändern, und die beiden Meldungstexte könnt ihr frei umformulieren. Wer eine farbige Rückmeldung möchte, setzt zusätzlich ausgabe.style.color auf Grün beziehungsweise Rot.
Script für die eigene Homepage
Kopiert euch den kompletten Code und fügt ihn an der Stelle eurer Seite ein, an der das Script erscheinen soll. Er läuft ohne weitere Dateien und ohne fremde Server.
Mehr aus der Kategorie Mathematik
-
5 Zahlen
-
Altersberechnungen
-
Anzahl der Stellen von Potenzen kalkulieren
-
Barrel in Liter
-
Beliebige Wurzel ziehen
-
Binomialverteilung
-
Collatz Problem
-
Denk Dir eine Zahl
-
Dezimalbruch
-
Dezimalzahl in Binärzahl umwandeln
-
Die Kamelhändler
-
Downloadzeit-Rechner
-
Drehender Kreis 1
-
Drehender Kreis 2
-
Drehender Kreis 3
-
Dreiecksrechner
-
Dreisatz
-
Dreisatz antiproportional
-
Einfacher Euro-Rechner
-
Fakultät berechnen
-
Fakultätsrechner
-
Fibonacci Reihe berechnen
-
Fibonacci-Zahlen
-
Flächenberechnung / Dreieck
-
Flächenberechnung / Kreis
-
Flächenberechnung / Parallelogramm
-
Flächenberechnung / Rechteck
-
Flächenberechnung / Trapez
-
Gedanken lesen
-
Geschwindigkeitsmesser