Wie IBAN-Nr. mit Python validieren?
Grüßt euch!
Es soll ein Programm mit Python geschrieben werden, dass die IBAN-Nr. validiert. Zudem dürfen nur Ländercodes von Deutschland, Frankreich und Schweiz implementiert werden.
Nun, könnte man sagen: ,,Steht doch alles im Internet''. Da habe ich auch schon Programme gefunden wie hier https://codereview.stackexchange.com/questions/135366/python-iban-validation
oder auch hier http://thilo.cestona.ro/?p=214
Aber das ist viel zu schwer und wir haben jetzt erst angefangen mit Phython (unser aktuelles Thema sind ,,while-Schleifen'')
Wie kann ich möglichst leicht einen IBAN-Validator in Python programmieren? ich weiß, dass bei IBAN eine Prüfziffer erstellt wird, wobei A = 10 und B = 11..., Z =35 und diese durch 97 geteilt, den Rest 1 ergeben muss. Muss ich das erstmal alles einzeln aufschreiben und definieren?
1 Antwort
Wenn du eine fertige IBAN hast z.B.
iban = "AT032011131006100841"
schneidest du zuerst die ersten vier Stellen (Land + Prüfsumme) ab:
land1 = iban[0]
land2 = iban[1]
pz = iban[2:3]
bban = iban[4:]
Jetzt ist bban = "2011131006100841"
Nun machst du aus "A" 10 und aus "T" 29 und hängst das mit der Prüfsumme hinten an:
land1num = ord(land1)-ord("A")+10
land2num = ord(land2)-ord("A")+10
ps = bban+ land1num+land2num+pz
Jetzt ist ps = "2011131006100841102903"
Wenn diese Zahl % 97 den Wert 1 ergibt, war die Prüfsumme richtig
if int(ps)%97 == 1: print "Bingo!"
Funktioniert auch für DE08700901001234567890
denn 700901001234567890131408 % 97 ist 1
Vgl.: https://www.iban.de/iban-pruefsumme.html
Hier wird nur die Prüfsumme validiert, nicht das Land und nicht die Länge!
Danke für die Antwort. Mhmm...also erstmal muckt der Interpreter, weil er die Variable IBAN nicht definiert ist, obwohl ich iban = AT030.... gesetzt habe. Liegt es daran, dass sowohl Zahlen als auch Buchstaben vermischt sind? Außerdem wird verlangt, dass man die IBAN gegebenfalls in die Konsole eingeben kann. Also darf ich die iBan doch gar nicht vorher definieren, oder?
Python unterscheidet Groß- und Kleinschreibung. iban und IBAN sind verschiedene Variablen.
Statt iban = "AT..." (mit Gänsefüßchen!) kannst du auch schreiben
iban = input("Geben Sie die IBAN ein")
Dann wird eine Eingabe von der Konsole abgefragt
Ok, aber muss man nicht erstmal das so definieren, dass A = 10 und Z = 35 usw. Ich habe jetzt versucht die Codes zusammenzufügen, es kommt leider nichts sinnvolles raus.
letters_ = {"A": 10, "B": 11, "C": 12, "D": 13, "E": 14, "F": 15, "G": 16, "H": 17, "I": 18, "J": 19, "K": 20,
"L": 21, "M": 22, "N": 23, "O": 24, "P": 25, "Q": 26, "R": 27, "S": 28, "T": 29, "U": 30, "V": 31,
"W": 32, "X": 33, "Y": 34, "Z": 35,
"0": 0, "1": 1, "2": 2, "3": 3, "4": 4, "5": 5, "6": 6, "7": 7, "8": 8, "9": 9}
iban =DE68210501700012345678
land1 = iban[0]
land2 = iban [1]
pz = iban [2:3]
bban = iban [4:]
land1num = ord (land1) - ord ('A')+10
land2num = ord (land2) - ord ('A') + 10
ps = bban + land1num+land2num+pz
def validate (iban):
ineu = ''
for c in iban:
if 'A' <= c <= 'Z':
c = str(ord(c) - ord ('A') + 10)
ineu += c
ineu = ineu[6:] + ineu [:6]
return int (ineu) % 97 == 1
if int (ps)% 97 == 1: print ('Validiert')
Nein nicht alles auf einmal. Es reicht der zweite Teil (def validate)
Wenn ihr noch keine Methoden gehabt habt, schreibst du statt
def validate(iban)
iban = input("Eingabe ...")
und sorgst dafür, dass der Teil danach richtig eingerückt ist.
Am Ende statt
return ...
if ...:
print("Korrekt")
else:
print ("Falsch")
#Also so:
iban = input("Eingabe bitte:")
ineu = ''
for c in iban:
if 'A' <= c <= 'Z':
c = str(ord(c) - ord ('A') + 10)
ineu += c
ineu = ineu[6:] + ineu [:6]
if int(ineu) % 97 == 1:
print("Korrekt")
else:
print("Falsch")
Vielen dank. Tut mir leid, aber ich versteh es grade nicht so wirklich. Die 6 rührt daher, dass die BAN-Nr. ab der 6. Stelle loslegt? Weil ich muss ja noch irgendwo implementieren, dass die iBan nummern in Frankreich und schweiz anders aufgebaut sind (in der Schweiz sind es nur 21 zeichen, in Frankreich gibt's wohl noch einen sogenannten Bankbereich http://www.pruefziffernberechnung.de/I/IBAN.shtml.
Was steht in dem string der = ineu ist?
In ineu steht z.B. statt "AB1234Z567" "1011123435567". Es ist also die iban, in der die Buchstaben durch den 2-Ziffern-Code A="10"...Z="35" ersetzt wurden.
ineu[:6] sind die ersten 6 Zeichen, ineu[6:] ist der Rest ab dem 7. Zeichen (Die Zählung beginnt bei 0).
Wie die Nummern intern aufgebaut sind ist der Prüfsumme egal. Nur die wird hier geprüft.
Sehe gerade, dass die IBAN von Frankreich und schweiz auch mittendrin Buchstaben enthalten können. Dann funktioniert es nicht ganz so einfach. Du musst erst jeden Buchstaben durch seinen 2-ziffrigen Code ersetzen. Anschließend schneidest du die ersten 6 Stellen vorn ab und hängst sie hinten an. Diese Zahl muss mod 97 den Wert 1 ergeben.