ISBN-Prüfziffer
Prüft ISBN-10 und ISBN-13, rechnet zwischen beiden um und ergänzt eine fehlende Prüfziffer.
Jedes Buch trägt eine ISBN, die Internationale Standardbuchnummer, und in ihr steckt eine Prüfziffer. Sie ist die letzte Stelle und wird aus allen anderen berechnet — wer sich beim Abtippen vertut, merkt es sofort. Dieses Script prüft beide Formen, rechnet sie ineinander um und ergänzt auf Wunsch eine fehlende Prüfziffer.
Bis Ende 2006 war die ISBN zehnstellig, seit 2007 dreizehnstellig. Der Grund für die Umstellung war praktischer Natur: Die dreizehnstellige Form ist zugleich eine gültige Artikelnummer im weltweiten Handelssystem und lässt sich damit als Strichcode auf dem Buchrücken an jeder Kasse einlesen. Alte zehnstellige Nummern wurden schlicht um das Präfix 978 ergänzt und mit neu gerechneter Prüfziffer versehen — deshalb beginnen so viele ISBN mit 978. Als dieser Nummernraum knapp wurde, kam 979 hinzu.
Die beiden Formen benutzen verschiedene Prüfverfahren, und das ist der eigentlich interessante Teil. Die zehnstellige rechnet modulo 11 und braucht deshalb gelegentlich ein X als Prüfziffer — für den Wert 10, den es als einzelne Ziffer nicht gibt. Die dreizehnstellige rechnet modulo 10 und kommt ohne Sonderzeichen aus, erkennt dafür aber weniger Fehler. Warum das so ist, steht unten in der Erklärung.
Verwandtes im Archiv: IBAN prüfen mit dem Modulo-97-Verfahren, Kreditkartennummer prüfen mit dem Luhn-Verfahren und Quersumme berechnen für die einfachste Form einer solchen Rechnung.
Bindestriche und Leerzeichen dürfen drinbleiben. Für die Prüfziffer einer unvollständigen Nummer tragt an ihrer Stelle ein Fragezeichen ein.
So funktioniert das Script
Zwei Prüfverfahren, dieselbe Grundidee: Jede Stelle bekommt ein Gewicht, alles wird aufsummiert, und die Prüfziffer wird so gewählt, dass die Summe glatt aufgeht. Der Unterschied im Detail entscheidet darüber, welche Fehler erkannt werden.
for (let i = 0; i < 9; i++) {
summe += Number(neunStellen.charAt(i)) * (10 - i);
}
const wert = (11 - (summe % 11)) % 11;
Bei der ISBN-10 hat die erste Stelle das Gewicht 10, die zweite 9, und so fort bis zur neunten mit Gewicht 2. Die Prüfziffer selbst hat Gewicht 1 und wird so gewählt, dass die Gesamtsumme durch 11 teilbar ist. (11 - rest) % 11 liefert genau diesen Wert — das zweite % 11 fängt den Fall ab, dass der Rest schon 0 war; sonst käme 11 heraus statt 0.
return wert === 10 ? "X" : String(wert);
Modulo 11 kann elf verschiedene Ergebnisse liefern — 0 bis 10. Für die 10 gibt es keine einzelne Ziffer, deshalb schreibt man ein römisches X. Ungefähr jede elfte ISBN-10 endet daher auf X. Das ist genau der Preis, den die 11 verlangt — und zugleich der Grund für ihre Stärke: Weil 11 eine Primzahl ist, erkennt das Verfahren jede einzelne falsche Ziffer und jede Vertauschung zweier Stellen.
summe += Number(zwoelfStellen.charAt(i)) * (i % 2 === 0 ? 1 : 3);
Die ISBN-13 wechselt zwischen den Gewichten 1 und 3, gerechnet wird modulo 10. Das ist bequemer — keine Sonderzeichen, und es passt zum Strichcode-System des Handels. Es ist aber schwächer: Eine Vertauschung zweier benachbarter Ziffern, deren Differenz genau 5 beträgt, bleibt unentdeckt. Aus 1 und 6 wird 6 und 1, und die Summe ändert sich um 2 · 5 = 10, also um ein glattes Vielfaches von 10. Die zehnstellige Form hatte diese Lücke nicht.
const dreizehn = "978" + roh.slice(0, 9);
const neu = dreizehn + pruefziffer13(dreizehn);
Die Umrechnung von zehn auf dreizehn Stellen ist einfacher, als man denkt: Die alte Prüfziffer fällt weg, vorn kommt 978 dazu, und die Prüfziffer wird nach dem neuen Verfahren berechnet. Die eigentliche Buchnummer — die neun Stellen in der Mitte — bleibt unverändert. Rückwärts geht es genauso, allerdings nur bei Nummern mit dem Präfix 978: Für 979er gibt es keine zehnstellige Entsprechung, weil sie erst nach der Umstellung vergeben wurden.
if (!/^[0-9]{9}[0-9X?]$/.test(roh)) { … }
Die Formprüfung lässt an letzter Stelle ausdrücklich auch ein X und ein Fragezeichen zu — das X als gültige Prüfziffer, das Fragezeichen als Platzhalter für „bitte ausrechnen". Diese kleine Zusatzfunktion macht aus einem Prüfer ein Werkzeug, mit dem man auch eine unvollständig notierte Nummer retten kann.
Zum Anpassen: Die ISBN-13 ist ein Sonderfall der dreizehnstelligen Artikelnummer, wie sie auf jedem Supermarktprodukt steht — dieselbe Prüfrechnung gilt also auch dafür. Wollt ihr die Nummer in die üblichen Gruppen gliedern (Präfix, Ländergruppe, Verlag, Titel, Prüfziffer), braucht ihr die Verlagsbereichs-Tabelle der ISBN-Agentur; sie lässt sich nicht aus der Nummer selbst ableiten.
Script für die eigene Homepage
Kopiert euch den kompletten Code und fügt ihn an der Stelle eurer Seite ein, an der das Script erscheinen soll. Er läuft ohne weitere Dateien und ohne fremde Server.
Mehr aus der Kategorie Verschiedenes
-
Auf Seite suchen
-
Benzinverbrauch
-
BMI berechnen
-
Browserinformationen
-
Caps Lock Text korrigieren
-
Cookietest
-
CPU-Test
-
Eieruhr
-
Erdbeben
-
Farbverlauf
-
Gruppen einteilen
-
Handyrechner
-
IBAN prüfen
-
Javascript Shell
-
Kontrast prüfen
-
Losentscheid
-
Lottozahlen Generator
-
Mauskoordinaten
-
Mehrwertsteuer-Rechner
-
Metronom
-
Notenrechner
-
Passwortgenerator
-
Periodensystem
-
Popup-Generator
-
RGB-Slider
-
Seitenverhältnis-Rechner
-
Tabellengenerator
-
Tastencodes anzeigen
-
To Do List