Python :: Aufgabe #256

5 Lösungen Lösungen öffentlich

Berechnen der Prüfziffer einer EAN- Nummer

Anfänger - Python von JKooP - 29.03.2020 um 13:53 Uhr
Schreibe ein Programm mit dem man sowohl die Prüfziffer einer EAN- Nummer (Europäische Artikel- Nummerierung) berechnen als auch überprüfen kann.

Die EAN- Nummer besteht aus 13 Ziffern, wobei es sich bei der letzten Ziffer um die Prüfziffer handelt.

Beispiel für eine EAN: 978381582086[?]

Die Prüfziffer wird berechnet, indem man die ersten 12 Ziffern von links beginnend abwechselnd mit 1 und 3 multipliziert und anschließend die Produkte summiert.

Die Differenz zum nächsten Vielfachen von 10 ist die Prüfziffer.

Ist die Summe durch 10 teilbar, ist die Prüfziffer die Ziffer 0.

9·1 + 7·3 + 8·1 + 3·3 + 8·1 + 1·3 + 5·1 + 8·3 + 2·1 + 0·3 + 8·1 + 6·3
= 9 + 21 + 8 + 9 + 8 + 3 + 5 + 24 + 2 + 0 + 8 + 18 = 115
115 + 5 = 120 ⇒ Prüfziffer: 5

Viel Spaß

Lösungen:

1 Kommentar
vote_ok
von Gisbert5020 (3120 Punkte) - 31.03.2020 um 20:09 Uhr
Quellcode ausblenden Python-Code
def pruef(nummer):
    summe=0
    for x in range(12):
        if x%2==0:
            summe+=int(nummer[x])
        else:
            summe+=int(nummer[x])*3
    return(120-summe)

nummer= input("EAN-Nummer  eingeben:")
zahl = pruef(nummer)
if len(nummer) == 13 and str(zahl) != nummer[12]:
    print("Die EAN-Nummer ist falsch")
else:
    print("Die Prüfnummer =",zahl)
vote_ok
von satn1241 (3090 Punkte) - 01.04.2020 um 12:07 Uhr
Quellcode ausblenden Python-Code
#Prüfziffer einer EAN-Nummer bestimmen
summe = 0
#Eingabe
zahl = int(input("Geben Sie bitte die EAN-Nr. ein (12 Zifern): "))
zahl = str(zahl)
#Überprüfung der Eingabe
while len(zahl) !=12:
    zahl = int(input("Das eingebene Format passt nicht, bitte erneut eingeben!"))
    zahl = str(zahl)  
#Berechnung der Prüfziffer    
for stelle in zahl:
    if int(stelle)%2 == 0:
        summe = summe + int(stelle)
    elif int(stelle)%2 == 1:
        summe = summe + int(stelle)*3
prüfziffer = (10 - summe%10)%10   

#Ausgabe der Prüfziffer    
print("dir Prüfziffer ist:",prüfziffer)        
vote_ok
von Asthos (410 Punkte) - 03.04.2020 um 22:08 Uhr
Quellcode ausblenden Python-Code
#!/usr/bin/env python
# -*- coding: utf-8 -*-

#Aufgabe:
#Schreibe ein Programm mit dem man sowohl die Prüfziffer einer EAN- Nummer (Europäische Artikel- Nummerierung) berechnen als auch überprüfen kann.
#Die EAN- Nummer besteht aus 13 Ziffern, wobei es sich bei der letzten Ziffer um die Prüfziffer handelt.
#Beispiel für eine EAN: 978381582086[?]
#Die Prüfziffer wird berechnet, indem man die ersten 12 Ziffern von links beginnend abwechselnd mit 1 und 3 multipliziert und anschließend die Produkte summiert.
#Die Differenz zum nächsten Vielfachen von 10 ist die Prüfziffer.
#Ist die Summe durch 10 teilbar, ist die Prüfziffer die Ziffer 0.
#9·1 + 7·3 + 8·1 + 3·3 + 8·1 + 1·3 + 5·1 + 8·3 + 2·1 + 0·3 + 8·1 + 6·3
#= 9 + 21 + 8 + 9 + 8 + 3 + 5 + 24 + 2 + 0 + 8 + 18 = 115
#115 + 5 = 120 ⇒ Prüfziffer: 5

EAN1 = '9783815820860'
EAN2 = '978381582086'

def get_pruefziffer(ean):
    zwischensumme = 0
    for i, c in enumerate(ean):
        if i == 12:
            #mehr Einträge müssen nicht aufaddiert werden
            break
        if i % 2 == 1:
            #ungerade Einträge
            zwischensumme += int(c) * 3
        else:
            #gerade Einträge
            zwischensumme += int(c)
    #Prüfziffer ist der Rest der ganzzahligen Division mit 10
    return zwischensumme % 10

#Überprüfen ob die Prüfziffer auch stimmt
def check_ean(ean):
    if len(ean) != 13:
        print(str(ean) + ' hat nicht die richtige Länge')
    elif get_pruefziffer(ean) != ean[12]:
        print(str(ean) + ' hat nicht richtige Prüfziffer '  + str(get_pruefziffer(ean)))
    else:
        print(str(ean) + ' hat richtige Prüfziffer ')

check_ean(EAN1)

print('Prüfziffer von ' + str(EAN2) + ' ist ' + str(get_pruefziffer(EAN2)))

Ergebnis:
9783815820860 hat nicht richtige Prüfziffer 5
Prüfziffer von 978381582086 ist 5
vote_ok
von Des_ORNTRT (530 Punkte) - 07.04.2020 um 21:10 Uhr
Quellcode ausblenden Python-Code
print("EAN-Prüfziffer berechnen oder überprüfen?")
print("a für berechnen , b für überprüfen")
wahl = input().lower()
if wahl == "a":
    print("Geben sie die ersten 12 Ziffern der EAN-Nummer ein:")
    eanNummer: str = input()
    x = 0
    j = 0
    l = 0

    for i in range(1, 13):

        if i % 2 == 0:
            x = x + (int(eanNummer[j]) * 3)
            j += 1

        else:
            x = x + int(eanNummer[j])
            j += 1

    while x % 10 != 0:
        x += 1
        l += 1

    print("Die Prüfziffer lautet " + str(l))

if wahl == "b":
    print("Geben sie die EAN-Nummer ein:")
    eanNummer: str = input()
    x = 0
    j = 0
    l = 0

    for i in range(1, 13):

        if i % 2 == 0:
            x = x + (int(eanNummer[j]) * 3)
            j += 1

        else:
            x = x + int(eanNummer[j])
            j += 1

    while x % 10 != 0:
        x += 1
        l += 1

    if str(l) == eanNummer[12]:
        print("Die Prüfziffer ist korrekt.")
    else:
        print("Die Prüfziffer ist nicht korrekt.")

vote_ok
von cmb (190 Punkte) - 04.07.2020 um 13:25 Uhr
Quellcode ausblenden Python-Code
while True:
    try:
        eanstr = input("EAN eingeben: ")
        eanint = int(eanstr)
        break
    except ValueError:
        print("Keine Zahl!")
faktoren = [1,3,1,3,1,3,1,3,1,3,1,3]
sumprod = 0

for inx,val in enumerate(faktoren):
    sumprod += int(eanstr[inx])*val

pruefz = eanstr[len(eanstr)-1]
print("Die eingegebene Prüfziffer ist",pruefz,".")
pruefzber = abs((sumprod % 10) -10) % 10
print("Die berechnete Prüfziffer ist",pruefzber,".")

if int(pruefz) == pruefzber:
    print("Die EAN ist korrekt.")
else:
    print("Die Prüfziffer der EAN ist nicht korrekt.")