· 

IBAN-Checker in Python programmieren

1. Einführung

In meinem Artikel zum Thema IBAN Prüfziffern habe ich einen Algorithmus vorgestellt, mit dem man die Prüfziffer einer IBAN Nummer berechnen kann. Dieser Algorithmus soll nun in Python implementiert werden. Dann kann für eine eingegebene IBAN überprüft werden, ob diese korrekt ist oder nicht.


2. Implementierung

Wir beginnen unser Programm mit einer Benutzereingabe. Dabei fragen wir nach der IBAN-Nummer, die überprüft werden soll.

iban = input("Geben Sie bitte Ihre IBAN ein: ")

Jetzt müssen nacheinander der Ländercode, die Prüfziffer, die Bankleitzahl (BLZ, 8 Stellen) und die Kontonummer (bis zu 10 Stellen) herausgelesen werden. Mit dem Zugriffsoperator kannst du die entsprechenden Bestandteile auslesen.

  • Der Ländercode sind die ersten beiden Stellen (also von 0 bis 2).
  • Die Prüfziffer sind die beiden Stellen hinter dem Ländercode (also vom Index 2 bis 4).
  • Die Bankleitzahl findet man in den Stellen 4 bis 12.
  • Die Kontonummer ist alles ab der 12. Stelle.
laendercode = iban[0:2]
pruefziffer = iban[2:4]
blz = iban[4:12]
kontonummer = iban[12:]

Da die Kontonummer weniger als 10 Stellen haben kann, ist keine obere Grenze definiert. Auch die Angabe der unteren Grenze beim Ländercode ist eigentlich nicht notwendig, weil man dann automatisch beim ersten Zeichen startet.

Der Algorithmus sieht vor, dass man für die Kontonummer exakt 10 Stellen hat. Deshalbwird auf der Kontonummer die Methode zfill aufgerufen, der du die Anzahl der Stellen übergibst. Ist die Kontonummer kürzer als 10 Stellen, dann werden automatisch führende Nullen angehängt.

kontonummer = iban[12:].zfill(10)

Nun musst du die IBAN auf Korrektheit prüfen. Dafür kannst du aus den ausgelesenen Daten die Prüfziffer berechnen und das Ergebnis mit der ausgelesenen Prüfziffer vergleichen. Dafür definierst du dir zuerst eine Variable check. Du konkatenierst nun die BLZ und die (ggf. um Nullen ergänzte) Kontonummer. Für den Ländercode gehen wir davon aus, dass stets DE übergeben wird. Damit muss ans Ende noch der String "131400" angehängt werden. 

blz + kontonummer + "131400"

Um die Modulo-Operation mit der 97 durchführen zu können, musst du zuerst den String mit der Methode int in eine Ganzzahl umwandeln.

int(blz + kontonummer + "131400")

Jetzt kann die so entstandene Zahl modulo 97 gerechnet werden.

int(blz + kontonummer + "131400")%97

Das Ergebnis wird von der 98 angezogen.

98 - int(blz + kontonummer + "131400")%97

Da es passieren kann, dass die so entstandene Prüfziffer einstellig ist und eine Prüfziffer immer zweistellig sein muss, müssen wir ggf. führende Nullen ergänzen. Hierfür muss die Zahl aber zuerst mit der Methode str wieder in einen String umgewandelt werden.

str(98 - int(blz + kontonummer + "131400")%97)

Jetzt kann die Methode zfill mit dem Übergabewert 2 ausgeführt werden, da die Prüfziffer genau 2 Stellen hat.

str(98 - int(blz + kontonummer + "131400")%97).zfill(2)

Dieses Ergebnis wird nun der Variable check zugewiesen.

check = str(98 - int(blz + kontonummer + "131400")%97).zfill(2)

Abschließend muss nur noch geprüft werden, ob die berechnete Prüfziffer der aus der IBAN ausgelesenen Prüfziffer entspricht. Wenn das der Fall ist, dann stimmt die IBAN. Ansonsten wurde sie vermutlich falsch eingegeben.

if check == pruefziffer:
        print("Die eingegebene IBAN ist korrekt!")
else:
        print("Die eingegebene IBAN ist falsch!")

Beachte: das Programm ist nur so robust wie der Algorithmus zur Berechnung der Prüfsumme. Durch das Verdrehen mehrerer Ziffern in der IBAN kann es zu einem kombinierten Fehler kommen, der wiederum zufällig die "richtige" Prüfziffer als Ergebnis liefert.

Außerdem akzeptiert das Programm auch nicht real existierende Bankleitzahlen. Um dies zu verhindern, kannst du dir auf den Seiten der Deutschen Bundesbank eine Liste mit allen aktuell gültigen Bankleitzahlen herunterladen und damit noch genauer beurteilen, ob eine eingegebene IBAN korrekt ist.


3. Quellcode

Im Folgenden siehst du den Quellcode des Programms, den du bequem herunterladen kannst.

# IBAN eingeben.
iban = input("Geben Sie bitte Ihre IBAN ein: ")

"""
Lies
- den Ländercode (2 Stellen)
- die Prüfziffer (2 Stellen)
- die BLZ (8 Stellen) und
- die Kontonummer (bis zu 10 Stellen)
aus der IBAN aus.
""" 
laendercode = iban[:2]
pruefziffer = iban[2:4]
blz = iban[4:12]

# Kontonummer auf 10 Stellen auffüllen, falls nötig.
kontonummer = iban[12:].zfill(10)

"""
Prüfziffer berechnen (DE = 1314, 00 anhängen).
Ggf. führende Null ergänzen, falls Prüfziffer nur eine Stelle hat.
"""
check = str(98 - int(blz + kontonummer + "131400")%97).zfill(2)

# Ist die berechnete Prüfziffer gleich der ausgelesenen?
if check == pruefziffer:
        print("Die eingegebene IBAN ist korrekt!")
else:
        print("Die eingegebene IBAN ist falsch!")