Качество данных

Коды ISO 3166-1 и 3166-2 и где в них легко запутаться

ISO 3166-1 присваивает стандартный двухбуквенный код каждой признанной стране, и это самое близкое к универсальному, стабильному идентификатору «какая страна», что есть у программ для работы с местоположением. DE для Германии, JP для Японии, BR для Бразилии. Он широко используется именно потому, что короткий, стабильный и однозначный, если знать стандарт, и именно поэтому наш поиск почтовых индексов требует его вместе с индексом, а не название страны в свободной форме.

ISO 3166-2 опускается на уровень ниже и присваивает коды административным единицам внутри страны (штатам, провинциям, регионам), в зависимости от того, как устроена сама страна. Штат США, провинция Канады и префектура Японии представлены таким образом, каждая в виде кода, объединяющего префикс страны с идентификатором административной единицы. Это полезно везде, где нужен стабильный идентификатор «какой регион внутри страны», не зависящий от сопоставления названий в свободной форме, которые в разных источниках данных могут писаться, сокращаться или переводиться по-разному.

Путаница обычно возникает в нескольких предсказуемых местах. Названия стран в свободной форме дают самые очевидные несовпадения: «United States», «USA», «U.S.» и «America» означают для человека одно и то же, но не для кода, который ожидает точного совпадения строки, а ведь именно эту неоднозначность и устраняет двухбуквенный код. Структура административных единиц тоже сильно различается от страны к стране: одни аккуратно делятся на небольшое число штатов или провинций, другие используют несколько административных уровней, и сопоставление понятных пользователю меток вроде «штат», «провинция» или «округ» с кодами ISO 3166-2 не сводится к однозначному соответствию для всех стран.

Ещё один частый источник путаницы: домен верхнего уровня страны смешивают с её кодом ISO. Они часто совпадают (.de и DE), но не всегда, и если считать доменный суффикс надёжной заменой кода страны, рано или поздно на исключениях получится неверный результат.

Практический совет: храните и передавайте коды ISO 3166-1, а не названия стран в свободной форме везде, где ваша система обменивается данными с другой системой, в том числе с нашей, и используйте коды ISO 3166-2 для административных единиц всегда, когда нужен стабильный идентификатор, а не подпись для отображения. Оставьте понятные человеку названия для того, что пользователи действительно видят на экране, а под ними храните коды для всего, что должно надёжно совпадать.

Наш поиск почтовых индексов принимает двухбуквенный код страны ISO 3166-1 alpha-2 вместе с самим почтовым индексом именно для того, чтобы запрос был однозначным независимо от того, как иначе могло бы быть записано название страны.