Как определить оператора и регион по номеру телефона

cccisyanqyvo-hmmygsjj8qqeow.jpeg

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

Поэтому «Дадата» с давних пор находит оператора по номеру телефона. Алгоритм простой — сделай и пользуйся. Разве что в 2013 году, когда отменили «мобильное рабство», пришлось чуть скорректировать процесс. В этой статье расскажу, как у нас все работает.

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

Разбить телефонный номер на части


Первое, что нужно сделать, — разобрать телефон на три части:

  • код страны — для России это +7 или 8;
  • код оператора — 3–5 цифр (на самом деле это не код оператора, а код зоны нумерации. Дальше расскажу);
  • собственно номер телефона — 5–7 цифр.


eac08hu6isbvenokad8mkayoo5i.png
Код зоны нумерации у мобильного номера всегда состоит из трех цифр. У стационарного — из трех, четырех или пяти. Чтобы определить регион по номеру телефона, в любом случае достаточно трех первых цифр

Если не знать, какая часть номера из каких цифр состоит, дальше будет непросто. Выход — поставить маску, чтобы пользователи сразу вводили номера по частям. Или разбирать уже после, с задачей справится библиотека Google для работы с телефонами.

Найти оператора по номеру телефона, заглянув в план нумерации


Главный российский документ, согласно которому операторы получают телефонные номера, — это план нумерации Россвязи. В нем ясно прописали все расклады: какие коды и номера каким операторам в каких регионах принадлежат. Что приятно, справочник Россвязи свободно лежит на странице rossvyaz.ru/deyatelnost/resurs-numeracii/vypiska-iz-reestra-sistemy-i-plana-numeracii.

fmdh5cjlco6u1flj8ibx0ahcz5k.png
Справочник выложили сразу в двух форматах, что очень мило со стороны Россвязи. Обновляют раз в месяц

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

  • «ABC-» означает, что в файле лежат стационарные номера. Собственно, «ABC» — обозначение зон нумерации, определенных по географическому принципу;
  • «DEF-» — это файл с мобильными номерами. Префикс означает зоны нумерации, определенные не географически.


Уже здесь ясно: справочник подскажет не только оператора, но и тип телефона:

  • у стационарных код начинается с 3, 4 или 8;
  • у мобильных — с 9.


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

Номер +7 495 999–99–34 может быть прямым мобильным. А может быть, это офис покупает у сотового оператора фиксированную связь — знает только сам оператор.


Но я отвлекся, вернемся к плану нумерации. Внутри файлов все очень просто — таблица на шесть полей.

ors3hnz8rqwvucilgwmwv2lvp60.png
Порядок полей таков: ABC- или DEF-код зоны, начало диапазона, конец диапазона, емкость, оператор, регион. Емкость — просто количество номеров, входящих в диапазон

Искать по плану нумерации регион и оператора — одно удовольствие.

  1. Вытаскиваем код зоны нумерации из нужного номера.
  2. По коду выбираем из справочника подходящие диапазоны.
  3. Оставляем от телефона только то, что следует после кода зоны — собственно номер.
  4. Ищем, в какой диапазон попадает номер.
  5. Успех! Мы нашли для телефона регион, оператора и тип.


_1umdym83jtqoatszl3e62dq5lm.png
Номер +7 301 220–22–47 принадлежит ООО «Мобилон Телекоммуникации». Регион — Республика Бурятия

Порой телефон не укладывается ни в один диапазон. Это значит, что номер неправильный. Исключений нет. На этом, надо сказать, прокалывается упомянутая библиотека Google — она одобряет внешне верный телефон, не сопоставляя с планом нумерации.

Раньше на этом шаге изыскания заканчивались. Но в 2013 году власти приняли закон об отмене «мобильного рабства». С тех пор номера телефонов прибиты к операторам не так уж крепко.

Теперь закон разрешает: меняйте оператора, сохранив номер. Но, внимание, только внутри региона. Нельзя вытащить телефон из региона, предусмотренного Россвязью. Как нельзя и «сломать» диапазоны распределения номеров. Поэтому, если интересен лишь регион телефонного номера, дальше можно не читать. А я продолжу и расскажу, как найти сменившие операторов номера.

Получить доступ к базе перенесенных номеров


Это шаг бюрократический, соответственно, самый сложный. А для большинства компаний и вовсе непроходимый, к сожалению.

Номера, сменившие оператора, хранят в базе данных перенесенных абонентских номеров (БДПН). Ее оператор — уже не Россвязь, но Центральный научно-исследовательский институт связи.

Проблема в том, что получить доступ к БДПН очень непросто. Конечно, если вы не мобильный оператор, субъект национальной платежной системы, силовая структура или другое ведомство.

j_ijlt5-wqfwo9rzlmz_sjulfws.png
Все, что может рядовой пользователь — вручную проверить конкретный номер

Мы получили доступ к БДПН в далеком 2013 году как «иная организация». Но с тех пор правила, похоже, ужесточили. Даже бланк заявления сильно изменился, свежий лежит на сайте Института связи. Поэтому посоветовать здесь ничего не могу, увы.

Проверить, не ушел ли номер к другому оператору


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

Институт связи выкладывает БДПН на SFTP-сервер, в три папки.

emdccej4s4z5akfpatmnxoosgxq.png
В первой папке лежит полный справочник. Во второй — инкрементальные обновления. А третья хранит номера, вернувшиеся «владельцам»

  • В папке PortAllNew лежит полная версия справочника. Это один файл, который обновляют ежедневно в 00:00 по Москве;
  • PortIncrementNew — для инкрементальных обновлений. Каждые два часа сюда добавляют файл с последними перенесенными номерами;
  • ReturnIncrementNew — это номера, которые вернули «владельцам» согласно плану нумерации Россвязи. Здесь тоже каждые два часа появляется новый файл.


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

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

Формат файлов — CSV, сжатые в ZIP. Внутри — проще некуда.

k6c6pnzsyxtfiz3lrq5ahbldu3e.png
В файлах справочника три поля: номер, оператор и количество строк. Причем третье поле заполняют только для первой строки — изящное решение

Историю в БДПН не хранят: каждый день на сервер выкладывают все перенесенные номера. Если телефона нет в полном справочнике или в инкрементах за день, значит, он подчиняется плану Россвязи. Поэтому для наших целей папка с вернувшимися номерами — ReturnIncrementNew — не нужна.

Каждый день мы загружаем с сервера свежую БДПН. Для этого годится любой SFTP-клиент: на Windows подойдет WinSCP или FileZilla FTP Client, на Ubuntu — Nautilus. Классическая ошибка при этом: оставить в настройках дефолтный FTP вместо положенного SFTP. Так можно долго промучиться, не повторяйте наших ошибок.

Когда справочник перенесенных номеров под рукой, осталось поискать в нем исследуемый номер. Варианта два:

  • номер нашелся в БДПН. В этом случае мы меняем оператора из плана Россвязи на нового;
  • номера нет в БДПН — оставляем оператора как есть.


Вот и вся премудрость.

А можно разобрать номер «Дадатой»


Еще вариант — отдать номер телефона «Дадате», сервис вытащит из него полезное.

qr3avnfa8spruodb-zxkh5iaa3c.png
Распозна́ем оператора, исправим опечатки в номере, покажем страну, регион и часовой пояс. Наконец, отделим стационарник от мобильного

Обрабатываем номера по 10 копеек за штуку, если отдавать файлами или через API. Руками по одному телефону — бесплатно и даже без регистрации. Все это — на dadata.ru.

© Habrahabr.ru