Python :: Aufgabe #313 :: Lösung #2

3 Lösungen Lösungen öffentlich
#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ß
#2
vote_ok
von vMaex (540 Punkte) - 16.02.2021 um 10:11 Uhr
Quellcode ausblenden 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

Bitte melden Sie sich an um eine Kommentar zu schreiben.
Kommentar schreiben