Многие приложения требуют актуальных данных о телефонных кодах городов России.
Поиск в Интернете приводит к следующим печальным результатам: сомнительных ресурсов, на которых размещены коды городов, очень много, но их актуальность и достоверность оставляют желать лучшего, либо неизвестны.
Существуют онлайн-сервисы, которые предоставляют коды для конкретного города.
Это можно было бы использовать, но делать несколько десятков тысяч запросов вручную — удовольствие не для всех.
Фактически первоисточником этой информации является Федеральное агентство связи Россвязь, которое публикует информацию о текущей телефонной нумерации.
Эти файлы названы так, что даже поисковые системы, отягощенные зачатками искусственного интеллекта, не смогут вернуть эту волшебную страницу по типичным поисковым фразам тех, кто ищет список действующих телефонных кодов – «Выписка из реестра телефонных кодов».
Российская система и план нумерации».
Я предполагаю, что в настоящее время ведомства обязаны делиться открытой информацией, поэтому эти файлы вынуждены предоставляться ведомством, но привычка чиновников «помогать индивидуально» состоятельным гражданам и ведущим компаниям порождает как то, что это не так.
так легко наткнуться на эти файлы, и то, что Телефонные коды всех населенных пунктов РФ в этом файле трехзначные, т.е.
состоят ровно из 3-х цифр! Второй недостаток этих файлов заключается в том, что названия русских населенных пунктов придуманы самими связистами и не имеют 100% совпадения с вариантами названий, используемыми почтовой службой (база данных КЛАДР многим известна).
Вероятно, есть и другие источники названий населенных пунктов, но я опирался на данные КЛАДР.
По этой причине при объединении этих данных со своим списком городов вам придется поработать немного усерднее, вручную фиксируя конкретные несоответствия.
Поскольку мне нужно было получить результирующие данные в виде таблиц MySQL, я написал код на Mysql для получения нужных мне данных.
Конкретный код, вероятно, выходит за формат такой статьи, поэтому привожу описание алгоритма и некоторых подводных камней.
Возможно, это будет плюсом для читателей, потому что.
позволит реализовать алгоритм в более удобной и привычной среде.
Сначала импортируйте данные из файлов (команда LOAD DATA INFILE).
Поскольку агентство уже любезно предоставило первые 3 цифры телефонного кода, наша задача поймать оставшиеся и добавить их к этим первым 3. Каждая строка файла, помимо трехзначного кода города, содержит ряд семизначных чисел, юридическое лицо, которому он присвоен, и населенный пункт. Известно, что количество цифр в необходимом коде от 3 до 6. Известно также, что одному населенному пункту не выделялось более 2-х телефонных кодов.
Для каждого населенного пункта вычисляем «изменчивость» (количество разных цифр), которая стоит на первом месте в числах всех диапазонов после трехзначного кода.
При этом рассчитываем то же самое для четырехзначных кодов (они получаются добавлением первой цифры диапазона к трехзначному коду справа), пятизначных и шестизначных кодов.
Поясню эту формулировку более подробно на примере.
Если код города Бердск Новосибирской области содержит 5 цифр - 38341, то при представлении всех телефонных номеров этого города в семизначном виде первые две цифры всегда будут 2 цифры - 41. А вот третья цифра уже будет содержать больше более одного варианта (от 3-х и более вариантов, при условии, что город может иметь 2 кода города)! По сути, это основная часть алгоритма.
Алгоритм не идеален с теоретической точки зрения, так как очевидно, что если все имеющиеся номера в населенном пункте содержат только 2 варианта первой цифры, то такой подход выдаст ошибку - вместо одного кода населенный пункт будет иметь 2.
Подводные скалы
Перед этим запросом у меня просьба очистить данные от мусора, потому что.одинаковые регионы, районы и населенные пункты в файлах ведомства не всегда полностью контекстуально идентичны.
Где-то есть символы табуляции.
Где-то отсутствует название района и т.п.
Например, для файла с кодами, начинающимися с цифры 3, мой запрос содержит около 20 строк, поэтому отловить все эти ситуации не составит труда.
Обратите внимание, что файлы содержат коды, не имеющие региональной привязки: 800, коды, выделенные мобильным операторам, и коды платных номеров.
Вполне логично, что их следует исключить из приведенного выше запроса.
Ввиду теоретического несовершенства алгоритма вполне разумно дополнить схему запросом на проверку – сравнить полученные данные с уже имеющимися у вас справочниками, а также провести выборочную проверку отдельных расчетов через онлайн-сервисы, на актуальность.
и в правильности данных вы уверены на 100 процентов.
Если некоторые из рассчитанных кодов городов неверны, вы можете удалить их еще одним дополнительным запросом.
Ввиду необходимости «убирать мусор» в файле и различий в составе этого «мусора» правильнее писать запрос на очистку индивидуально для каждого файла.
Также я исторически не изучал вопрос изменения состава «мусора» в файлах, так как работал разово только с октябрьскими данными.
Вероятно, попытка полностью автоматизировать процесс обновления телефонных кодов городов России по мере обновления файлов агентством столкнется со временем с высоким уровнем вариативности «мусора» и добиться полной автоматизации процесса, скорее всего, не удастся.
Заключение
Надеюсь, что моя статья кому-то немного поможет в решении своих проблем.Также будет интересно услышать мнение программистов агентства о причинах трехзначных кодов во всех населенных пунктах России и высокой степени вариативности текстов (название региона, района и населенного пункта), которые по логике должны быть идентичными из-за к самой природе этих данных.
P.S. В рамках своей задачи я делал аналогичные запросы по международным кодам.
Но приводить порядок действий бессмысленно, так как я не смог найти эти данные в открытом доступе и получил «по знакомству» планы нумерации одного из операторов IP-телефонии.
Из его объяснений следовало, что у других операторов связи будут свои планы нумерации и, соответственно, свои нюансы кодов изоляции.
Теги: #телефонные коды городов России #Развлекательные головоломки #MySQL #Открытые данные #Разработки для электронной коммерции
-
Установка Php-Fpm В Debian Из Пакетов
19 Oct, 24 -
Тяжелая Жизнь Тестировщика Игр
19 Oct, 24