Postleitzahlen der Welt: Warum es keinen universellen Adressgenerator geben kann
In fast jeder Testdaten-Bibliothek gibt es eine Funktion, die so aussieht:
function postcode() { return str_pad(rand(0, 99999), 5, '0', STR_PAD_LEFT); }
In 42 der 64 Sprachregionen, die wir ausliefern, ist sie falsch.
Nicht „ein bisschen unidiomatisch" — strukturell falsch, in dem Sinne, dass die zurückgegebene Zeichenkette in diesem Land unter keinen Umständen eine Postleitzahl sein könnte. Und der Grund ist nicht, dass fünf eine Unglückszahl wäre. Es ist, dass „Postleitzahl" nicht eine Sache ist. Es ist ein Etikett, das wir über mehrere Dutzend zusammenhanglose nationale Systeme gespannt haben, die verschiedene Objekte in verschiedenen Auflösungen kodieren — plus ein paar Länder, die gar kein solches System haben.
Wir haben das an unseren eigenen ausgelieferten Daten gemessen, statt es abstrakt zu behaupten.
Wie 64 Sprachregionen tatsächlich aussehen
Jede Ortsdatei, die wir ausliefern, ist ein Tripel Stadt ⇥ Region ⇥ Postleitzahl, aus echten Quellen aufgebaut. Reduziert man jede Postleitzahl auf eine Form — Ziffer → 9, Buchstabe → A —, ergibt sich die folgende Verteilung.
| Form | Sprachregionen | Beispiele |
|---|---|---|
99999 (5 Ziffern) | 22 | en_US 10001 · de_DE 10115 · fr_FR 75001 · tr_TR 34000 |
9999 (4 Ziffern) | 20 | da_DK 1050 · en_AU 2000 · hu_HU 1051 · ka_GE 0105 |
999999 (6 Ziffern) | 6 | en_IN 400001 · ru_RU 101000 · zh_CN 100000 · vi_VN 700000 |
999 (3 Ziffern) | 2 | is_IS 101 · zh_TW 100 |
9999999 (7 Ziffern) | 1 | he_IL 6100000 |
9999999999 (10) | 1 | fa_IR 1116843734 |
| Enthält Buchstaben oder Trennzeichen | 12 | siehe unten |
Daten mit Stand 2026-07-18, gemessen an den ausgelieferten Ortsdateien.
Fünf Ziffern sind die einzelne häufigste Form, und sie bleiben dennoch eine Minderheit — 22 von 64, etwa 34 %. Ein Generator, der überall fünf Ziffern ausgibt, trifft rund ein Drittel der Welt richtig und verrät sich in den anderen zwei Dritteln. Und die Spanne ist keine Rundungsdifferenz: Island verwendet drei Ziffern, der Iran verwendet zehn. Das ist allein bei der Länge ein Faktor von 3,3.
Die zwölf, die nicht nur Ziffern sind
| Sprachregion | Form | Beispiel | Was die zusätzliche Struktur ist |
|---|---|---|---|
en_CA / fr_CA | A9A 9A9 | M5H 2N2 | abwechselnd Buchstaben und Ziffern |
nl_NL | 9999 AA | 1011 AB | Ziffern, dann ein zweistelliges Buchstaben-Suffix |
lv_LV | AA-9999 | LV-1050 | Länderpräfix, dann vier Ziffern |
ro_MD | AA-9999 | MD-2001 | Länderpräfix, dann vier Ziffern |
cs_CZ | 999 99 | 110 00 | fünf Ziffern, 3+2 durch ein Leerzeichen geteilt |
pl_PL | 99-999 | 00-001 | fünf Ziffern, 2+3 durch einen Bindestrich geteilt |
ja_JP | 999-9999 | 100-0001 | sieben Ziffern, 3+4 geteilt |
pt_PT | 9999-999 | 1000-001 | sieben Ziffern, 4+3 geteilt |
pt_BR | 99999-999 | 01000-000 | acht Ziffern, 5+3 geteilt |
en_GB | AA9 9AA · A9 9AA · AA99 9AA · AA9A 9AA | EC1A 1BB | vier Formen innerhalb eines Landes |
en_IE | 16 verschiedene Formen | D01 VFEK | siehe den Irland-Abschnitt |
Betrachten Sie Tschechien und Polen zusammen. Beide sind Fünf-Ziffern-Systeme. Beide teilen die fünf Ziffern. Tschechien teilt sie 3+2 mit einem Leerzeichen, Polen teilt sie 2+3 mit einem Bindestrich. Es gibt kein Prinzip, das Ihnen vorhersagt, welches; Sie müssen es wissen. Dasselbe gilt für Portugal (9999-999) gegen Japan (999-9999) — jeweils sieben Ziffern, an entgegengesetzten Stellen geteilt.
Und beachten Sie, was das Trennzeichen in Lettland und Moldau tut. LV- und MD- sind nicht Teil des Informationsgehalts des Codes; sie sind ein ISO-Länderpräfix, das diese beiden Länder inline schreiben. Streichen Sie es, und der Code funktioniert weiterhin. Streichen Sie das Leerzeichen aus einem niederländischen 1011 AB, und Sie haben ebenfalls noch einen gültigen Code — aber streichen Sie den Bindestrich aus einem japanischen 100-0001, und Sie haben eine siebenstellige Zeichenkette, die Japan Post nicht parst. Trennzeichen sind mal kosmetisch, mal tragend, und welches von beiden es ist, variiert von Land zu Land.
Der Uganda-Fall: 60 Codes, die alle 00000 sind
Eine Zeile in jener ersten Tabelle ist eine Lüge, und es lohnt sich, sie zu zeigen statt zu verstecken.
en_UG steht in der 5-Ziffern-Spalte. Alle 60 seiner 60 Einträge sind 00000. Uganda hat kein nationales Postleitzahlensystem. Es gibt nichts, was man in das Feld schreiben könnte, also trägt das Feld einen Platzhalter, und eine naive Formanalyse — einschließlich unseres eigenen ersten Durchlaufs — reiht Uganda unter „fünf Ziffern" ein, neben Deutschland und den Vereinigten Staaten.
Das ist das stärkstmögliche Argument für die These des Artikels. Das Schema hat eine Spalte postcode, also bekommt jedes Land eine, also scheint jedes Land Postleitzahlen zu haben. Das Datenmodell fertigte die Universalität, die es eigentlich beschreiben sollte. Die ehrliche Zahl der echten Fünf-Ziffern-Sprachregionen in unseren Daten ist 21, nicht 22.
Es gibt mehr Länder in dieser Lage, als Entwickler erwarten — Irland selbst war bis vor Kurzem eines davon, was uns zum lehrreichsten System des ganzen Sets führt.
Irland: der Code, der ein Gebäude identifiziert
Irland hatte bis Juli 2015 überhaupt kein nationales Postleitzahlensystem. Dublin hatte nummerierte Postbezirke (D1 bis D24), und überall sonst bestand eine Adresse aus einem Hausnamen, einer Flur (townland) und einer Grafschaft — buchstäblich, ohne Code. Das Land betrieb seine Post so das gesamte zwanzigste Jahrhundert hindurch.
Als Irland schließlich ein System aufbaute, baute es nicht dasjenige, das alle anderen haben. Ein Eircode besteht aus sieben Zeichen in zwei Teilen, die grundlegend verschiedene Aufgaben erfüllen:
A65 F4E2
└┬┘ └─┬─┘
│ └── eindeutige Kennung für EIN Grundstück — keine Geografie, keine Ordnung
└─────── Routing-Schlüssel — ein geografisches Gebiet
Die ersten drei Zeichen sind geografisch. Die letzten vier sind es nicht. Sie identifizieren ein einzelnes Gebäude, sie sind absichtlich nicht sequenziell, und sie tragen überhaupt keine Ortsinformation. Zwei benachbarte Häuser in derselben Straße haben unzusammenhängende Eircodes. So etwas wie „den Eircode für Galway" gibt es nicht.
Jede Annahme, auf die sich ein Postleitzahlengenerator normalerweise stützt, versagt hier auf einen Schlag. Der Code ist in seiner zweiten Hälfte nicht hierarchisch. Er lässt sich nicht interpolieren. Benachbarte Codes sind keine benachbarten Orte. Sie können ihn nicht aus einer Stadt ableiten, denn eine Stadt hat Zehntausende davon.
Das Alphabet ist nicht das Alphabet
Eircodes verwenden 25 Zeichen: die zehn Ziffern und nur 15 der 26 Buchstaben. Bewusst ausgeschlossen sind:
B G I J L M O Q S U Z
Lesen Sie diese Liste neben den Ziffern, und das Design wird offensichtlich. B/8, G/6, I/1, J/1, L/1, O/0, Q/0, S/5, Z/2 — jedes davon ist ein Zeichen, das als Ziffer oder als anderer Buchstabe missgelesen wird, wenn es handgeschrieben oder gescannt wird. Das irische System beseitigte die Mehrdeutigkeit auf der Design-Ebene, statt sie auf der Parsing-Ebene zu behandeln.
Die zulässige Menge ist genau ACDEFHKNPRTVWXY0123456789. Ein Generator, der eine zufällige alphanumerische Zeichenkette erzeugt, gibt in etwa einem Drittel der Fälle ein verbotenes Zeichen aus, und das Ergebnis ist kein seltener oder ungewöhnlicher Eircode — es ist eine Zeichenkette, die kein Validator in Irland akzeptieren wird.
Wie wir sie generieren
Wir liefern 72 irische Zeilen mit 71 verschiedenen Routing-Schlüsseln aus, mit vollständigen echten Eircodes. Würden wir den gespeicherten Code wörtlich verwenden, trüge jede für Dublin generierte Karte den identischen Eircode D01 VFEK — eine sofortige, sichtbare Fälschung in einem Land, in dem Nachbarn verschiedene Codes haben.
Also teilt die Laufzeit den Code so, wie der Standard ihn teilt:
if ($locale === 'en_IE' && $postcode !== '') {
$rk = strtok($postcode, ' '); // routing key: real, from locality data
if ($rk !== false && $rk !== '') {
$EIR = 'ACDEFHKNPRTVWXY0123456789'; // 25 characters, Eircode alphabet
$uid = '';
for ($i = 0; $i < 4; $i++) $uid .= $EIR[mt_rand(0, 24)];
$postcode = $rk . ' ' . $uid;
}
}
Der Routing-Schlüssel bleibt authentisch und konsistent mit der Stadt. Die vier Zeichen lange Kennung — der Teil, der von Natur aus bedeutungslos ist — wird Zeichen für Zeichen aus dem korrekten Alphabet gezogen. Das Ergebnis ist geografisch wahrhaftig und individuell unterscheidbar, was genau die Gestalt des echten Dings ist.
Die 16 verschiedenen Muster, die unsere irische Datei zeigt, sind eine Folge davon: Die Kennung mischt Buchstaben und Ziffern frei, sodass A99 AAAA, A99 AA9A und A99 AAA9 alle nur dasselbe Format sind, das bei verschiedenen Ziehungen beobachtet wurde.
Die Ausnahme, die wir nicht führen
Irische Routing-Schlüssel folgen dem Muster Buchstabe-Ziffer-Ziffer — D01, K67, T12, P31. Es gibt genau einen, der das nicht tut: D6W, der Dublin 6 West abdeckt und einen Buchstaben in der dritten Position hat, weil Dublin 6W als Postbezirk schon vor Eircode existierte und erhalten werden musste.
Wir haben nachgesehen, und D6W ist nicht in unserer Datei. Alle 71 Routing-Schlüssel, die wir ausliefern, passen auf ^[A-Z]\d\d$. Das ist kein Fehler im Generator — der Routing-Schlüssel kommt aus den Ortsdaten und wird unverändert ausgegeben, also wird nichts Fehlgeformtes erzeugt. Es ist eine Lücke in der Abdeckung: Unsere irischen Daten können keine Adresse in Dublin 6W erzeugen, und jeder Validator, den wir gegen das beobachtete Muster Buchstabe-Ziffer-Ziffer schrieben, würde einen echten Eircode ablehnen.
Wir sagen das, weil es die Art Sache ist, die stillschweigend weggerundet wird. Der reguläre Ausdruck, der 100 % Ihrer Daten trifft, ist nicht der reguläre Ausdruck, der den Standard trifft.
Was jedes System tatsächlich kodiert
Die Länge ist der oberflächliche Unterschied. Der tiefere ist, dass diese Systeme nicht dasselbe Objekt messen.
| Land | Code | Die Einheit, die er identifiziert |
|---|---|---|
| Irland | A65 F4E2 | ein Gebäude |
| Niederlande | 1011 AB | eine Straßenseite; mit Hausnummer eine Adresse |
| Vereinigtes Königreich | EC1A 1BB | ein kleines Bündel von Adressen in einer Straße |
| Japan | 100-0001 | ein chōme — ein Bezirk auf Häuserblock-Ebene |
| Vereinigte Staaten | 10001 | eine Zustellroute / ein Postamt-Zustellgebiet |
| Island | 101 | ein Stadtviertel |
| Uganda | — | nichts; das System existiert nicht |
Das sind fünf verschiedene Auflösungen desselben nominellen Feldes. Der US-ZIP identifiziert eine Zustellroute — er ist ein operativer Artefakt des Postal Service, weshalb ZIP-Grenzen Stadt- und sogar Bundesstaatsgrenzen kreuzen und weshalb es die +4-Erweiterung gibt, um feiner aufzulösen. Der japanische Code steigt hinab bis zum chōme, einer benannten Blockunterteilung. Der niederländische Code plus einer Hausnummer ist eine vollständige Adresse, kein Straßenname erforderlich.
Und die Folge für generierte Daten ist unmittelbar. Eine Postleitzahl pro Stadt zuzuweisen ist ein Defekt, dessen Sichtbarkeit vollständig davon abhängt, in welchem Land man sich befindet. In den Vereinigten Staaten ist es eine milde Vereinfachung — ein echter ZIP für eine echte Stadt, nur nicht der einzige. In Irland erzeugt es eine physische Unmöglichkeit: Tausende Menschen, die in einem Gebäude wohnen.
Was in jedem Adressgenerator zu prüfen ist
- Zählen Sie die verschiedenen Formen in Ihren eigenen Daten, bevor Sie einen Validator schreiben. Unsere hat sieben reine Ziffernlängen und zwölf Sprachregionen mit Buchstaben oder Trennzeichen. Ein einzelner regulärer Ausdruck wird das nicht abdecken.
- Achten Sie auf Platzhalterspalten. Ugandas 60 identische
00000-Einträge bestanden jede strukturelle Prüfung, die wir hatten. Eine Spalte mit einem einzigen verschiedenen Wert über eine ganze Sprachregion hinweg ist ein Signal, keine Daten. - Prüfen Sie das Alphabet, nicht nur die Länge. Irland verbietet elf Buchstaben. Eine zufällige alphanumerische Zeichenkette scheitert in etwa einem Drittel der Fälle.
- Fragen Sie, was der Code identifiziert. Wenn er unterhalb der Siedlung auflöst — ein Gebäude, eine Straßenseite, ein Block —, dann ist ein Code pro Stadt ein struktureller Fehler, keine Näherung.
- Schließen Sie nicht vom Ihrer Stichprobe auf den Standard. Alle 71 unserer irischen Routing-Schlüssel sind Buchstabe-Ziffer-Ziffer. Der Standard erlaubt
D6W. Unsere Stichprobe war einstimmig und dennoch unvollständig. - Behandeln Sie Trennzeichen als Daten, bis das Gegenteil (kosmetisch) bewiesen ist. Tschechien teilt fünf Ziffern 3+2, Polen teilt fünf Ziffern 2+3, und nichts an den Zahlen sagt Ihnen, welches.
Der allgemeine Punkt ist derjenige, der in dieser Arbeit immer wiederkehrt. Ein Feld namens postcode in einem Datenbankschema sieht aus wie ein einzelnes Konzept, weil das Schema eine einzelne Spalte ist. Die Länder haben dem nie zugestimmt. Die Universalität steckt in Ihrem Datenmodell, nicht in der Welt — und jeder Generator, der die Spalte für das Konzept hält, erzeugt am Ende Adressen, die einzeln plausibel und zusammen unmöglich sind.
Daten mit Stand 2026-07-18
Die Formatformen wurden am 18. Juli 2026 direkt aus den 64 ausgelieferten Ortsdateien berechnet, indem jede Unicode-Ziffer auf 9 und jeder Unicode-Buchstabe auf A abgebildet und dann die verschiedenen Ergebnisse pro Sprachregion gezählt wurden. Die Zahlen in der Formtabelle sind Sprachregionen, keine Zeilen.
Quellen und Anmerkungen:
- Ortsdateien — 64 Sprachregionen, jede Zeile ein Tripel
Stadt ⇥ Region ⇥ Postleitzahl. Reine Ziffern-Sprachregionen: 52. Sprachregionen mit Buchstaben oder Trennzeichen: 12. - Irland — Eircode. 72 Zeilen, 71 verschiedene Routing-Schlüssel, alle passend auf
^[A-Z]\d\d$;D6Wfehlt in unseren Daten. Format: 3-Zeichen-Routing-Schlüssel + 4-Zeichen-eindeutige-Grundstückskennung. Zulässiges AlphabetACDEFHKNPRTVWXY0123456789(25 Zeichen;B G I J L M O Q S U Zausgeschlossen). Eircode startete im Juli 2015; davor existierten nur Dubliner Postbezirke. Unsere Ortsdatei speichert nur den Routing-Schlüssel; die 4-Zeichen-Grundstückskennung wird zur Laufzeit generiert. Die Routing-Schlüssel stammen aus der offiziellen Eircode-Routing-Key-Klassifikation des CSO (PxStat-TabelleNDQ07, DimensionC03349V04063), veröffentlicht unter CC BY 4.0; die maßgeblichen Adress- und Finder-Datenbanken ECAD und ECAF sind kommerzielle Produkte, die separat lizenziert werden. <eircode.ie/> - Uganda —
en_UG. Alle 60 Ortszeilen tragen00000. Uganda betreibt kein nationales Postleitzahlensystem; die Spalte ist ein Platzhalter. Auch die Stadtbevölkerungsgewichte fehlen für diese Sprachregion (UBOS 2014 geparst, aber nicht geladen). - Vereinigtes Königreich —
en_GB. 52 Zeilen über vier Formen:AA9 9AA(41),A9 9AA(5),AA99 9AA(5),AA9A 9AA(1). - Generierungscode — der irische Zweig lebt in
ng_generate.phpund fügt genau vier Ziehungen zum geseedeten Strom hinzu, nur füren_IE; andere Sprachregionen durchlaufen den Zweig unberührt, und ihre Karten werden nicht verschoben. - Weiterführende Lektüre — das verwandte Problem, welche Stadt ausgewählt wird und warum eine gleichverteilte Auswahl Hauptstädte um etwa das Dreifache unterschätzt, wird in Warum Adressgeneratoren unplausible Städte erzeugen behandelt.