Tout développeur qui a construit un formulaire d'adresse pour des clients européens finit par le découvrir : il n'existe pas de format européen de code postal. Chaque pays a le sien, et les différences ont un vrai sens. Cette page est une référence pays par pays pour l'UE à 27 et les principaux pays européens hors UE, avec les expressions régulières et les conseils de validation dont vous avez besoin en production.
Les grandes familles de formats
Les codes postaux européens se répartissent en quatre groupes environ :
- 5 chiffres : Allemagne, France, Italie, Espagne, Finlande, Croatie, Estonie, Grèce, Lituanie, Slovaquie.
- 4 chiffres : Belgique, Bulgarie, Hongrie, Autriche, Suisse, Liechtenstein, Luxembourg, Norvège, Slovénie, Danemark.
- Alphanumérique, format fixe : Pays-Bas (4 chiffres plus 2 lettres), Irlande (Eircode, 7 caractères alphanumériques), Malte (3 lettres plus 4 chiffres).
- Alphanumérique hiérarchique : Royaume-Uni (longueur variable, deux parties).
S'y ajoutent quelques cas particuliers : la Suède écrit ses 5 chiffres avec une espace après le troisième (123 45), la Pologne avec un tiret après le deuxième (00-001), et la Tchéquie avec une espace après le troisième (110 00).
Référence pour l'UE à 27
| Pays | ISO | Format | Exemple | Regex |
|---|---|---|---|---|
| Allemagne | DE | 5 chiffres | 10115 | ^\d{5}$ |
| Autriche | AT | 4 chiffres | 1010 | ^\d{4}$ |
| Belgique | BE | 4 chiffres | 1000 | ^\d{4}$ |
| Bulgarie | BG | 4 chiffres | 1000 | ^\d{4}$ |
| Chypre | CY | 4 chiffres | 1010 | ^\d{4}$ |
| Croatie | HR | 5 chiffres | 10000 | ^\d{5}$ |
| Danemark | DK | 4 chiffres | 1050 | ^\d{4}$ |
| Espagne | ES | 5 chiffres | 28013 | ^\d{5}$ |
| Estonie | EE | 5 chiffres | 10111 | ^\d{5}$ |
| Finlande | FI | 5 chiffres | 00100 | ^\d{5}$ |
| France | FR | 5 chiffres | 75008 | ^\d{5}$ |
| Grèce | GR | NNN NN | 105 63 | ^\d{3} ?\d{2}$ |
| Hongrie | HU | 4 chiffres | 1051 | ^\d{4}$ |
| Irlande | IE | Eircode | D02 X285 | ^[A-Z]\d[\dW] ?[A-Z0-9]{4}$ |
| Italie | IT | 5 chiffres | 00184 | ^\d{5}$ |
| Lettonie | LV | LV-NNNN | LV-1050 | ^LV-\d{4}$ |
| Lituanie | LT | LT-NNNNN | LT-01100 | ^LT-\d{5}$ |
| Luxembourg | LU | 4 chiffres | 1234 | ^\d{4}$ |
| Malte | MT | LLL NNNN | VLT 1234 | ^[A-Z]{3} ?\d{4}$ |
| Pays-Bas | NL | NNNN LL | 1011 AB | ^\d{4} ?[A-Z]{2}$ |
| Pologne | PL | NN-NNN | 00-001 | ^\d{2}-\d{3}$ |
| Portugal | PT | NNNN-NNN | 1000-001 | ^\d{4}-\d{3}$ |
| Roumanie | RO | 6 chiffres | 010001 | ^\d{6}$ |
| Slovaquie | SK | NNN NN | 811 01 | ^\d{3} ?\d{2}$ |
| Slovénie | SI | 4 chiffres | 1000 | ^\d{4}$ |
| Suède | SE | NNN NN | 111 22 | ^\d{3} ?\d{2}$ |
| Tchéquie | CZ | NNN NN | 110 00 | ^\d{3} ?\d{2}$ |
Principaux pays européens hors UE
| Pays | ISO | Format | Exemple | Regex |
|---|---|---|---|---|
| Islande | IS | 3 chiffres | 101 | ^\d{3}$ |
| Liechtenstein | LI | 4 chiffres | 9490 | ^\d{4}$ |
| Norvège | NO | 4 chiffres | 0150 | ^\d{4}$ |
| Royaume-Uni | GB | hiérarchique | SW1A 1AA | ^[A-Z]{1,2}\d[A-Z\d]? ?\d[A-Z]{2}$ |
| Suisse | CH | 4 chiffres | 8001 | ^\d{4}$ |
Le code postal britannique en détail
Le système britannique fait tenir plus de niveaux dans un seul code que la plupart des systèmes européens. Un code comme SW1A 1AA se décompose ainsi :
SW: zone postale (Londres Sud-Ouest)SW1A: district postal (Whitehall, Westminster et St James's)SW1A 1: secteur postal (quelques rues)SW1A 1AA: unité postale (un point de livraison précis, souvent un seul bâtiment)
Grâce à cette hiérarchie, un code postal britannique peut désigner un bâtiment. C'est pourquoi les produits britanniques s'en servent souvent pour regrouper des adresses par quartier, voire par rue. L'Eircode irlandais va plus loin et attribue à chaque adresse individuelle son propre code.
Valider en production
La méthode la plus simple en production est une table d'expressions régulières par pays, comme celle ci-dessus, choisie selon le code pays de l'adresse. Ce code pays peut venir :
- d'une liste déroulante où l'utilisateur a choisi son pays
- de la géolocalisation de l'adresse IP de l'utilisateur
- du résultat du géocodeur (la plupart des géocodeurs en production normalisent le code postal et incluent le code pays dans la réponse)
Évitez de valider un code postal sans connaître le pays. Un code à 4 chiffres est valide dans des dizaines de pays et invalide dans bien d'autres.
Pour les parcours à fort enjeu (paiement, KYC, secteurs réglementés), n'en restez pas à la regex. Envoyez l'adresse à un géocodeur, et considérez comme validée une réponse de précision « rooftop » ou « street », plutôt que la seule conformité au format. Un code postal bien formé peut très bien ne correspondre à aucune adresse réelle.
Stockage et normalisation
Stockez les codes postaux sous forme de chaînes de caractères, pas de nombres. Les zéros initiaux comptent (01100 est un code lituanien valide ; 1100 ne l'est pas). Quelques règles de stockage :
- Supprimez les caractères non alphanumériques pour comparer des jeux de données.
- À l'affichage, utilisez la forme officielle du pays (avec tirets, espaces et préfixes).
- Stockez toujours le code pays avec le code postal, même si votre produit ne couvre qu'un pays aujourd'hui. Votre schéma suivra une expansion à plusieurs pays sans migration.
Ce que propose MapAtlas
L'API Geocoding de MapAtlas renvoie un champ address_components.postal_code normalisé pour chaque pays pris en charge, validé par rapport aux données sources. L'API Search accepte un code postal comme entrée de recherche et renvoie le lieu correspondant. Les deux API sont hébergées dans l'UE, conformes au RGPD et construites sur des données de qualité OSM, avec un analyseur d'adresses dédié à chaque pays.
Pour voir en détail comment une adresse devient des coordonnées, lisez Qu'est-ce qu'un géocode. Pour comprendre la latitude et la longitude derrière chaque réponse en coordonnées, lisez Longitude et latitude.
Questions fréquemment posées
Quel est le format des codes postaux européens ?
Il n'existe pas de format unique pour les codes postaux européens. Chaque pays définit le sien. La plupart utilisent un code numérique de longueur fixe (5 chiffres en Allemagne, France, Italie, Espagne ; 4 chiffres en Belgique, Hongrie, Autriche, Suisse), mais plusieurs ont des codes alphanumériques : 4 chiffres et 2 lettres aux Pays-Bas, un système complexe en deux parties au Royaume-Uni, l'Eircode à 7 caractères en Irlande. Un validateur d'adresses fiable doit donc connaître le format de chaque pays de l'UE à 27, ainsi que celui des principaux pays européens hors UE.
Un code postal allemand (Postleitzahl) est-il identique à un code postal polonais ?
Les deux comptent cinq chiffres, mais leur structure diffère. L'Allemagne utilise 5 chiffres d'affilée (par exemple 10115). La Pologne utilise 2 chiffres, un tiret, puis 3 chiffres (par exemple 00-001). Pour le stockage, gardez la forme officielle : avec le tiret pour la Pologne, sans pour l'Allemagne. Pour rapprocher des jeux de données, normalisez en supprimant les caractères non alphanumériques, puis réappliquez le format du pays à l'affichage.
Comment valider un code postal de n'importe quel pays de l'UE ?
Commencez par identifier le pays (à partir de l'adresse, d'un code pays ISO 3166-1 alpha-2 ou de la géolocalisation de l'utilisateur). Appliquez ensuite l'expression régulière de ce pays. C'est la méthode standard en production, car une regex unique pour tous les pays rejetterait des codes valides ou accepterait des codes manifestement faux. L'API Geocoding de MapAtlas renvoie un code postal normalisé pour chaque pays dans ses `address_components`. En général, vous laissez donc le géocodeur faire la validation à votre place.
Pourquoi le système de codes postaux du Royaume-Uni est-il si différent ?
Les codes postaux britanniques utilisent un système alphanumérique hiérarchique qui encode la zone postale, le district, le secteur et l'unité en deux parties (ex. SW1A 1AA pour Buckingham Palace). Chaque code porte plus d'information géographique que dans la plupart des systèmes nationaux. C'est pourquoi on utilise parfois le code postal britannique pour désigner un quartier, voire une seule rue. Le système date des années 1950 et 1960, et il a depuis été adapté aux infrastructures de données modernes.

