Меню

Генератор турецких адресов и структура адреса в Турции

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

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

  • тестовые данные
  • адреса
  • Турция

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

Как устроена турецкая адресная иерархия

Турецкий адрес строится по ступеням, и ступени эти не совпадают с привычными европейскими. Верхняя ступень — il, провинция, которых в стране восемьдесят одна. Внутри провинции выделяется ilçe, район, а внутри района — mahalle, квартал или микрорайон, исторически сложившаяся единица, по которой ориентируются местные жители.

Ниже квартала идёт уровень улицы. Улицы бывают двух типов: sokak, небольшая улица, и cadde, проспект или более крупная магистраль. Оба слова входят в название и различают характер улицы, поэтому при разборе строки их нельзя отбрасывать как служебные. Затем следуют номер здания и номер квартиры внутри здания, и только они указывают на конкретную дверь.

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

Второе следствие — неполнота на практике. Многие местные адреса обходятся без явного указания квартала и содержат только улицу, номер дома и район с провинцией, потому что почтальон ориентируется по улице. Форма не должна требовать все уровни одновременно: это отсечёт часть корректных записей и вызовет раздражение у тех, кто знает свой адрес и без квартала.

В каком порядке записывают турецкий адрес?

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

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

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

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

Как почтовый индекс связан с провинцией

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

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

Отдельный нюанс — города, которых в провинции несколько. Индекс уточняет не только провинцию, но и район, поэтому одной провинции соответствует много значений. Справочник должен хранить их все, а не одно значение на регион, иначе зависимый список индексов будет неполным и часть пользователей не найдёт свой. Как устроены индексы в других странах, разобрано в статье про форматы почтовых индексов.

Почему турецкий регистр букв ломает формы?

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

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

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

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

Как телефонный код должен сочетаться с городом

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

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

Есть и практическая деталь формата. Номера записывают с пробелами и дефисами, иногда в скобках, и все эти варианты означают одно и то же. Форма должна приводить запись к единому виду перед сравнением, иначе один и тот же номер будет выглядеть как три разных.

Что стоит проверить в форме с турецким адресом

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

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

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

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

Как переносить турецкий адрес между системами?

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

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

Третья опасность — обрезка. Поле ограниченной длины молча теряет конец строки, а вместе с ним и часть названия. Если ограничение задано в байтах, а не в символах, турецкие буквы занимают больше места, и строка обрежется раньше, чем ожидалось. Это классическая ошибка, которая проявляется только на нелатинских данных и потому легко ускользает от обычных проверок.

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

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

Границы: что синтетические записи не подтверждают

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

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

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

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

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

Популярные инструменты и статьи о применении