IBAN prüfen
Prüft eine IBAN mit dem Modulo-97-Verfahren, kontrolliert die Länge des Landes und zerlegt deutsche IBANs in Bankleitzahl und Kontonummer.
Eine IBAN enthält eine eingebaute Prüfziffer. Sie erkennt fast jeden Tippfehler: eine falsche Ziffer, zwei vertauschte Stellen, eine fehlende Ziffer. Dieses Script führt diese Prüfung durch, kontrolliert außerdem die für das Land vorgeschriebene Länge und zerlegt deutsche IBANs in ihre Bestandteile.
Zwei Dinge kann die Prüfung nicht — und das ist wichtig zu wissen. Sie sagt nicht, ob das Konto existiert, und sie sagt nicht, wem es gehört. Eine erfundene IBAN mit richtig gerechneter Prüfziffer besteht den Test anstandslos. Die Prüfziffer schützt vor Vertippen, nicht vor Betrug — sie ersetzt also nicht den Blick darauf, wohin man überweist.
Der Aufbau ist überall gleich: zwei Buchstaben für das Land, zwei Prüfziffern, danach die nationale Kontokennung. In Deutschland sind das die achtstellige Bankleitzahl und die zehnstellige Kontonummer, zusammen 22 Zeichen. Andere Länder haben andere Längen — von 15 Zeichen in Norwegen bis 31 in Malta. Das Script kennt die Längen der gängigen Länder und weist auf Abweichungen hin.
Alles läuft in eurem Browser; die eingegebene IBAN wird nicht übertragen. Verwandtes im Archiv: Kreditkartennummer prüfen arbeitet mit dem verwandten Luhn-Verfahren, ISBN-Prüfziffer mit einem dritten, und die SHA-256-Prüfsumme zeigt, wie moderne Prüfsummen aussehen.
Die Prüfung findet in eurem Browser statt. Sie sagt nur, ob die Ziffernfolge stimmig ist — nicht, ob das Konto existiert.
So funktioniert das Script
Das Verfahren heißt Modulo 97-10 und ist in der Norm ISO 7064 festgelegt. Es besteht aus drei Schritten — umstellen, in Ziffern übersetzen, Rest bilden — und der dritte hat einen Haken, an dem viele scheitern.
const umgestellt = iban.slice(4) + iban.slice(0, 4);
Die ersten vier Zeichen — Ländercode und Prüfziffer — wandern ans Ende. Das ist keine Willkür: Bei der Berechnung der Prüfziffer stehen an dieser Stelle zwei Nullen, und die Prüfziffer wird so bestimmt, dass die fertige Zahl bei Division durch 97 den Rest 1 lässt. Genau das wird hier nachgeprüft.
ergebnis += String(zeichen.charCodeAt(0) - 55);
Buchstaben werden zu zweistelligen Zahlen: A wird zu 10, B zu 11, bis Z zu 35. Die 55 ergibt sich aus dem Zeichencode — das große A hat die Nummer 65, und 65 − 55 ergibt 10. Aus „DE89…" wird so „131489…", denn D ist 13 und E ist 14.
let rest = 0;
for (let i = 0; i < ziffern.length; i++) {
rest = (rest * 10 + Number(ziffern.charAt(i))) % 97;
}
Hier steckt der Haken. Eine deutsche IBAN wird nach der Übersetzung zu einer Zahl mit etwa 24 Stellen — und so große ganze Zahlen kann JavaScript nicht mehr genau darstellen. Ab etwa 16 Stellen beginnt es zu runden, und der Rest bei Division durch 97 wäre schlicht falsch. Ein Number("1314...")% 97 liefert also ein Ergebnis, das plausibel aussieht und nicht stimmt.
Die Lösung ist die schriftliche Division, wie man sie in der Schule lernt: Man nimmt eine Ziffer nach der anderen, hängt sie an den bisherigen Rest an und teilt sofort wieder. Weil der Rest immer kleiner als 97 bleibt, wird der Zwischenwert nie größer als 979 — und mit solchen Zahlen rechnet jeder Computer exakt. Dasselbe Verfahren braucht man überall, wo Prüfziffern über lange Ziffernfolgen laufen.
if (!/^[A-Z]{2}[0-9]{2}[A-Z0-9]+$/.test(iban)) { … }
Vor der Rechnung wird die Form geprüft: genau zwei Buchstaben, genau zwei Ziffern, danach Buchstaben oder Ziffern. Ohne diese Prüfung liefe die Übersetzung in Ziffern über Zeichen, für die sie nicht gedacht ist, und produzierte Unsinn statt einer Fehlermeldung. Die geschweiften Klammern geben dabei die genaue Anzahl an: {2} heißt „genau zwei davon".
return iban.replace(/(.{4})/g, "$1 ").trim();
Zur Anzeige wird die IBAN in Vierergruppen zerlegt, wie es auf Rechnungen üblich ist. (.{4}) greift je vier beliebige Zeichen, und $1 im Ersatztext setzt sie samt einem Leerzeichen wieder ein. Das trim() entfernt das überzählige Leerzeichen am Ende.
Zum Anpassen: Wollt ihr die Prüfziffer zu einer IBAN berechnen statt sie zu prüfen, setzt ihr an ihre Stelle „00", rechnet den Rest wie oben und bildet 98 - rest; das Ergebnis wird zweistellig geschrieben. Für eine Eingabehilfe, die beim Tippen automatisch Vierergruppen bildet, hängt ihr die Gruppierungsfunktion an das input-Ereignis des Feldes.
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 Verschiedenes
-
Auf Seite suchen
-
Benzinverbrauch
-
BMI berechnen
-
Browserinformationen
-
Caps Lock Text korrigieren
-
Cookietest
-
CPU-Test
-
Eieruhr
-
Erdbeben
-
Farbverlauf
-
Gruppen einteilen
-
Handyrechner
-
ISBN-Prüfziffer
-
Javascript Shell
-
Kontrast prüfen
-
Losentscheid
-
Lottozahlen Generator
-
Mauskoordinaten
-
Mehrwertsteuer-Rechner
-
Metronom
-
Notenrechner
-
Passwortgenerator
-
Periodensystem
-
Popup-Generator
-
RGB-Slider
-
Seitenverhältnis-Rechner
-
Tabellengenerator
-
Tastencodes anzeigen
-
To Do List