Die Länge nationaler Identifikationsnummern ist das Erste, was bricht, wenn ein Team ein Formular internationalisiert. Eine Spalte, die auf die Nummer eines Landes zugeschnitten ist, schneidet die Nummer eines anderen Landes still ab, und der Fehler taucht meist Monate später als Supportticket über eine Kundin auf, die sich nicht registrieren kann.
Dieser Artikel geht durch, wie sich Identifikationsnummern zwischen Ländern unterscheiden, warum dasselbe Land sein Format im Lauf der Zeit ändern kann und wie man einen Prüfweg baut, der beide Probleme übersteht.
Warum es keine universelle Länge gibt
Identifikationsnummern wurden von nationalen Verwaltungen für nationale Zwecke entworfen, lange bevor jemand sich ein Formularfeld vorstellte, das alle auf einmal halten müsste. Jeder Entwurf spiegelt eine andere Vorstellung davon, wofür die Nummer gut ist, und diese Vorstellung zeigt sich in ihrer Gestalt.
Manche Nummern sind reine Ziffern, so bemessen, dass die Bevölkerung den Raum nie ausschöpfen kann. Manche mischen Buchstaben und Ziffern, um Platz zu gewinnen, ohne länger zu werden. Manche behalten die führenden Zeichen für einen Kategoriecode, eine ausstellende Stelle oder eine Region. Manche betten das Geburtsdatum der Person ein. Manche hängen ein oder zwei Prüfzeichen an, die rechnerisch aus dem Rest gewonnen werden.
Weil die Entwürfe abweichen, weichen die Längen ab. Die Nummern reichen von einer Handvoll Zeichen in den kleinsten Systemen bis deutlich über ein Dutzend in den größten, und die Spanne ist breit genug, dass jede einzelne Regel mit fester Breite irgendwo falsch liegt.
Die Familien der Identifikationsnummern
Die Nummern nach Entwurf zu gruppieren statt nach Land ist das nützlichste Denkmodell, weil die Folgen für die Prüfung dem Entwurf folgen und nicht der Landkarte.
| Familie | Typische Gestalt | Was das für die Prüfung bedeutet |
|---|---|---|
| Rein numerisch | Nur Ziffern, oft mit führender Null | Muss als Text gespeichert werden; nie in eine ganze Zahl umwandeln |
| Alphanumerisch | Buchstaben und Ziffern an festen Stellen gemischt | Prüfung Stelle für Stelle, nicht eine einzelne Ziffernzahl |
| Datumstragend | Geburtsdatum in die führenden Zeichen verwoben | Das Datum muss ein echtes Kalenderdatum sein, was die meisten Regeln vergessen |
| Prüfzifferntragend | Rechnerische Prüfzeichen am Ende | Die letzten Zeichen sind prüfbar, aber nur nach der veröffentlichten Regel |
| Freiform | Keine Struktur, auf die man sich verlassen kann | Länge und Zeichensatz sind die einzigen ehrlichen Prüfungen |
Wo eine Nummer Prüfzeichen trägt, ist die Rechnung meist eine gewichtete Summe mit anschließendem Modulus — dieselbe Grundidee, die viele Nummernsysteme nutzen, weshalb eine einzige konzeptionelle Erklärung mehreren Ländern dienen kann, obwohl die Konstanten abweichen. Was ein bestandenes Prüfzeichen belegt, ist eng und sollte überall dort klar gesagt werden, wo es dokumentiert wird: Die Nummer ist in sich stimmig, nicht: Sie wurde jemandem ausgegeben.
Sollte die Feldlänge fest sein?
Nein, und das ist die schädlichste Annahme in diesem Bereich. Eine feste Länge schneidet entweder die längeren Formate ab oder füllt die kürzeren auf, und beides beschädigt den Wert. Das Auffüllen ist in einer Hinsicht schlimmer als das Abschneiden: Eine aufgefüllte Nummer sieht plausibel aus, sie wandert also still in nachgelagerte Systeme, bevor jemand es merkt.
Speichern Sie Identifikationsnummern als Text variabler Länge und erzwingen Sie eine großzügige Obergrenze. Die Grenze existiert, um einen Einfügeunfall zu stoppen, nicht um zu behaupten, dass jedes Land so viele Zeichen verwendet. Braucht die Anwendung eine länderspezifische Regel, wenden Sie sie bedingt an, nachdem das Land bekannt ist.
Es gibt einen zweiten Grund, die Spalte großzügig zu halten. Ein Land kann sein Format ändern, und dann müssen bestehende Datensätze weiter funktionieren, während neue der neuen Regel folgen. Eine Spalte, die genau die alte Länge hatte, hat keinen Raum für den Übergang.
Was passiert, wenn ein Land sein Format ändert?
Formate ändern sich, und nicht nur in Kleinigkeiten. Ein Land kann eine Nummer verlängern, wenn die Bevölkerung den Raum sprengt, ein Prüfzeichen ergänzen, um Erfassungsfehler zu verringern, die inneren Blöcke neu ordnen oder ein Schema durch ein völlig anderes ersetzen und den Inhabern eine Übergangsfrist geben, in der beide gültig sind.
Für alle, die Prüfungen schreiben, heißt die Lehre: Die Regel hat ein Gültigkeitsdatum. Eine Kontrolle, die nur die aktuelle Form annimmt, weist jeden Datensatz ab, der unter der vorherigen ausgegeben wurde, und diese Datensätze bleiben so lange gültig, wie das Land es sagt. Eine Kontrolle, die nur die alte Form annimmt, ist schlimmer.
Praktisch heißt das zweierlei: Halten Sie die Prüfregeln datiert statt zeitlos, und lassen Sie die Ablehnungsmeldung beschreiben, was am Wert falsch ist, statt zu verkünden, die Nummer der Person existiere nicht. Ein Formular, das einem legitimen Inhaber eine gefälschte Nummer vorwirft, erzeugt Supportlast.
Wo helfen Prüfziffern tatsächlich?
Prüfzeichen lohnen sich, wenn die Regel veröffentlicht ist, denn sie fangen die zwei häufigsten Erfassungsfehler ab: ein vertauschtes Zeichen und zwei benachbarte Zeichen in falscher Reihenfolge. Beides ändert die Rechnung und ist damit erkennbar.
Dort endet der Nutzen. Ein Prüfzeichen sagt nicht, ob die Nummer jemandem gehört, es bestätigt nicht, dass die Person, die sie nennt, die Inhaberin ist, und es macht die Nummer zu keinem Nachweis. Jeder Prozess, der ein bestandenes Prüfzeichen als Identitätsprüfung behandelt, verlässt sich für eine Aufgabe auf Arithmetik, die Arithmetik nicht leisten kann.
Für Tests entscheidet dieser Unterschied, wohin die Prüfzeichenlogik gehört. Sie ist eine Datenqualitätsregel — nützlich beim Erfassen, um Vertipper zu fangen, und nützlich in einer Testsuite, um zu bestätigen, dass ein Erzeuger in sich stimmige Werte liefert. Sie ist keine Authentifizierungsregel, und eine Fixture, die sie als solche behandelt, schreibt eine Sicherheitsannahme fest, die nicht stimmt. Werte aus dem Identitätsdatensatz-Erzeuger sind formatkorrekte synthetische Datensätze, gedacht zum Durchspielen genau solcher Regeln; sie sind keine echten Nummern und können nicht genutzt werden, um sich als jemand auszugeben.
Wie gehen Sie mit einem Land um, das Sie nicht modelliert haben?
Halten Sie einen ehrlichen Rückfallweg bereit. Ist das Land unbekannt oder bekannt, aber nicht modelliert, akzeptieren Sie eine breite Spanne von Zeichen und Längen, erfassen Sie das Land zusammen mit dem Wert und markieren Sie den Datensatz als ungeprüft, statt ihn stillschweigend als in Ordnung zu behandeln.
Zwei Entwurfsdetails machen den Rückfallweg brauchbar. Erstens: Machen Sie ungeprüfte Datensätze im Monitoring sichtbar, damit die Lücke in der Abdeckung eine bekannte Größe bleibt und keine Überraschung. Zweitens: Lassen Sie nie zu, dass der Rückfallweg der ist, der in der Produktion für ein bereits modelliertes Land läuft — die lockere Regel ist ein Sicherheitsnetz, und ein Netz, das alles fängt, verhindert, dass die strenge Regel je auslöst.
Ein einmaliger Vergleich lohnt sich. Nehmen Sie denselben personenförmigen Datensatz, stellen Sie ihn unter den Regeln mehrerer Länder dar und prüfen Sie, ob das Feld alle ohne Auffüllen hält. Felder, die diesen Vergleich überstehen, sind meist jene, die von Anfang an als Text angelegt wurden.
Für Entwickler: Das Kennungsfeld entwerfen
Vier Entscheidungen tragen das meiste Gewicht, wenn das Feld definiert wird: der Spaltentyp, die Maximallänge, der Zeichensatz und der Ort der Prüfung. Bringen Sie die ersten drei in Ordnung, wird die vierte einfach.
- Typ: Text variabler Länge, immer, mit Normalisierung begrenzt auf das Entfernen von Trennzeichen.
- Länge: eine großzügige Obergrenze statt einer exakten Größe, so gewählt, dass das längste bekannte nationale Format mit Reserve hineinpasst.
- Zeichensatz: was die Vereinigung der modellierten Länder verwendet, praktisch also Buchstaben und Ziffern mit weg normalisierten diakritischen Zeichen.
- Prüfung: ein Zweig pro modelliertem Land, verteilt anhand des Ländewerts, plus ein dokumentierter Rückfallweg, der nie eine modellierte Regel überstimmt.
Kümmern Sie sich auch um die feldübergreifende Seite. Eine Kennung ist nur zusammen mit dem ausstellenden Land sinnvoll und in einigen Ländern zusammen mit einem Geburtsdatum, also sollten diese drei Felder in Fixture-Dateien als Gruppe reisen. Und halten Sie den Fixture-Vermerk ausdrücklich: Es sind synthetische Kennungen, erzeugt für Softwaretests, keine echten Nummern, und nichts daran darf als Nachweis der Identität irgendeiner Person dargestellt werden.
Nächste Schritte
Prüfen Sie die Länge der Kennungsspalte in Ihrem Schema und vergleichen Sie sie mit dem längsten Format, das Sie zu unterstützen behaupten; sind beide Zahlen gleich, ist die Spalte zu klein. Erzeugen Sie dann im Identitätsdatensatz-Erzeuger eine Streuung von Datensätzen über mehrere Länder und bestätigen Sie, dass jeder Ihre Regeln besteht, darunter einer aus einem nicht modellierten Land, um den Rückfallweg zu belegen. Tragen Ihre Nummern Prüfzeichen, zeigt die Einführung in Prüfziffern auf dieser Seite, wie die Rechnung aufgebaut wird.