ZIP Code, Postal Code, Postcode и PIN Code: чем различаются почтовые индексы в разных странах

Bob
Bob
ENJAKORUZH

Если коротко: 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 CodeNNNNN или NNNNN-NNNN5 или 10Только цифры10001, 90210-1234Дефис в ZIP+4
КанадаPostal CodeA1A 1A17 (с пробелом)Буквы + цифрыK1A 0B1, V6B 3K9Пробел посередине
ВеликобританияPostcodeA9 9AAAA9A 9AA6–8 (с пробелом)Буквы + цифрыSW1A 1AA, M1 1AEПробел перед последними 3 символами
АвстралияPostcodeNNNN4Только цифры2000, 3000Нет
ГерманияPostleitzahl (PLZ)NNNNN5Только цифры10115, 80331Нет
Япония郵便番号NNN-NNNN8 (с дефисом)Только цифры100-0001Дефис после 3-й цифры
ИндияPIN CodeNNNNNN6Только цифры110001, 400001Нет
ФранцияCode PostalNNNNN5Только цифры75001, 13001Нет
БразилияCEPNNNNN-NNN9 (с дефисом)Только цифры01001-000Дефис после 5-й цифры
Южная Корея우편번호NNNNN5Только цифры03171, 06164Нет
РоссияПочтовый индексNNNNNN6Только цифры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 и сразу сгенерировать адреса с корректным форматом:

Подробнее о канадской системе можно прочитать в нашем введении в систему почтовых кодов Канады.

Генерация адресов по каждой стране позволяет построить тестовую матрицу, покрывающую:

  • Все типы символов (только цифры, только буквы, смешанные)
  • Все типы разделителей (пробел, дефис, без разделителя)
  • Минимальную и максимальную длину
  • Граничные случаи (ведущие нули, чередование букв и цифр)

Чек-лист для разработчика

При создании или аудите формы международного адреса сверяйтесь по этому списку:

  • Поле почтового индекса принимает буквы, цифры, пробелы и дефисы
  • Допустимая длина поля — не менее 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 действителен во Франции (Париж) и может выглядеть правдоподобно в других системах. Именно поэтому в базе данных почтовый индекс всегда нужно хранить в паре с кодом страны.

Кто определяет формат почтовых индексов?

Каждая страна определяет формат через свою почтовую службу. Основные источники:


Статья предназначена для образовательных целей и разработки. Уточняйте форматы почтовых индексов по актуальной документации почтовых служб целевых стран.