Noch ein ISBN-Modul
Verfasst: Mittwoch 4. Januar 2012, 05:02
Ich weiß, dass es hiervon schon eine Menge an Tools, Skripten, Modulen usw. gibt. Das hier war eher ein Pausenfüller. Ich wäre an Kritik interessiert, was könnte man besser machen und wo mache ich noch gravierende Fehler.
Für Hinweise und Kritik bin ich offen:
Für Hinweise und Kritik bin ich offen:
Code: Alles auswählen
def checker(isbn):
'''
Rudimentaere Pruefung, ob die ISBN
korrekt sein koennte. Pruefung erfolgt
rein formal:
- Ist die ISBN lang genug (10 oder 13 Stellen)?
- Stimmt die Pruefziffer (PZ)?
'''
isbn = str(isbn)
if len(isbn) == 13 and isbn == isbn[:12] + isbn13PZ(isbn[:12]):
return True
elif len(isbn) == 10 and isbn == isbn[:9] + isbn10PZ(isbn[:9]):
return True
else:
return False
def isbn10to13(isbn10):
'''
Bekommt die 10stellige ISBN und gibt
die 13stellige ISBN als String zurueck
'''
isbn13 = "978" + isbn10[:9] + isbn13PZ("978" + isbn10[:9])
return isbn13
def isbn10PZ(isbn9):
'''
Bekommt die 9stellige ISBN und gibt die
Pruefziffer (PZ) als String zurück
'''
zwErg = 0
for i in range(0,9):
zwErg += int(isbn9[i]) * (i + 1)
if zwErg % 11 == 0:
return "X"
else:
return str(zwErg % 11)
def isbn13to10(isbn13):
'''
Bekommt die 10stellige ISBN und gibt
die 13stellige ISBN als String zurueck
'''
return isbn13[3:-1] + isbn10PZ(isbn13[3:-1])
def isbn13PZ(isbn12):
'''
Bekommt die 12stellige ISBN und gibt die
Pruefziffer (PZ) als String zurück
'''
summe = []
for i in range(12):
if (i + 1) % 2 == 0:
summe.append(int(isbn12[i]) * 3)
else:
summe.append(int(isbn12[i]))
return str((10 - (sum(summe) % 10)) % 10)