Python :: Aufgabe #313 :: Lösung #2
3 Lösungen
#313
Seriennummer Euro- Banknoten überprüfen (bis 2013)
Anfänger - Python
von JKooP
- 26.01.2021 um 10:26 Uhr
Jede Banknote enthält eine eindeutige Seriennummer, bestehend aus 12 Zeichen
mit folgender alphanumerischer Signatur (ab 2013 abweichend):
LNNNNNNNNNNJ (z.B. X17291528696)
L: Ländercode als Buchstabe von A bis Z (z.B. X für Deutschland, N für Österreich…)
N: 10 Ziffern von 0 bis 9
J: Prüfziffer von 1 bis 9
Berechnung der Prüfziffer:
Der Ländercode muss in eine Zahl umgewandelt werden.
Diese ergibt sich aus der Position des Buchstabens im Alphabet. (A = 1, B = 2; … X = 24)
Dann wird die Quersumme aus der entstandenen Zahl des Ländercodes und den 10 folgenden Ziffern ohne Prüfziffer gebildet.
241729152869 => 2+4+1+7+2+9+1+5+2+8+6+9 = 56
Es wird der Rest (R) der Division durch 9 ermittelt
R = 56 Modulo 9 = 2
und dann der Prüfwert (P).
P = 8 – R => 8 – 2 = 6
Wenn P = 0, dann ist J = 9, ansonsten ist J = P.
X17291528696 => gültige Banknote!
Aufgabe:
Schreibe ein Programm, welches folgende Ergebnisse liefert:
1. Prüfen, ob es sich bei der eingegebenen Seriennummer um die richtige Signatur handelt.
2. Generieren der Prüfziffer J aus dem Ländercode und den folgenden 10 Ziffern.
3. Prüfen, ob es sich bei Eingabe einer Seriennummer um eine Euro- Banknote handelt.
4. Ausgabe des zugehörigen Landes der Euro- Banknote (siehe NZB-Kennung)
Viel Spaß
mit folgender alphanumerischer Signatur (ab 2013 abweichend):
LNNNNNNNNNNJ (z.B. X17291528696)
L: Ländercode als Buchstabe von A bis Z (z.B. X für Deutschland, N für Österreich…)
N: 10 Ziffern von 0 bis 9
J: Prüfziffer von 1 bis 9
Berechnung der Prüfziffer:
Der Ländercode muss in eine Zahl umgewandelt werden.
Diese ergibt sich aus der Position des Buchstabens im Alphabet. (A = 1, B = 2; … X = 24)
Dann wird die Quersumme aus der entstandenen Zahl des Ländercodes und den 10 folgenden Ziffern ohne Prüfziffer gebildet.
241729152869 => 2+4+1+7+2+9+1+5+2+8+6+9 = 56
Es wird der Rest (R) der Division durch 9 ermittelt
R = 56 Modulo 9 = 2
und dann der Prüfwert (P).
P = 8 – R => 8 – 2 = 6
Wenn P = 0, dann ist J = 9, ansonsten ist J = P.
X17291528696 => gültige Banknote!
Aufgabe:
Schreibe ein Programm, welches folgende Ergebnisse liefert:
1. Prüfen, ob es sich bei der eingegebenen Seriennummer um die richtige Signatur handelt.
2. Generieren der Prüfziffer J aus dem Ländercode und den folgenden 10 Ziffern.
3. Prüfen, ob es sich bei Eingabe einer Seriennummer um eine Euro- Banknote handelt.
4. Ausgabe des zugehörigen Landes der Euro- Banknote (siehe NZB-Kennung)
Viel Spaß
#2
von vMaex (540 Punkte)
- 16.02.2021 um 10:11 Uhr
Python-Code
#Seriennummer Banknoten prüfen buchstabe = ('a b c d e f g h i j k l m n o p q r s t u v w x').split() länder = ('leer Litauen Lettland Estland Slowakei Malta Zypern Slowenien leer UK Schweden Finnlad Protugal Österreich leer Niederlande leer Luxemburg Italien Irland Frankreich Spanien Dänemark Deutschland').split() buchstabe_land = {} seriennummer = ['X17291528696', 'S37373737354', 'X00000000134', 'A123456789012', 'Z12345678901'] zahl = 1 for b in buchstabe: buchstabe_land[b] = [zahl, länder[buchstabe.index(b)]] zahl = zahl + 1 def nummer_prfen(): if len(seriennummer) == 12 and seriennummer.rstrip('1,2,3,4,5,6,7,8,9,0').lower() in buchstabe: return True else: print('Seriennummer ist ungültig') return False def p_ziffer(): global land nummer, land = buchstabe_land[seriennummer.rstrip('1,2,3,4,5,6,7,8,9,0').lower()] snum_bereinigt = list(seriennummer) snum_bereinigt.pop(0) snum_bereinigt.pop(-1) ergebnis = sum(int(x) for x in snum_bereinigt) for x in str(nummer): ergebnis = ergebnis + int(x) r = ergebnis % 9 p = 8 - r j = list(seriennummer).pop(-1) if p == int(j): return True else: return False for seriennummer in seriennummer: print('\n' + seriennummer) if nummer_prfen() is True: if p_ziffer() is True: print('Banknote ist gültige Euronote aus',land) else: print('Banknote ist keine gültige Euronote') else: continue
Kommentare:
Für diese Lösung gibt es noch keinen Kommentar
Seite 1 von 0
1