Menü

Prüfziffernverfahren: mod-10, mod-11 und mod-97 im Vergleich

Prüfziffernverfahren teilen ein gemeinsames Gerüst — Ziffern gewichten, summieren, modulo rechnen, Rest abbilden. Die Familien mod-10, mod-11 und mod-97 unterscheiden sich nur in diesen Parametern.

Veröffentlicht am

  • Validierung
  • Prüfziffer
  • Verfahren

Prüfziffernverfahren wirken wie eine lange Liste unverbundener Rezepte, bis man bemerkt, dass sie Abwandlungen einer einzigen Idee sind. Jedes nimmt die Zeichen vor der letzten Position, gibt jedem ein Gewicht, addiert die Ergebnisse, teilt durch einen Modul und verwandelt den Rest in das letzte Zeichen.

Ist dieses Gerüst einmal sichtbar, wird die Wahl zwischen den Familien mod-10, mod-11 und mod-97 zu einer Frage der Abstimmung von vier Parametern auf die Aufgabe statt zu einer Geschmacksfrage. Dieser Beitrag vergleicht die Familien auf dieser Ebene und überlässt die Arithmetik einzelner Kartenschemata den Beiträgen, denen sie gehört.

Welche Familien von Prüfziffernverfahren gibt es?

Die übliche Einteilung richtet sich nach dem Modul, weil der Modul alles andere prägt.

Die Familie mod-10 teilt die gewichtete Summe durch zehn, der Rest ist deshalb immer eine einzelne Dezimalziffer und braucht keine weitere Übersetzung. Die Familie mod-11 teilt durch elf; das ergibt elf mögliche Reste, von denen zehn in eine einzelne Ziffer passen und der elfte anders dargestellt werden muss. Die Familie mod-97 teilt durch siebenundneunzig und wird meist dann herangezogen, wenn die Kennungen lang sind oder Buchstaben enthalten.

ISO 7064 ist die internationale Norm, die mehrere veröffentlichte Prüfzeichensysteme dieser Art bündelt, darunter die Anordnung MOD 97-10 für länderübergreifende Kontokennungen. Eine Familie zu benennen sagt etwas über die Form der Arithmetik, nicht über die genauen Parameter, auf die sich ein bestimmtes Schema festgelegt hat. Diese Unterscheidung zählt, sobald Sie solche Routinen in eine Prüfkette einordnen, die zugleich Zeichensätze und Längen prüfen muss.

Wie unterscheiden sich mod-10, mod-11 und mod-97?

Die Unterschiede, die in der Praxis zählen, folgen alle aus dem Modul.

Familie Modul Typischer Einsatz Der unangenehme Teil
mod-10 10 Kurze numerische Kennungen, Kartennummern und ähnliche Schemata Die Gewichte sind in manchen Anordnungen symmetrisch, was die Erkennung von Vertauschungen schwächt
mod-11 11 Kennungen, bei denen die Entwerfer eine stärkere Fehlererkennung wollten Ein Restwert passt nicht in eine einzelne Ziffer und muss abgebildet oder vermieden werden
mod-97 97 Lange Kennungen, besonders alphanumerische wie länderübergreifende Kontonummern Verlangt zuerst eine Umwandlung von Buchstaben in Zahlen, deshalb greifen die meisten Umsetzungen zu einer Bibliothek statt zu handgeschriebenem Code

Ein Kartenschema, das seine Nummern mit einem verdoppelnden und addierenden mod-10 abschließt, gehört in die erste Zeile. Diese Routine ist mod-10-Arithmetik unter einem Namen, und hier ist die Sicht auf die Familie die nützliche: Dieselbe Arithmetik erscheint in Bonusprogrammen, internen Kennungen und mehreren nationalen Nummernsystemen. Deshalb greift ein nach Karten benannter Helfer an anderen Stellen daneben. Hinter der dritten Zeile stehen lange länderübergreifende Kontokennungen, Schritt für Schritt durchgearbeitet in IBAN-Aufbau und mod-97.

Gewichtung und Modul: die Parameter innerhalb einer Familie

Innerhalb einer Familie unterscheiden sich die Mitglieder an genau drei Stellen. Die erste ist die Gewichtsfolge — welche Positionen mit welchem Wert multipliziert werden und ob das Muster sich wiederholt oder wächst. Die zweite ist der Modul selbst, gewählt passend zu Länge und Alphabet der Kennung. Die dritte ist die Abbildung vom Rest auf das Prüfzeichen, und dort liegt die meiste sichtbare Vielfalt.

Diese Abbildung verdient einen zweiten Blick, denn hier muss ein Schema eine Entscheidung über Reste treffen. Ein mod-10-Rest ist von Natur aus eine Ziffer. Ein mod-11-Rest kann zehn sein, und das Schema muss entweder die Kombinationen verbieten, die ihn erzeugen, oder das Ergebnis in einen anderen Bereich verschieben oder ein Zeichen wie den Buchstaben X dafür reservieren. Ein mod-97-Rest muss noch einmal auf die Prüfzeichen reduziert werden, die das Schema tatsächlich zulässt.

Diese Entscheidung zu überspringen ist der häufigste Weg, auf dem eine handgeschriebene Umsetzung von der veröffentlichten Regel abdriftet. Die Arithmetik sieht bei den bequemen Eingaben richtig aus und versagt bei den unangenehmen.

Warum erkennen manche Verfahren Vertauschungen?

Benachbarte Zeichen werden beim Tippen ständig vertauscht, deshalb ist das Erkennen dieser Fehlerklasse ein Entwurfsziel und kein Zusatz.

Der Mechanismus sind die Gewichte. Multipliziert ein Schema jede Position mit einem anderen Wert, ändert eine Vertauschung zweier Nachbarn, wie viel jeder von ihnen beiträgt, und die Summe bewegt sich mit. Sind die Gewichte symmetrisch — auf beiden Seiten des Paares derselbe Wert —, tauschen die beiden Beiträge nur die Plätze und die Summe bleibt gleich; die Prüfung lässt die Vertauschung durch.

Das ist der Grund, warum es das verdoppelnde Mitglied der mod-10-Familie überhaupt gibt. Das Verdoppeln abwechselnder Positionen macht das Gewicht jeder Stelle von ihrer Lage abhängig und stellt die Fähigkeit wieder her, eine Vertauschung zu bemerken. Perfekt ist es weiterhin nicht: Bestimmte Paarungen ergeben vor und nach dem Tausch dieselbe Summe. Eine zutreffende Beschreibung jeder Prüfziffer lautet daher, dass sie jeden Einzelzeichenfehler und die meisten, nicht alle, Nachbarvertauschungen fängt.

Vier Fragen vor der Wahl eines Verfahrens

Die Auswahl wird leichter, wenn man sie als kurze Reihe konkreter Fragen behandelt statt als Geschmackssache.

  1. Wie lang kann die Kennung sein, und ist die Länge fest oder veränderlich?
  2. Welche Zeichen sind zulässig — nur Ziffern oder auch Buchstaben?
  3. Stammen die erwarteten Fehler von Menschen, die tippen, von Maschinen, die erzeugen, oder von beiden?
  4. Was geschieht, wenn die Arithmetik ein Prüfzeichen ergibt, das nicht in das Format passt?

Die vierte Frage überspringen Teams am liebsten. Ein Schema, das auf einem einstelligen Feld einen zweistelligen Rest erzeugen kann, braucht entweder eine Regel für die Ausnahmen oder einen Modul, der sie vermeidet. Wer das spät entdeckt, schreibt die Regel neu, statt sie anzupassen.

Zwei Gewohnheiten folgen daraus. Erfinden Sie keine Parameter: Setzen Sie um, was das Schema veröffentlicht, und belegen Sie die Umsetzung anschließend gegen das veröffentlichte Material des Schemas. Und wenn zwei Schemata in einem Produkt den größten Teil ihrer Arithmetik teilen, teilen Sie die Umsetzung und lassen Sie nur die Parameter abweichen, statt die Routine zu kopieren und die Kopien auseinanderlaufen zu lassen.

Für Entwickler: eine Umsetzung für eine ganze Familie

Die Sicht auf die Familie rechnet sich im Code. Eine einzige Routine, parametrisiert nach Gewichtsfolge, Modul und Abbildung, deckt jedes Mitglied ab, und jedes neue Schema wird zu einer Konfiguration statt zu einer neuen Datei. Das hält die Durchsicht kurz, weil die Arithmetik einmal geprüft wird und die Parameter Zeile für Zeile geprüft werden.

Zwei Entwurfsdetails verhindern den größten Teil des Ärgers. Geben Sie das berechnete Prüfzeichen zurück statt eines Wahrheitswerts; dann kann die aufrufende Stelle ausgeben, was die Arithmetik erwartet hat, und der Unterschied zwischen einem falschen Wert und einem nicht unterstützten Schema bleibt bis nach oben sichtbar. Und halten Sie den Schritt der Rückabbildung ausdrücklich in der Konfiguration, denn er ist der Teil, der sich zwischen Schemata unterscheidet, und der Teil, an den sich niemand erinnert.

Alle Ziffernfolgen, die diesen Beitrag illustrieren, sind synthetisch. Die beschriebenen Parameter sind öffentliches Wissen, während die Beispielzeichenketten zur Veranschaulichung konstruiert sind und keine Nummer beschreiben, die ein Schema ausgegeben hat.

Nächste Schritte

Listen Sie die Nummernsysteme auf, die Ihr Produkt verarbeitet, und ordnen Sie jedes einer Familie zu, bevor Sie etwas anderes schreiben. Erzeugen Sie dann einen Wert, ändern Sie ein einzelnes Zeichen und ändern Sie ein Paar benachbarter Zeichen, und stellen Sie sicher, dass beide Fälle scheitern. Das Werkzeug zur Nummernprüfung zeigt die Urteile, die ein Prüfer auseinanderhalten sollte, der Beitrag zu IBAN und mod-97 ist der durchgerechnete Fall der Familie für lange Kennungen, und wie die Nummernprüfung arbeitet führt zurück zu den drei Ebenen, in denen diese Verfahren sitzen.

Weiterlesen

Artikel zu Prüfer für Kreditkarten- und SSN-Nummern