Menü

ISO Ländercodes und Unterteilungscodes: ein Arbeitsleitfaden

ISO Ländercodes gibt es in drei Formen, Unterteilungscodes bilden eine vierte Ebene. Was Sie speichern, was Sie anzeigen und wie Sie veraltete Werte behandeln.

Veröffentlicht am

  • Testdaten
  • Adresse
  • Standards

ISO Ländercodes gehören zu jenen Standards, die alle benutzen und fast niemand lesen. Sie wirken wie ein gelöstes Problem — zwei Buchstaben, ein Land, fertig —, bis ein Formular ein legitimes Außengebiet zurückweist, ein Bericht zwei Tabellen verknüpft, deren Länderspalten unterschiedlich geschrieben waren, oder eine Auswahlliste mit einem Eintrag ausgeliefert wird, den es seit Jahren nicht mehr gibt.

Dieser Artikel erklärt die drei Formen des Ländercodes, warum ihre Mischung stillen Schaden anrichtet, wie Unterteilungscodes darunter passen und was Sie in einem System speichern und prüfen sollten, das auch weiter funktionieren soll, wenn sich die Liste ändert.

Die drei Formen eines Ländercodes

Die internationale Norm für Ländercodes definiert drei parallele Darstellungen derselben Menge von Ländern und Gebieten.

Form Gestalt Typische Verwendung
Alpha-2 Zwei Buchstaben Datenaustausch, Auswahllisten, die meisten Anwendungsspalten
Alpha-3 Drei Buchstaben Berichtswesen, Finanzwesen, Systeme, die lesbarere Codes wollen
Numerisch Drei Ziffern Sprachneutrale Zusammenhänge und Altsysteme

Die zweibuchstabige Form dominiert in der Software. Sie ist kurz, sie ist das, was die meisten Fremddienste erwarten, und sie passt bequem in eine Spalte fester Breite. Die dreibuchstabige Form ist klarer, wenn ein Mensch sie ohne Zusammenhang liest, weshalb sie in der Statistik und im Finanzberichtswesen überlebt. Die numerische Form hat einen Vorteil, der leicht übersehen wird: Ziffern sind sprachneutral, und ein numerischer Code ist gegenüber bestimmten Übertragungsfehlern etwas robuster als ein kurzer Buchstabencode, weil er nie mit einem gewöhnlichen Wort zusammenfällt.

Alle drei beschreiben dieselbe Menge von Entitäten. Genau deshalb verursachen sie Ärger: In der Bedeutung sind sie austauschbar, in einem Zeichenkettenvergleich nicht.

Warum das Mischen der Codes Verknüpfungen still zerstört

Eine Verknüpfung zwischen zwei Tabellen über eine Länderspalte funktioniert nur, wenn beide Spalten dieselbe Form verwenden. Speichert ein System den zweibuchstabigen Code und ein anderes den dreibuchstabigen, liefert die Verknüpfung nichts — und genau das macht dieses Problem teuer, denn ein leeres Ergebnis lässt sich leicht für fehlende Daten halten statt für eine Formataabweichung.

Der Zeichenkettenvergleich verschärft es. Zwei- und dreibuchstabige Codes bestehen beide aus Großbuchstaben, eine als Text angelegte Spalte akzeptiert also beides ohne Widerspruch. Eine dreistellige Spalte nimmt dreibuchstabige Codes an und schneidet nichts ab, sie nimmt aber auch einen zweibuchstabigen Code auf, aufgefüllt oder unverändert, und nachgelagerter Code, der nie zwei Zeichen erwartet hat, kann sich ohne Fehlermeldung merkwürdig verhalten.

Das Gegenmittel besteht darin, einmal und an einer Stelle zu entscheiden, welche Form kanonisch ist, und an jeder Grenze umzurechnen. Speichern Sie eine Form, akzeptieren Sie bei der Eingabe mehrere und normalisieren Sie sofort. Dokumentieren Sie die Entscheidung neben der Spalte, denn die nächste Person, die eine Anbindung ergänzt, wird sie nicht erraten.

Sind Unterteilungscodes dasselbe wie die Codes lokaler Stellen?

Nein, und sie als eine Menge zu behandeln ist eine häufige Quelle von Abweichungen. Der Unterteilungsteil der Ländernorm beschreibt die wichtigsten Verwaltungseinheiten unterhalb der Landesebene, und er entsteht, indem der Ländercode mit einem weiteren Code für die Einheit verbunden wird, getrennt durch einen Bindestrich. Das ergibt einen weltweit eindeutigen Bezeichner für eine Einheit, was wirklich nützlich ist, wenn Daten Grenzen überschreiten.

Lokale Codelisten sind etwas anderes. Statistikämter, Postbetreiber, Finanzbehörden und Wahlbehörden pflegen jeweils eigene Einheiten und eigene Codes für eigene Zwecke. Diese Listen überschneiden sich mit der internationalen und fallen nicht mit ihr zusammen: Sie können Namen verwenden, die die Norm nicht kennt, Regionen anders aufteilen oder zusammenlegen und nach eigenen Zeitplänen aktualisieren.

Die praktische Konsequenz ist, dass Sie nicht annehmen sollten, ein Wert aus einem lokalen System sei ein gültiger internationaler Unterteilungscode, und dass Sie keinen internationalen Code an ein System schicken sollten, das einen lokalen erwartet. Halten Sie beides auseinander und speichern Sie den Ländercode neben jedem Unterteilungswert, damit das Paar interpretierbar bleibt.

Sollten Sie jemals eigene Codes erfinden?

Nein. Erfundene Codes sind von gültigen nicht zu unterscheiden, und genau darin liegt das Problem. Eine plausibel aussehende Buchstabenfolge, die zu keinem Land passt, besteht eine Zeichenprüfung, sortiert sich sauber zwischen die echten Einträge und scheitert weit entfernt — auf einem Versandetikett, in einer Steuerberechnung oder in einer Auswertung, deren Summen aufhören zusammenzupassen.

Zwei Gewohnheiten verhindern den größten Teil des Schadens. Prüfen Sie Ländercodes gegen eine echte, gepflegte Liste statt gegen ein Muster, und behandeln Sie jeden Wert, der nicht in der Liste steht, als Problem, das sichtbar gemacht werden muss, statt als Wert, der zu speichern ist. Wo ein Datensatz wirklich einen Eimer für Unbekanntes braucht — einen nicht vertrauenswürdigen Import, einen Nutzer, der die Antwort verweigert hat —, verwenden Sie einen ausdrücklichen, dokumentierten Sentinel, der nicht mit einem Ländercode verwechselt werden kann, und halten Sie ihn aus jeder Spalte heraus, die echte Codes enthalten soll.

Woher kommen veraltete oder unbekannte Codes?

Die Norm ist nicht eingefroren. Einträge werden ergänzt, umbenannt und zurückgezogen, während sich die Welt ändert, und ein System, das seit Jahren läuft, sammelt Werte aus mehreren Ausgaben. Post kommt mit dem Code an, den die Datenbank des Absenders kannte; Tabellenkalkulationen zirkulieren mit Codes, die gültig waren, als sie exportiert wurden.

Drei Situationen sind es wert, eingeplant zu werden. Ein Code, der zurückgezogen wurde, aber in alten Datensätzen noch auftaucht. Ein Code, der in der Norm existiert, aber nicht in Ihrer Auswahlliste, weil Ihre Liste einmal gebaut und nie aktualisiert wurde. Und ein Wert, der überhaupt kein Code ist, weil ein Mensch einen Ländernamen in ein Feld getippt hat, das einen Code wollte.

Die Behandlung unterscheidet sich in jedem Fall. Historische Datensätze können ihren ursprünglichen Wert behalten, während neue Datensätze einen aktuellen verwenden, sofern die Zuordnung zwischen beiden irgendwo gespeichert ist. Ein Code, der in Ihrer Liste fehlt, sollte nicht als ungültig zurückgewiesen werden, denn der Fehler liegt wahrscheinlicher in der Liste als im Wert. Und Ländernamen als Freitext sollten eine Codespalte überhaupt nie erreichen, was der Leitfaden zu Adressvalidierung und Normalisierung als Teil des größeren Aufräumproblems behandelt.

Für Entwickler: speichern, auflisten und zurückfallen

Wählen Sie eine kanonische Form für die Speicherung — für die meisten Anwendungen den zweibuchstabigen Code — und seien Sie in Ihrem eigenen System streng damit. Halten Sie die Umrechnung in einem einzigen Hilfsmittel, damit ein Sinneswandel eine Änderung an einer Stelle ist.

Wählen Sie eine Quelle für die Liste, die Auswahllisten, Prüfung und Anzeige nutzen, und aktualisieren Sie sie bewusst. Eine Codeliste, die an mehreren Stellen von Hand bearbeitet wird, driftet gegen sich selbst auseinander, und das sichtbare Symptom ist ein Nutzer in einem Land, das das Formular nicht anbietet.

Entscheiden Sie, was Unbekannt in Ihrem Schema bedeutet, bevor Sie es brauchen. Ein leerer Wert, ein dokumentierter Sentinel und ein Nullwert sind drei verschiedene Aussagen, und nur eine davon ist für ein gegebenes Feld richtig. Was Sie auch wählen: Stellen Sie sicher, dass es durch eine Verknüpfung, einen Vergleich oder einen Etikettengenerator nicht für einen echten Code gehalten werden kann.

Protokollieren Sie schließlich, was Sie zurückgewiesen haben. Wenn ein Ländercode die Prüfung nicht besteht, erfassen Sie den Wert und die Version der Liste, nicht den ganzen Datensatz. Das ist der einzige verlässliche Weg, eine schlechte Regel von einer schlechten Eingabe zu unterscheiden, und es hält personenbezogene Daten aus Ihrer Diagnose heraus. Wenn das Feld auch eine Telefonnummer speist, gilt dasselbe Prinzip für die Vorwahl, wie der Leitfaden zu Telefonvorwahlen und Ortszuordnung beschreibt.

Nächste Schritte

Suchen Sie jede Spalte in Ihrem Schema, die ein Land enthält, und prüfen Sie, ob alle dieselbe Form verwenden; eine schnelle Gruppierungsabfrage über die verschiedenen Werte zeigt jede Spalte mit einer Mischung. Bestätigen Sie dann, dass Ihre Prüfliste aus einer einzigen Quelle aktualisiert werden kann, statt an mehreren Stellen bearbeitet zu werden. Um die Codes im Zusammenhang zu sehen, öffnen Sie eine Länderseite und vergleichen Sie, wie das Land dort bezeichnet wird und wie Ihre eigenen Daten es nennen. Wenn Sie Beispieldatensätze brauchen, um die Umrechnung zwischen den Formen zu testen, erzeugen Sie einen Stapel im Adressgenerator und schicken Sie die Codes durch Ihr Normalisierungshilfsmittel. Diese Datensätze enthalten ausschließlich synthetische Werte, die Codes darin sind also Übungsmaterial — keine zustellbare Adressierung und keine Aussage über den Wohnort irgendeiner Person.

Weiterlesen

Artikel zu Fake-Adressgenerator