Меню

Почтовые индексы по странам: форматы и ведущие нули

Почтовые индексы по странам различаются длиной, алфавитом и логикой: где-то только цифры, где-то буквы и цифры. Разбираем типичные ловушки.

Опубликовано

  • тестовые данные
  • почтовые индексы

Почтовые индексы по странам устроены по-разному: в одной системе это несколько цифр, в другой — смесь букв и цифр, а в части стран индекса нет вовсе. Для тестовых данных из этого следует простой вывод: единого правила на весь мир не существует, и попытка написать одну проверку для всех стран почти всегда заканчивается ошибками. Ниже разберём основные семейства форматов, отдельно остановимся на ведущих нулях и на том, как не потерять их по дороге.

Зачем нужен почтовый индекс

Индекс — не украшение адреса, а рабочий инструмент сортировки. По нему отправление попадает в нужный поток ещё до того, как его прочитает человек, и чем раньше машина понимает район доставки, тем меньше ручной работы остаётся на долю почты.

Для отправителя индекс выполняет вторую функцию: он подтверждает, что город и район указаны согласованно. Если индекс и населённый пункт противоречат друг другу, письмо скорее всего уйдёт не туда, поэтому в формах индекс часто проверяют отдельно от остальных полей.

Отсюда практический вывод: индекс — то место, где чаще всего ломается согласованность данных, и проверять его стоит в первую очередь.

Какие семейства форматов встречаются

Строго говоря, систем много, но для практики удобно разделить их на несколько семейств.

Семейство Из чего состоит Где встречается
Только цифры несколько позиций подряд большинство стран Европы и Азии
Буквы и цифры смешанный набор знаков Великобритания, Канада, Нидерланды, Ирландия
Район и точка доставки первая часть задаёт область, вторая — участок Великобритания, Нидерланды

Деление условное. Внутри одного семейства длины могут отличаться, а одна и та же страна со временем меняет правила: появляются новые диапазоны, добавляются знаки. Поэтому код, который жёстко зашивает длину, рано или поздно начинает отвергать корректные данные.

Второе наблюдение: буквы в индексах обычно латинские и часто бывают разного регистра. Если поле приводит всё к нижнему регистру, а проверка ожидает верхний, пользователь получит отказ на верном значении.

Помимо чисто цифровых систем встречаются и такие, где в индексе есть буквы. Их обычно приводят в пример как Канада, Великобритания, Нидерланды и Ирландия: там индекс состоит из чередующихся групп букв и цифр и потому требует от формы другого набора символов. В некоторых из этих систем индекс делится на крупную часть и уточняющую, где вторая сужает область внутри первой.

Для разработчика это означает, что проверка «только цифры» отсекает часть корректных адресов. Если поле не принимает индекс, набранный в другом формате, ошибка выглядит для пользователя случайной: он видит верное значение, а форма его отвергает.

Сколько цифр в почтовом индексе?

Универсального ответа нет, и это и есть правильный ответ. В системах, построенных только на цифрах, чаще всего встречаются последовательности из четырёх — шести знаков, но это именно привычная практика, а не правило, которое можно где-то сверить для всех сразу. Более того, длина может меняться внутри одной страны.

Практический совет: считайте длину подсказкой, а не контрактом. Проверку стоит строить от набора допустимых шаблонов для конкретной страны, а не от одного числа, и обязательно предусматривать ветку «формат неизвестен» — иначе при обновлении чужих правил форма начнёт отказывать живым пользователям.

Если вы тестируете международную форму, полезно держать в наборе примеры из разных семейств сразу. Посмотрите, как выглядят данные для Великобритании и Канады: это как раз страны со смешанными индексами.

Что делать, если у страны нет почтового индекса

Такие страны существуют, и это не редкость и не ошибка. Форма, которая требует индекс безусловно, ставит их жителей перед неразрешимой задачей: пользователь либо бросает оформление, либо вводит что попало.

Обычная практика — сделать поле необязательным для стран без индекса, а если требование всё-таки жёсткое, допускать заглушку вроде нулей. Заглушка при этом должна быть явно распознаваемой: её нельзя потом принимать за настоящий индекс и подставлять в сортировку.

Для тестовых данных это отдельный сценарий, который часто забывают. Проверьте, что при выборе такой страны поле исчезает или становится необязательным, а уже введённое значение не блокирует отправку формы.

Ещё одно свойство, которое легко упустить: формат индекса — не постоянная величина. Системы пересматриваются, добавляются разряды, меняются правила записи, а иногда индекс появляется там, где раньше его не было вовсе. Поэтому утверждение вида «в этой стране ровно столько знаков» стоит хранить не как зашитое в код правило, а как данные, которые можно обновить, не переписывая логику.

Практический признак здоровой системы простой: она умеет принять индекс в незнакомом ей формате, сохранить его и не сломаться. Это важнее, чем точное соответствие текущему справочнику, потому что справочник устареет, а уже собранные данные останутся и должны читаться.

Почему ведущий ноль так легко теряется?

Это самая частая ошибка при работе с индексами, и причина у неё не в почте, а в типах данных. Строка из нескольких цифр, начинающаяся с нуля, при преобразовании в число теряет этот ноль: числовые типы не хранят ведущие нули, для них значение с нулём впереди и без него совпадают.

Ловушка поджидает в нескольких местах: поле базы данных, объявленное числовым; разбор данных в структуре, где значение приводится к числу; таблица, открытая в редакторе, который сам определяет типы столбцов; наконец, вывод на экран через форматирование числа.

Вывод простой: индекс — это текст, а не число, и вести себя с ним нужно соответственно. Арифметика над индексом смысла не имеет, сортировка по алфавиту для него естественнее, а сравнение как чисел только вредит.

Что важно разработчику

Первое: храните индекс строкой. Это снимает проблему ведущих нулей целиком и заодно позволяет принимать буквы, если страна их использует.

Второе: держите правила отдельно от кода формы, по странам. Набор допустимых шаблонов удобнее описывать данными, тогда добавление нового формата не потребует правки логики.

Третье: не делайте индекс обязательным глобально. Обязательность — свойство конкретной страны, а не адреса вообще.

Четвёртое: проектируйте поведение при незнакомом формате. Новая страна в списке, изменившиеся правила, пустое значение — всё это должно приводить к понятному решению, а не к молчаливому отказу.

Наконец, договоритесь о нормализации: убирать ли пробелы и дефисы перед проверкой или хранить их. Смешанный подход, когда запись хранится как есть, а сравнение идёт по очищенному значению, обычно работает лучше всего. Тот же принцип разбора строк применяется и в статье о формате международного адреса.

Отдельно напомню о границах инструмента: индексы и адреса из генератора синтетические. Они созданы только для проверки программ, по ним нельзя отправить письмо, и они ничего не говорят о том, где человек живёт.

Что делать дальше

Если вам нужны примеры индексов для проверки формы, генератор выдаст адрес вместе с индексом в формате выбранной страны, и каждое поле можно скопировать отдельно. Начните с двух-трёх стран из разных семейств: так вы быстро увидите, где ваша проверка ломается на ведущем нуле или на буквах.

Читать дальше

Статьи: Генератор фальшивых адресов