Почтовые индексы по странам устроены по-разному: в одной системе это несколько цифр, в другой — смесь букв и цифр, а в части стран индекса нет вовсе. Для тестовых данных из этого следует простой вывод: единого правила на весь мир не существует, и попытка написать одну проверку для всех стран почти всегда заканчивается ошибками. Ниже разберём основные семейства форматов, отдельно остановимся на ведущих нулях и на том, как не потерять их по дороге.
Зачем нужен почтовый индекс
Индекс — не украшение адреса, а рабочий инструмент сортировки. По нему отправление попадает в нужный поток ещё до того, как его прочитает человек, и чем раньше машина понимает район доставки, тем меньше ручной работы остаётся на долю почты.
Для отправителя индекс выполняет вторую функцию: он подтверждает, что город и район указаны согласованно. Если индекс и населённый пункт противоречат друг другу, письмо скорее всего уйдёт не туда, поэтому в формах индекс часто проверяют отдельно от остальных полей.
Отсюда практический вывод: индекс — то место, где чаще всего ломается согласованность данных, и проверять его стоит в первую очередь.
Какие семейства форматов встречаются
Строго говоря, систем много, но для практики удобно разделить их на несколько семейств.
| Семейство | Из чего состоит | Где встречается |
|---|---|---|
| Только цифры | несколько позиций подряд | большинство стран Европы и Азии |
| Буквы и цифры | смешанный набор знаков | Великобритания, Канада, Нидерланды, Ирландия |
| Район и точка доставки | первая часть задаёт область, вторая — участок | Великобритания, Нидерланды |
Деление условное. Внутри одного семейства длины могут отличаться, а одна и та же страна со временем меняет правила: появляются новые диапазоны, добавляются знаки. Поэтому код, который жёстко зашивает длину, рано или поздно начинает отвергать корректные данные.
Второе наблюдение: буквы в индексах обычно латинские и часто бывают разного регистра. Если поле приводит всё к нижнему регистру, а проверка ожидает верхний, пользователь получит отказ на верном значении.
Помимо чисто цифровых систем встречаются и такие, где в индексе есть буквы. Их обычно приводят в пример как Канада, Великобритания, Нидерланды и Ирландия: там индекс состоит из чередующихся групп букв и цифр и потому требует от формы другого набора символов. В некоторых из этих систем индекс делится на крупную часть и уточняющую, где вторая сужает область внутри первой.
Для разработчика это означает, что проверка «только цифры» отсекает часть корректных адресов. Если поле не принимает индекс, набранный в другом формате, ошибка выглядит для пользователя случайной: он видит верное значение, а форма его отвергает.
Сколько цифр в почтовом индексе?
Универсального ответа нет, и это и есть правильный ответ. В системах, построенных только на цифрах, чаще всего встречаются последовательности из четырёх — шести знаков, но это именно привычная практика, а не правило, которое можно где-то сверить для всех сразу. Более того, длина может меняться внутри одной страны.
Практический совет: считайте длину подсказкой, а не контрактом. Проверку стоит строить от набора допустимых шаблонов для конкретной страны, а не от одного числа, и обязательно предусматривать ветку «формат неизвестен» — иначе при обновлении чужих правил форма начнёт отказывать живым пользователям.
Если вы тестируете международную форму, полезно держать в наборе примеры из разных семейств сразу. Посмотрите, как выглядят данные для Великобритании и Канады: это как раз страны со смешанными индексами.
Что делать, если у страны нет почтового индекса
Такие страны существуют, и это не редкость и не ошибка. Форма, которая требует индекс безусловно, ставит их жителей перед неразрешимой задачей: пользователь либо бросает оформление, либо вводит что попало.
Обычная практика — сделать поле необязательным для стран без индекса, а если требование всё-таки жёсткое, допускать заглушку вроде нулей. Заглушка при этом должна быть явно распознаваемой: её нельзя потом принимать за настоящий индекс и подставлять в сортировку.
Для тестовых данных это отдельный сценарий, который часто забывают. Проверьте, что при выборе такой страны поле исчезает или становится необязательным, а уже введённое значение не блокирует отправку формы.
Ещё одно свойство, которое легко упустить: формат индекса — не постоянная величина. Системы пересматриваются, добавляются разряды, меняются правила записи, а иногда индекс появляется там, где раньше его не было вовсе. Поэтому утверждение вида «в этой стране ровно столько знаков» стоит хранить не как зашитое в код правило, а как данные, которые можно обновить, не переписывая логику.
Практический признак здоровой системы простой: она умеет принять индекс в незнакомом ей формате, сохранить его и не сломаться. Это важнее, чем точное соответствие текущему справочнику, потому что справочник устареет, а уже собранные данные останутся и должны читаться.
Почему ведущий ноль так легко теряется?
Это самая частая ошибка при работе с индексами, и причина у неё не в почте, а в типах данных. Строка из нескольких цифр, начинающаяся с нуля, при преобразовании в число теряет этот ноль: числовые типы не хранят ведущие нули, для них значение с нулём впереди и без него совпадают.
Ловушка поджидает в нескольких местах: поле базы данных, объявленное числовым; разбор данных в структуре, где значение приводится к числу; таблица, открытая в редакторе, который сам определяет типы столбцов; наконец, вывод на экран через форматирование числа.
Вывод простой: индекс — это текст, а не число, и вести себя с ним нужно соответственно. Арифметика над индексом смысла не имеет, сортировка по алфавиту для него естественнее, а сравнение как чисел только вредит.
Что важно разработчику
Первое: храните индекс строкой. Это снимает проблему ведущих нулей целиком и заодно позволяет принимать буквы, если страна их использует.
Второе: держите правила отдельно от кода формы, по странам. Набор допустимых шаблонов удобнее описывать данными, тогда добавление нового формата не потребует правки логики.
Третье: не делайте индекс обязательным глобально. Обязательность — свойство конкретной страны, а не адреса вообще.
Четвёртое: проектируйте поведение при незнакомом формате. Новая страна в списке, изменившиеся правила, пустое значение — всё это должно приводить к понятному решению, а не к молчаливому отказу.
Наконец, договоритесь о нормализации: убирать ли пробелы и дефисы перед проверкой или хранить их. Смешанный подход, когда запись хранится как есть, а сравнение идёт по очищенному значению, обычно работает лучше всего. Тот же принцип разбора строк применяется и в статье о формате международного адреса.
Отдельно напомню о границах инструмента: индексы и адреса из генератора синтетические. Они созданы только для проверки программ, по ним нельзя отправить письмо, и они ничего не говорят о том, где человек живёт.
Что делать дальше
Если вам нужны примеры индексов для проверки формы, генератор выдаст адрес вместе с индексом в формате выбранной страны, и каждое поле можно скопировать отдельно. Начните с двух-трёх стран из разных семейств: так вы быстро увидите, где ваша проверка ломается на ведущем нуле или на буквах.