Если коротко: ZIP Code используется в США, Postal Code — в Канаде, Postcode — в Великобритании и Австралии, PIN Code — в Индии. Все они решают одну и ту же задачу — маршрутизировать почту до нужного адресата, — но отличаются форматом, набором допустимых символов, длиной и правилами использования разделителей. Если вы разрабатываете формы для международных адресов и пытаетесь уложить всё в одно поле «zip code», это верный путь к багам.
Что означает каждый термин
ZIP Code (США)
ZIP — аббревиатура Zone Improvement Plan, система введена USPS в 1963 году. Стандартный формат — 5 цифр (например, 90210). Расширенный формат ZIP+4 добавляет дефис и ещё 4 цифры (например, 90210-1234), уточняя адрес до конкретного квартала или здания.
Postal Code (Канада)
В Канаде используется 6-символьный буквенно-цифровой формат по схеме A1A 1A1 — буквы и цифры чередуются, посередине стоит пробел. Первые три символа (Forward Sortation Area) определяют географический район, последние три (Local Delivery Unit) сужают область до конкретной группы адресов. Буквы D, F, I, O, Q, U не используются, чтобы исключить путаницу с цифрами.
Postcode (Великобритания)
Британский почтовый индекс устроен сложнее: 1–2 буквы + 1–2 цифры + необязательная буква + пробел + 1 цифра + 2 буквы. Примеры: SW1A 1AA (Букингемский дворец), EC2R 8AH. Часть до пробела (outward code) обозначает район и округ, часть после (inward code) — сектор и точку доставки.
PIN Code (Индия)
PIN расшифровывается как Postal Index Number — это 6-значный чисто цифровой код (например, 110001). Первая цифра обозначает регион, вторая — подрегион, третья — сортировочный район, оставшиеся три — конкретное почтовое отделение.
Сравнительная таблица по странам
| Страна | Название | Формат | Длина | Символы | Пример | Разделитель |
|---|---|---|---|---|---|---|
| США | ZIP Code | NNNNN или NNNNN-NNNN | 5 или 10 | Только цифры | 10001, 90210-1234 | Дефис в ZIP+4 |
| Канада | Postal Code | A1A 1A1 | 7 (с пробелом) | Буквы + цифры | K1A 0B1, V6B 3K9 | Пробел посередине |
| Великобритания | Postcode | A9 9AA — AA9A 9AA | 6–8 (с пробелом) | Буквы + цифры | SW1A 1AA, M1 1AE | Пробел перед последними 3 символами |
| Австралия | Postcode | NNNN | 4 | Только цифры | 2000, 3000 | Нет |
| Германия | Postleitzahl (PLZ) | NNNNN | 5 | Только цифры | 10115, 80331 | Нет |
| Япония | 郵便番号 | NNN-NNNN | 8 (с дефисом) | Только цифры | 100-0001 | Дефис после 3-й цифры |
| Индия | PIN Code | NNNNNN | 6 | Только цифры | 110001, 400001 | Нет |
| Франция | Code Postal | NNNNN | 5 | Только цифры | 75001, 13001 | Нет |
| Бразилия | CEP | NNNNN-NNN | 9 (с дефисом) | Только цифры | 01001-000 | Дефис после 5-й цифры |
| Южная Корея | 우편번호 | NNNNN | 5 | Только цифры | 03171, 06164 | Нет |
| Россия | Почтовый индекс | NNNNNN | 6 | Только цифры | 101000, 190000 | Нет |
Почему разработчикам важно знать эти различия
Если ваше приложение обслуживает пользователей из разных стран, единственное поле zip_code VARCHAR(5) или регулярка «только цифры» сломает адреса для большинства стран мира. Разберём самые частые ошибки.
Ошибка 1: Разрешать только цифры
Канадские почтовые коды (V6B 3K9), британские postcodes (SW1A 1AA) и коды ряда других стран содержат буквы. Правило «только цифры» моментально отклоняет валидные адреса из этих стран.
Ошибка 2: Удалять пробелы
Пробел в британских и канадских кодах несёт смысловую нагрузку. Согласно рекомендациям Royal Mail, SW1A1AA без пробела формально не соответствует стандарту. Письмо, скорее всего, дойдёт, но строгую валидацию код не пройдёт, а для местных пользователей будет выглядеть некорректно.
Ошибка 3: Фиксированная длина
Длина почтовых индексов варьируется от 3 символов (Исландия: 101) до 10 (ZIP+4 в США: 90210-1234). Жёсткая проверка длины отсечёт валидные коды из стран, которые не вписываются в первоначальные допущения.
Ошибка 4: Одно универсальное регулярное выражение
Единой регулярки, корректно валидирующей почтовые индексы всех стран, не существует. Паттерн для американского ZIP (^\d{5}(-\d{4})?$) ошибочно отклонит коды Канады, Великобритании, Японии и Бразилии. Надёжный подход — только повсеместная валидация по стране.
Ошибка 5: Подписывать поле «ZIP Code» для всех стран
Если на форме, которую используют канадские или британские пользователи, стоит «ZIP Code», это вызывает путаницу. Пользователь может не знать термин или решить, что форма предназначена только для США. Используйте «Postal Code» или «Postcode» как нейтральную метку либо меняйте её динамически в зависимости от выбранной страны.
Рекомендации по хранению в базе данных
Не надо впихивать все страны в zip_code CHAR(5). Практические рекомендации:
Рекомендуемая схема:
postal_code VARCHAR(20) -- вмещает все известные форматы
country_code CHAR(2) -- ISO 3166-1 alpha-2
Индекс: (country_code, postal_code)
Ключевые принципы:
- Сохраняйте индекс в том виде, в котором его ввёл пользователь, включая пробелы и дефисы
- Нормализацию (удаление пробелов и дефисов) выполняйте только в логике поиска, а не при записи
- Используйте
VARCHAR, а неCHAR— дополнение пробелами приводит к ошибкам сравнения - Задавайте длину поля с запасом (
VARCHAR(20)) — для пограничных случаев и возможных изменений формата - Всегда храните почтовый индекс вместе с
country_code— одна и та же строка (например,10001) может быть валидной в нескольких странах
Стратегия валидации по странам
Правильный подход — валидировать отдельно для каждой страны. Ниже справочная таблица регулярных выражений для наиболее распространённых форматов:
| Страна | Регулярное выражение | Примечания |
|---|---|---|
| США | ^\d{5}(-\d{4})?$ | ZIP+4 необязателен |
| Канада | ^[A-Za-z]\d[A-Za-z]\s?\d[A-Za-z]\d$ | Пробел на входе необязателен |
| Великобритания | ^[A-Z]{1,2}\d[A-Z\d]?\s?\d[A-Z]{2}$ | Сложный формат — лучше использовать библиотеку |
| Германия | ^\d{5}$ | Всегда 5 цифр |
| Япония | ^\d{3}-?\d{4}$ | Дефис необязателен |
| Индия | ^\d{6}$ | Всегда 6 цифр |
| Австралия | ^\d{4}$ | Всегда 4 цифры |
| Бразилия | ^\d{5}-?\d{3}$ | Дефис необязателен |
| Франция | ^\d{5}$ | Всегда 5 цифр |
| Южная Корея | ^\d{5}$ | Всегда 5 цифр (с 2015 г.) |
| Россия | ^\d{6}$ | Всегда 6 цифр |
Важно: Регулярное выражение проверяет формат, а не существование. Код 000000 пройдёт российскую регулярку, но не является реальным почтовым индексом. Для проверки существования нужны запросы к почтовым базам данных или API валидации.
Как тестировать обработку почтовых индексов разных стран
Для поддержки международных адресов нужны тестовые данные из каждой целевой страны. Вместо ручного поиска форматов можно воспользоваться AddressGen и сразу сгенерировать адреса с корректным форматом:
- Генератор адресов США — 5-значный ZIP и формат ZIP+4
- Генератор адресов Канады — буквенно-цифровые postal codes
A1A 1A1 - Генератор адресов Великобритании — postcodes переменной длины
Подробнее о канадской системе можно прочитать в нашем введении в систему почтовых кодов Канады.
Генерация адресов по каждой стране позволяет построить тестовую матрицу, покрывающую:
- Все типы символов (только цифры, только буквы, смешанные)
- Все типы разделителей (пробел, дефис, без разделителя)
- Минимальную и максимальную длину
- Граничные случаи (ведущие нули, чередование букв и цифр)
Чек-лист для разработчика
При создании или аудите формы международного адреса сверяйтесь по этому списку:
- Поле почтового индекса принимает буквы, цифры, пробелы и дефисы
- Допустимая длина поля — не менее 10 символов
- Правила валидации переключаются в зависимости от выбранной страны
- Подпись поля адаптируется к стране (ZIP Code / Postal Code / Postcode / Почтовый индекс / PIN Code)
- Пробелы и дефисы сохраняются при записи
- Столбец в базе данных —
VARCHAR, а неCHARилиINT - Вместо универсальной регулярки используются паттерны по странам
- Ведущие нули сохраняются (например,
01001в США,0800в Австралии) - Тестовые данные покрывают не менее 5 стран с различными правилами формата
Часто задаваемые вопросы
«ZIP Code» и «Postal Code» — это одно и то же?
Функционально да — оба маршрутизируют почту. Но «ZIP Code» — зарегистрированный товарный знак USPS, специфичный для США, а «Postal Code» — универсальный международный термин. В Канаде «Postal Code» — официальное название. Неверный термин в интерфейсе может запутать пользователей.
Почему некоторые почтовые индексы начинаются с нуля?
В США ZIP-коды северо-восточных штатов начинаются с 0 (например, 01001 для Амхерста, Массачусетс). В Австралии коды Северной территории тоже начинаются с 0 (например, 0800). Если хранить индексы как целые числа, ведущие нули будут отброшены, и код станет невалидным. Почтовые индексы следует хранить только как строки.
Может ли один и тот же почтовый индекс существовать в разных странах?
Да. 10001 — валидный код и в США (Нью-Йорк), и в Южной Корее (Сеул). 75001 действителен во Франции (Париж) и может выглядеть правдоподобно в других системах. Именно поэтому в базе данных почтовый индекс всегда нужно хранить в паре с кодом страны.
Кто определяет формат почтовых индексов?
Каждая страна определяет формат через свою почтовую службу. Основные источники:
- США: USPS Publication 28
- Канада: Canada Post Addressing Guidelines
- Великобритания: Royal Mail Postcode Finder
- Индия: India Post PIN Code Directory
- Россия: Почта России — поиск индекса
- Международный: Всемирный почтовый союз (UPU) поддерживает межстрановые стандарты
Статья предназначена для образовательных целей и разработки. Уточняйте форматы почтовых индексов по актуальной документации почтовых служб целевых стран.
