Каждый разработчик, который делал форму адреса для европейских покупателей, рано или поздно понимает: единого европейского формата почтового индекса нет. У каждой страны свой, и различия между ними существенные. Здесь собран справочник по 27 странам ЕС и ключевым европейским странам вне ЕС, с регулярными выражениями и советами по проверке индексов в рабочей системе.
Общая схема
Европейские почтовые индексы делятся примерно на четыре группы:
- 5-значные цифровые: Германия, Франция, Италия, Испания, Финляндия, Хорватия, Эстония, Греция, Литва, Словакия.
- 4-значные цифровые: Бельгия, Болгария, Венгрия, Австрия, Швейцария, Лихтенштейн, Люксембург, Норвегия, Словения, Дания.
- Буквенно-цифровые фиксированного формата: Нидерланды (4 цифры плюс 2 буквы), Ирландия (Eircode, 7 буквенно-цифровых символов), Мальта (3 буквы плюс 4 цифры).
- Иерархические буквенно-цифровые: Великобритания (переменной длины, двухчастный).
Есть и исключения: в Швеции 5 цифр с пробелом после третьей (123 45), в Польше 5 цифр с дефисом после второй (00-001), в Чехии 5 цифр с пробелом после третьей (110 00).
Справочник по ЕС-27
| Страна | ISO | Формат | Пример | Regex |
|---|---|---|---|---|
| Австрия | AT | 4 цифры | 1010 | ^\d{4}$ |
| Бельгия | BE | 4 цифры | 1000 | ^\d{4}$ |
| Болгария | BG | 4 цифры | 1000 | ^\d{4}$ |
| Хорватия | HR | 5 цифр | 10000 | ^\d{5}$ |
| Кипр | CY | 4 цифры | 1010 | ^\d{4}$ |
| Чехия | CZ | NNN NN | 110 00 | ^\d{3} ?\d{2}$ |
| Дания | DK | 4 цифры | 1050 | ^\d{4}$ |
| Эстония | EE | 5 цифр | 10111 | ^\d{5}$ |
| Финляндия | FI | 5 цифр | 00100 | ^\d{5}$ |
| Франция | FR | 5 цифр | 75008 | ^\d{5}$ |
| Германия | DE | 5 цифр | 10115 | ^\d{5}$ |
| Греция | GR | NNN NN | 105 63 | ^\d{3} ?\d{2}$ |
| Венгрия | HU | 4 цифры | 1051 | ^\d{4}$ |
| Ирландия | IE | Eircode | D02 X285 | ^[A-Z]\d[\dW] ?[A-Z0-9]{4}$ |
| Италия | IT | 5 цифр | 00184 | ^\d{5}$ |
| Латвия | LV | LV-NNNN | LV-1050 | ^LV-\d{4}$ |
| Литва | LT | LT-NNNNN | LT-01100 | ^LT-\d{5}$ |
| Люксембург | LU | 4 цифры | 1234 | ^\d{4}$ |
| Мальта | MT | LLL NNNN | VLT 1234 | ^[A-Z]{3} ?\d{4}$ |
| Нидерланды | NL | NNNN LL | 1011 AB | ^\d{4} ?[A-Z]{2}$ |
| Польша | PL | NN-NNN | 00-001 | ^\d{2}-\d{3}$ |
| Португалия | PT | NNNN-NNN | 1000-001 | ^\d{4}-\d{3}$ |
| Румыния | RO | 6 цифр | 010001 | ^\d{6}$ |
| Словакия | SK | NNN NN | 811 01 | ^\d{3} ?\d{2}$ |
| Словения | SI | 4 цифры | 1000 | ^\d{4}$ |
| Испания | ES | 5 цифр | 28013 | ^\d{5}$ |
| Швеция | SE | NNN NN | 111 22 | ^\d{3} ?\d{2}$ |
Ключевые европейские страны вне ЕС
| Страна | ISO | Формат | Пример | Regex |
|---|---|---|---|---|
| Великобритания | GB | иерархический | SW1A 1AA | ^[A-Z]{1,2}\d[A-Z\d]? ?\d[A-Z]{2}$ |
| Швейцария | CH | 4 цифры | 8001 | ^\d{4}$ |
| Норвегия | NO | 4 цифры | 0150 | ^\d{4}$ |
| Исландия | IS | 3 цифры | 101 | ^\d{3}$ |
| Лихтенштейн | LI | 4 цифры | 9490 | ^\d{4}$ |
Британский почтовый индекс в деталях
В британский код заложено больше уровней иерархии, чем в большинство европейских систем. Код вида SW1A 1AA раскладывается так:
SW: почтовая зона (юго-западный Лондон)SW1A: почтовый район (Уайтхолл, Вестминстер и St James's)SW1A 1: почтовый сектор (несколько улиц)SW1A 1AA: почтовая единица (конкретная точка доставки, часто одно здание)
Благодаря этой иерархии британский индекс может указывать на конкретное здание. Поэтому британские продукты часто группируют данные по индексу, как по кварталу или даже по улице. Ирландский Eircode идёт ещё дальше: у каждого отдельного адреса там свой код.
Как проверять индексы в рабочей системе
Самый дешёвый способ: таблица регулярных выражений по странам, как выше, которую вы применяете по коду страны из адреса. Код страны можно взять:
- из выпадающего списка, где пользователь выбрал страну
- из геолокации пользователя по IP
- из ответа геокодера (большинство геокодеров нормализуют индекс и возвращают код страны)
Не проверяйте почтовый индекс, если не знаете страну. Четырёхзначный код допустим в десятках стран и недопустим в ещё большем числе.
Там, где ошибка дорого стоит (оформление заказа, KYC, регулируемые отрасли), одного регулярного выражения мало. Отправьте адрес в геокодер и считайте проверкой ответ с точностью до здания («rooftop») или до улицы («street»), а не совпадение с шаблоном. Индекс в правильном формате всё равно может не соответствовать реальному адресу.
Хранение и нормализация
Храните почтовые индексы как строки, а не как числа. Ведущие нули важны: 01100 это правильный литовский код, а 1100 нет. Правила хранения:
- При сравнении данных из разных наборов удаляйте все символы, кроме букв и цифр.
- При выводе показывайте индекс в каноническом формате страны (с дефисами, пробелами, префиксами).
- Всегда храните код страны рядом с индексом, даже если сегодня ваш продукт работает только в одной стране. Тогда при выходе в другие страны схему не придётся переделывать.
Как помогает MapAtlas
Geocoding API MapAtlas возвращает нормализованное поле address_components.postal_code для каждой поддерживаемой страны, проверенное по исходным данным. Search API принимает почтовый индекс как поисковый запрос и возвращает соответствующее место. Оба API размещены в ЕС, соответствуют GDPR и работают на данных уровня OSM с отдельными парсерами адресов для каждой страны.
Как адреса превращаются в координаты, мы разбираем в статье Что такое геокод. Как устроены широта и долгота в каждом ответе с координатами, читайте в статье Широта и долгота.
Часто задаваемые вопросы
Какой формат у европейских почтовых индексов?
Единого европейского формата почтового индекса нет. Каждая страна задаёт свой. Чаще всего это цифровой код фиксированной длины (5 цифр в Германии, Франции, Италии, Испании; 4 цифры в Бельгии, Венгрии, Австрии, Швейцарии), но в нескольких странах индексы буквенно-цифровые: в Нидерландах 4 цифры и 2 буквы, в Великобритании сложная система из двух частей, в Ирландии Eircode из 7 символов. Рабочему валидатору адресов нужен свой шаблон для каждой из 27 стран ЕС и для ключевых европейских стран вне ЕС.
Немецкий почтовый индекс (Postleitzahl) устроен так же, как польский?
Оба состоят из пяти цифр, но устроены по-разному. В Германии это 5 цифр подряд (например, 10115). В Польше 2 цифры, дефис и ещё 3 цифры (например, 00-001). Храните каноническую форму: для Польши с дефисом, для Германии без него. Чтобы сравнивать индексы из разных наборов данных, удаляйте все символы, кроме букв и цифр, а при выводе снова применяйте формат нужной страны.
Как проверить почтовый индекс любой страны ЕС?
Сначала определите страну (по адресу, по коду страны ISO 3166-1 alpha-2 или по геолокации пользователя). Затем примените регулярное выражение для этой страны. Проверка с учётом страны это стандартный подход в рабочих системах: одно общее регулярное выражение либо отклоняет правильные индексы, либо пропускает явно неверные. MapAtlas Geocoding API возвращает нормализованный индекс для каждой страны в `address_components`, поэтому обычно проверку можно доверить геокодеру.
Почему британские почтовые индексы так не похожи на остальные?
Британские индексы построены по иерархической буквенно-цифровой системе: в двух частях кода записаны почтовая зона, район, сектор и конечная единица (например, SW1A 1AA у Букингемского дворца). В одном коде заложено больше пространственной информации, чем в большинстве других систем, поэтому британский индекс иногда используют как замену названию района или даже отдельной улицы. Систему придумали в 1950-1960-е годы, и с тех пор её встраивают в современную инфраструктуру данных.

