Как стать автором
Обновить

Актуальные данные по телефонным кодам российских городов

Время на прочтение4 мин
Количество просмотров4.9K
Многим приложениям требуются актуальные данные о телефонных кодах российских городов. Поиск в интернете приводит к следующим печальным итогам: есть масса сомнительных ресурсов, где выложены коды городов, но их актуальность и достоверность оставляет желать лучшего, либо неизвестно. Есть онлайн-сервисы, которые предоставляют коды по конкретному городу. Этим можно было бы воспользоваться, но проделывать несколько десятков тысяч запросов вручную — удовольствие доступное не каждому.

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

Я предполагаю, что ныне ведомства обязаны делиться открытой информацией, поэтому данные файлы вынужденно выкладываются агентством в открытый доступ, но привычка чиновников «помогать индивидуально» обеспеченным гражданам и ведущим компаниям порождает и то, что наткнуться на эти файлы не так просто, и то, что телефонные коды всех населенных пунктов РФ в этом файле — трехзначные, т.е. состоят ровно из 3 цифр!

Вторым недостатком этих файлов является то, что названия населенных пунктов России выдуманы самими связистами и не имеют стопроцентного совпадения с вариантами названий, используемыми почтовой службой (известная многим база КЛАДР). Вероятно, существуют еще какие-то источники именования населенных пунктов, но я опирался на данные КЛАДР. По этой причине, при совмещении этих данных с вашим списком городов придется немного попотеть, прописывая конкретные несовпадения вручную.

Так как результирующие данные мне надо было получить в виде mysql-таблиц, то я написал код на Mysql для получения требуемых мне данных.

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

Сначала импортируем данные из файлов (команда LOAD DATA INFILE).

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

Каждая строка файла кроме трехзначного кода города содержит диапазон семизначных номеров, юрлицо, которому он выделен и населенный пункт. Известно, что число цифр в требуемом коде от 3 до 6. Также известно, что одному населенному пункту не выделялось более 2 телефонных кодов.

По каждому населенному пункту подсчитываем «вариативность» (количество разных цифр), идущей первой в номерах всех диапазонов после трехзначного кода. Заодно подсчитываем то же самое для четырехзначных кодов (они получаются путем добавления первой цифры диапазона в трехзначный код справа), пятизначных и шестизначных кодов.

Поясню эту формулировку подробнее на примере. Если код города Бердск, Новосибирской области содержит 5 цифр — 38341, то при представлении всех телефонных номеров этого города в семизначном виде первыми двумя цифрами всегда будут 2 цифры — 41. А вот третья цифра будет уже содержать более одного варианта (от 3 вариантов и более, в предположении, что у города может быть 2 телефонных кода)!

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

Подводные камни


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

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

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

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

Заключение


Выражаю надежду, что моя статья немного поможет кому-то в решении его задач. Также будет интересно услышать мнение программистов агентства о причинах трехзначных кодов во всех населенных пунктов России и высокой степени вариативности текстов (название региона, района и населенного пункта), которые по логике должны бы быть идентичными в силу самой природы этих данных.

P.S. В рамках своей задачи я сделал подобные запросы для международных кодов. Но приводить порядок действий бессмысленно, так как эти данные я не смог найти в открытом доступе и получил «по знакомству» dial-планы одного из операторов ip-телефонии. Из его пояснений следовало, что у иного оператора связи будут свои dial-планы и, соответственно, свои нюансы вычленения кодов.
Теги:
Хабы:
+6
Комментарии14

Публикации

Истории

Ближайшие события

Weekend Offer в AliExpress
Дата20 – 21 апреля
Время10:00 – 20:00
Место
Онлайн
Конференция «Я.Железо»
Дата18 мая
Время14:00 – 23:59
Место
МоскваОнлайн