Jeder Entwickler, der ein Adressformular für europäische Kunden gebaut hat, entdeckt irgendwann die Wahrheit: Es gibt kein europäisches Postleitzahlenformat. Jedes Land hat sein eigenes, und die Variationen sind tatsächlich bedeutsam. Diese Seite ist eine länderspezifische Referenz, die alle 27 EU-Staaten plus wichtige nicht-EU-europäische Länder abdeckt, mit den regex-Mustern und Validierungstipps, die in der Produktion benötigt werden.
Das übergeordnete Muster
Europäische Postleitzahlen lassen sich grob in vier Gruppen einteilen:
- 5-stellig numerisch: Deutschland, Frankreich, Italien, Spanien, Finnland, Kroatien, Estland, Griechenland, Litauen, Slowakei.
- 4-stellig numerisch: Belgien, Bulgarien, Ungarn, Österreich, Schweiz, Liechtenstein, Luxemburg, Norwegen, Slowenien, Dänemark.
- Alphanumerisch, festes Format: Niederlande (4 Ziffern plus 2 Buchstaben), Irland (Eircode, 7 alphanumerisch), Malta (3 Buchstaben plus 4 Ziffern).
- Hierarchisch alphanumerisch: Vereinigtes Königreich (variable Länge, zweiteilig).
Dazu einige Ausreißer: Schweden verwendet 5 Ziffern mit einem Leerzeichen nach der dritten (123 45), Polen 5 Ziffern mit einem Bindestrich nach der zweiten (00-001), Tschechien 5 Ziffern mit einem Leerzeichen nach der dritten (110 00).
Die EU-27-Referenz
| Land | ISO | Format | Beispiel | Regex |
|---|---|---|---|---|
| Österreich | AT | 4 Ziffern | 1010 | ^\d{4}$ |
| Belgien | BE | 4 Ziffern | 1000 | ^\d{4}$ |
| Bulgarien | BG | 4 Ziffern | 1000 | ^\d{4}$ |
| Kroatien | HR | 5 Ziffern | 10000 | ^\d{5}$ |
| Zypern | CY | 4 Ziffern | 1010 | ^\d{4}$ |
| Tschechien | CZ | NNN NN | 110 00 | ^\d{3} ?\d{2}$ |
| Dänemark | DK | 4 Ziffern | 1050 | ^\d{4}$ |
| Estland | EE | 5 Ziffern | 10111 | ^\d{5}$ |
| Finnland | FI | 5 Ziffern | 00100 | ^\d{5}$ |
| Frankreich | FR | 5 Ziffern | 75008 | ^\d{5}$ |
| Deutschland | DE | 5 Ziffern | 10115 | ^\d{5}$ |
| Griechenland | GR | NNN NN | 105 63 | ^\d{3} ?\d{2}$ |
| Ungarn | HU | 4 Ziffern | 1051 | ^\d{4}$ |
| Irland | IE | Eircode | D02 X285 | ^[A-Z]\d{2} ?[A-Z0-9]{4}$ |
| Italien | IT | 5 Ziffern | 00184 | ^\d{5}$ |
| Lettland | LV | LV-NNNN | LV-1050 | ^LV-\d{4}$ |
| Litauen | LT | LT-NNNNN | LT-01100 | ^LT-\d{5}$ |
| Luxemburg | LU | 4 Ziffern | 1234 | ^\d{4}$ |
| Malta | MT | LLL NNNN | VLT 1234 | ^[A-Z]{3} ?\d{4}$ |
| Niederlande | NL | NNNN LL | 1011 AB | ^\d{4} ?[A-Z]{2}$ |
| Polen | PL | NN-NNN | 00-001 | ^\d{2}-\d{3}$ |
| Portugal | PT | NNNN-NNN | 1000-001 | ^\d{4}-\d{3}$ |
| Rumänien | RO | 6 Ziffern | 010001 | ^\d{6}$ |
| Slowakei | SK | NNN NN | 811 01 | ^\d{3} ?\d{2}$ |
| Slowenien | SI | 4 Ziffern | 1000 | ^\d{4}$ |
| Spanien | ES | 5 Ziffern | 28013 | ^\d{5}$ |
| Schweden | SE | NNN NN | 111 22 | ^\d{3} ?\d{2}$ |
Wichtige nicht-EU-europäische Länder
| Land | ISO | Format | Beispiel | Regex |
|---|---|---|---|---|
| Vereinigtes Königreich | GB | hierarchisch | SW1A 1AA | ^[A-Z]{1,2}\d[A-Z\d]? ?\d[A-Z]{2}$ |
| Schweiz | CH | 4 Ziffern | 8001 | ^\d{4}$ |
| Norwegen | NO | 4 Ziffern | 0150 | ^\d{4}$ |
| Island | IS | 3 Ziffern | 101 | ^\d{3}$ |
| Liechtenstein | LI | 4 Ziffern | 9490 | ^\d{4}$ |
Der britische Postcode im Detail
Das britische System ist das informationsdichteste in Europa. Ein Code wie SW1A 1AA zerlegt sich in:
SW: Postgebiet (London South West)SW1A: Postbezirk (St. James's und Pimlico)SW1A 1: Postsektor (einige Straßen)SW1A 1AA: Posteinheit (spezifischer Zustellpunkt, oft ein Gebäude)
Diese Hierarchie bedeutet, dass ein UK-Postcode ein Gebäude identifizieren kann, weshalb britische Produkte den Postcode oft als Proxy für Stadtteil- oder sogar Straßenebene-Gruppierung verwenden. Nahezu kein anderes nationales Postleitzahlensystem leistet das.
Produktionsvalidierungsmuster
Der günstigste Produktionsansatz ist eine länderspezifische regex-Tabelle wie die obige, angewendet anhand eines Ländercodes aus der Adresse. Der Ländercode kann kommen aus:
- Einem expliziten Dropdown, das der Nutzer ausgewählt hat
- Der IP-Geolokalisierung des Nutzers
- Dem Geocodierer-Ergebnis (die meisten Produktionsgeocodierer normalisieren die Postleitzahl und geben den Ländercode in der Antwort mit)
Postleitzahlen ohne Kenntnis des Landes zu validieren sollte vermieden werden. Ein 4-stelliger Code ist in 12 Ländern gültig und in vielen mehr ungültig.
Für risikobehaftete Flows (Checkout, KYC, regulierte Branchen) sollte man nicht bei regex stehenbleiben. Die Adresse an einen Geocodierer senden und eine "Rooftop"- oder "Street"-Präzisionsantwort als Validierung behandeln, nicht allein das regex-Match. Ein korrekt formatierter Code kann trotzdem keiner echten Adresse entsprechen.
Speichern und Normalisieren
Postleitzahlen als Strings, nicht als Zahlen speichern. Führende Nullen sind bedeutsam (01100 ist ein gültiger litauischer Code; 1100 nicht). Konventionen für das Speicherformat:
- Nicht-alphanumerische Zeichen beim Vergleich über Datensätze hinweg entfernen.
- Bei der Ausgabe in der länderkanonaischen Form anzeigen (mit Bindestrichen, Leerzeichen, Präfixen).
- Den Ländercode immer zusammen mit der Postleitzahl speichern, auch wenn das Produkt heute nur in einem Land operiert. Das Schema skaliert für die Multi-Country-Erweiterung ohne Migration.
Wie MapAtlas hilft
Die MapAtlas Geocoding API gibt ein normalisiertes address_components.postal_code-Feld für jedes unterstützte Land zurück, validiert gegen die Quelldaten. Die Search API akzeptiert eine Postleitzahl als Sucheingabe und gibt den passenden Ort zurück. Beide APIs sind EU-gehostet, DSGVO-konform und auf OSM-Qualitätsdaten mit expliziten länderspezifischen Adress-Parsern aufgebaut.
Für einen tieferen Einblick, wie Adressen zu Koordinaten werden, Was ist ein Geocode lesen. Für die Breiten- und Längsgradmechanik hinter jeder Koordinatenantwort, Längengrad und Breitengrad lesen.
Häufig gestellte Fragen
Welches Format haben europäische Postleitzahlen?
Es gibt kein einheitliches europäisches Postleitzahlenformat. Jedes Land definiert sein eigenes. Die meisten verwenden einen numerischen Code fester Länge (5 Stellen in Deutschland, Frankreich, Italien, Spanien; 4 Stellen in Belgien, Ungarn, Österreich, Schweiz), aber mehrere nutzen alphanumerische Codes (die Niederlande 4 Ziffern plus 2 Buchstaben, das Vereinigte Königreich ein komplexes zweiteiliges alphanumerisches System, Irland Eircode mit 7 alphanumerischen Zeichen). Ein funktionsfähiger Adressvalidierer muss ein länderspezifisches Muster für alle 27 EU-Staaten plus wichtige nicht-EU-europäische Länder vorhalten.
Ist eine deutsche Postleitzahl (Postleitzahl) dieselbe wie eine polnische?
Beide haben fünf Zeichen, aber die Struktur unterscheidet sich. Deutschland verwendet 5 zusammenhängende Ziffern (z. B. 10115). Polen verwendet 2 Ziffern, einen Bindestrich und dann 3 Ziffern (z. B. 00-001). Für die Speicherung kann die kanonische Form mit Bindestrich für Polen und ohne für Deutschland verwendet werden. Für den Abgleich über Datensätze hinweg sollte normalisiert werden, indem nicht-alphanumerische Zeichen entfernt und das länderspezifische Format bei der Ausgabe erneut angewendet wird.
Wie validiere ich eine Postleitzahl aus einem beliebigen EU-Land?
Zuerst das Land identifizieren (aus der Adresse, einem ISO-3166-1-Alpha-2-Ländercode oder der Geolokalisierung des Nutzers). Dann das regex-Muster dieses Landes anwenden. Länderspezifische Validierung ist das Standard-Produktionsmuster, weil ein einziger globaler regex entweder gültige Codes ablehnt oder offensichtlich ungültige akzeptiert. Die MapAtlas Geocoding API gibt eine normalisierte Postleitzahl pro Land in ihren `address_components` zurück, sodass der Geocodierer den Validierungsschritt in der Regel übernimmt.
Warum sieht das britische Postleitzahlsystem so anders aus?
UK-Postcodes verwenden ein hierarchisches alphanumerisches System, das das Postgebiet, den Bezirk, den Sektor und die Einheit in zwei Teilen kodiert (z. B. SW1A 1AA für den Buckingham Palace). Es trägt mehr räumliche Information pro Code als die meisten Ländersysteme, weshalb UK-Postcodes manchmal als Proxy für Stadtteile oder sogar einzelne Straßen verwendet werden. Das System wurde in den 1950er und 1960er Jahren entwickelt und seitdem in moderne Dateninfrastruktur eingepasst.

