- Самый быстрый алгоритм определения страны по номеру телефона
- Как определить оператора и регион по номеру телефона
- Разбить телефонный номер на части
- Найти оператора по номеру телефона, заглянув в план нумерации
- Получить доступ к базе перенесенных номеров
- Проверить, не ушел ли номер к другому оператору
- А можно разобрать номер «Дадатой»
- Определение страны и региона по номеру телефона
- Вездесущий Яндекс
- Не будем обижать приверженцев Google
- Экзотика
Самый быстрый алгоритм определения страны по номеру телефона
> Алгоритм должен быть как можно более оптимальным в плане скорости, т.к. номеров очень много и всё должно работать быстро.
Используйте Си/Java/.NET или откажитесь от слова «быстро», ни Питон, ни PHP так же быстро это не сделают. Сколько миллионов номеров надо обрабатывать в секунду? Откуда они приходят?
Вариант со словарем — хороший. Можно попробовать выжать еще крохи: не делать несколько запросов в хэш-таблицу (причем, скорее всего, в цикле на питоне) для определения кодов стран, а вместо этого мэппинг «код страны» -> «страна» хранить в Trie (или DAWG).
В github.com/kmike/datrie есть метод longest_prefix_item, которым можно получить самый длинный префикс данного номера и соответствующий ему объект. Записываем в datrie.Trie мэппинг «префикс-страна», вызываем longest_prefix_item и готово.
Вполне может оказаться быстрее (главным образом за счет того, что итерация будет вынесена в C-расширение и не нужно будет создавать копии строк длины 1, 2, 3 и тд). Гарантировать, что будет быстрее, не могу, но, в любом случае, с Trie из питона должно как минимум 1млн номеров/сек получаться.
Источник
Как определить оператора и регион по номеру телефона
Полезно знать, какого телефонного оператора выбрал клиент и в каком регионе. Тогда можно разбить клиентскую базу географически и не звонить ночами. Или проводить промоакции вместе с операторами. А некоторые наши заказчики экономят: для каждого оператора выбирают самого дешевого СМС-агрегатора.
Поэтому «Дадата» с давних пор находит оператора по номеру телефона. Алгоритм простой — сделай и пользуйся. Разве что в 2013 году, когда отменили «мобильное рабство», пришлось чуть скорректировать процесс. В этой статье расскажу, как у нас все работает.
В процессе есть большая сложность — получить доступ к базе перенесенных номеров. Частным лицам его не выдают, да и компаниям придется тяжело. Об этом — в отдельном разделе.
Разбить телефонный номер на части
Первое, что нужно сделать, — разобрать телефон на три части:
- код страны — для России это +7 или 8;
- код оператора — 3–5 цифр (на самом деле это не код оператора, а код зоны нумерации. Дальше расскажу);
- собственно номер телефона — 5–7 цифр.
Код зоны нумерации у мобильного номера всегда состоит из трех цифр. У стационарного — из трех, четырех или пяти. Чтобы определить регион по номеру телефона, в любом случае достаточно трех первых цифр
Если не знать, какая часть номера из каких цифр состоит, дальше будет непросто. Выход — поставить маску, чтобы пользователи сразу вводили номера по частям. Или разбирать уже после, с задачей справится библиотека Google для работы с телефонами.
Найти оператора по номеру телефона, заглянув в план нумерации
Главный российский документ, согласно которому операторы получают телефонные номера, — это план нумерации Россвязи. В нем ясно прописали все расклады: какие коды и номера каким операторам в каких регионах принадлежат. Что приятно, справочник Россвязи свободно лежит на странице rossvyaz.ru/deyatelnost/resurs-numeracii/vypiska-iz-reestra-sistemy-i-plana-numeracii.
Справочник выложили сразу в двух форматах, что очень мило со стороны Россвязи. Обновляют раз в месяц
Внутри плана нумерации четыре файла: три для стационарных номеров и один — для мобильных. Разница между содержимым файлов заметна, если посмотреть на префиксы в названиях:
- «ABC-» означает, что в файле лежат стационарные номера. Собственно, «ABC» — обозначение зон нумерации, определенных по географическому принципу;
- «DEF-» — это файл с мобильными номерами. Префикс означает зоны нумерации, определенные не географически.
Уже здесь ясно: справочник подскажет не только оператора, но и тип телефона:
- у стационарных код начинается с 3, 4 или 8;
- у мобильных — с 9.
Есть еще прямые мобильные — внешне их не отличить от стационарных. Знаю только один способ раскрыть прямой мобильный: найти его оператора и сравнить со списком мобильных операторов России. Но даже так без гарантии, потому что некоторые операторы мобильной связи в то же время — и операторы фиксированной.
Номер +7 495 999-99-34 может быть прямым мобильным. А может быть, это офис покупает у сотового оператора фиксированную связь — знает только сам оператор.
Но я отвлекся, вернемся к плану нумерации. Внутри файлов все очень просто — таблица на шесть полей.
Порядок полей таков: ABC- или DEF-код зоны, начало диапазона, конец диапазона, емкость, оператор, регион. Емкость — просто количество номеров, входящих в диапазон
Искать по плану нумерации регион и оператора — одно удовольствие.
- Вытаскиваем код зоны нумерации из нужного номера.
- По коду выбираем из справочника подходящие диапазоны.
- Оставляем от телефона только то, что следует после кода зоны — собственно номер.
- Ищем, в какой диапазон попадает номер.
- Успех! Мы нашли для телефона регион, оператора и тип.
Номер +7 301 220-22-47 принадлежит ООО «Мобилон Телекоммуникации». Регион — Республика Бурятия
Порой телефон не укладывается ни в один диапазон. Это значит, что номер неправильный. Исключений нет. На этом, надо сказать, прокалывается упомянутая библиотека Google — она одобряет внешне верный телефон, не сопоставляя с планом нумерации.
Раньше на этом шаге изыскания заканчивались. Но в 2013 году власти приняли закон об отмене «мобильного рабства». С тех пор номера телефонов прибиты к операторам не так уж крепко.
Теперь закон разрешает: меняйте оператора, сохранив номер. Но, внимание, только внутри региона. Нельзя вытащить телефон из региона, предусмотренного Россвязью. Как нельзя и «сломать» диапазоны распределения номеров. Поэтому, если интересен лишь регион телефонного номера, дальше можно не читать. А я продолжу и расскажу, как найти сменившие операторов номера.
Получить доступ к базе перенесенных номеров
Это шаг бюрократический, соответственно, самый сложный. А для большинства компаний и вовсе непроходимый, к сожалению.
Номера, сменившие оператора, хранят в базе данных перенесенных абонентских номеров (БДПН). Ее оператор — уже не Россвязь, но Центральный научно-исследовательский институт связи.
Проблема в том, что получить доступ к БДПН очень непросто. Конечно, если вы не мобильный оператор, субъект национальной платежной системы, силовая структура или другое ведомство.
Все, что может рядовой пользователь — вручную проверить конкретный номер
Мы получили доступ к БДПН в далеком 2013 году как «иная организация». Но с тех пор правила, похоже, ужесточили. Даже бланк заявления сильно изменился, свежий лежит на сайте Института связи. Поэтому посоветовать здесь ничего не могу, увы.
UPD. В комментариях пишут, что с доступом все не так сурово: «Работал в энергосбытовой компании, без проблем за несколько дней получил доступ к бдпн. заполнил заявление, подписал директором, поставил печать и отправил по электронике. Потом созвонился для верности».
Проверить, не ушел ли номер к другому оператору
Если получили доступ к официальной базе перенесенных номеров, дальше легко. Проверяем, не поменял ли абонент оператора, сбросив оковы «мобильного рабства».
Институт связи выкладывает БДПН на SFTP-сервер, в три папки.
В первой папке лежит полный справочник. Во второй — инкрементальные обновления. А третья хранит номера, вернувшиеся «владельцам»
- В папке PortAllNew лежит полная версия справочника. Это один файл, который обновляют ежедневно в 00:00 по Москве;
- PortIncrementNew — для инкрементальных обновлений. Каждые два часа сюда добавляют файл с последними перенесенными номерами;
- ReturnIncrementNew — это номера, которые вернули «владельцам» согласно плану нумерации Россвязи. Здесь тоже каждые два часа появляется новый файл.
Внутри папок данные по всем операторам всех регионов хранят без деления по файлам. Файлы нужны, чтобы различать обновления.
В название инкрементов вставляют дату и время обновления. Если хотите максимально срочно получать перенесенные номера — вот, пожалуйста. Если срочности нет, проще раз в сутки загружать полный справочник
Формат файлов — CSV, сжатые в ZIP. Внутри — проще некуда.
В файлах справочника три поля: номер, оператор и количество строк. Причем третье поле заполняют только для первой строки — изящное решение
Историю в БДПН не хранят: каждый день на сервер выкладывают все перенесенные номера. Если телефона нет в полном справочнике или в инкрементах за день, значит, он подчиняется плану Россвязи. Поэтому для наших целей папка с вернувшимися номерами — ReturnIncrementNew — не нужна.
Каждый день мы загружаем с сервера свежую БДПН. Для этого годится любой SFTP-клиент: на Windows подойдет WinSCP или FileZilla FTP Client, на Ubuntu — Nautilus. Классическая ошибка при этом: оставить в настройках дефолтный FTP вместо положенного SFTP. Так можно долго промучиться, не повторяйте наших ошибок.
Когда справочник перенесенных номеров под рукой, осталось поискать в нем исследуемый номер. Варианта два:
- номер нашелся в БДПН. В этом случае мы меняем оператора из плана Россвязи на нового;
- номера нет в БДПН — оставляем оператора как есть.
Вот и вся премудрость.
А можно разобрать номер «Дадатой»
Еще вариант — отдать номер телефона «Дадате», сервис вытащит из него полезное.
Распозна́ем оператора, исправим опечатки в номере, покажем страну, регион и часовой пояс. Наконец, отделим стационарник от мобильного
Источник
Определение страны и региона по номеру телефона
Да мало ли какие причины могут вызвать у вас желание определить, откуда же он звонит или кто его оператор:
- Вам интересно положение на карте страны вашего нового компаньона.
- Вы хотите проверить, а действительно ли новый претендент на ваше сердце из Марселя.
- Вы хотите такого же сотового оператора, как и у него, уж слишком заманчивые условия, нужно узнать, кто это.
В общем, причин может быть много и все они, несомненно, важны, а иначе и быть не может. И все они ведут в привычные нам поисковые системы.
Вездесущий Яндекс
А из них самая известная у нас — поисковая система Яндекса. Таким образом, входим на сайт yandex.ru и в строке поиска даём «Номер мобильного телефона 495». Ниже, в списке возможных вариантов, можно выбрать и более подходящий запрос.
Нажимаем на «Найти» и у нас перед глазами целый рой возможных мест, где подробно всё будет описано, прямо по номерам телефонов — какой диапазон номеров, к какому региону относится и какому оператору принадлежит.
Хорошо, можно зайти и с другой стороны — когда знаем страну, регион, город, а международный телефонный код как-то «упустили».
Тут даже ещё проще определить. Набираем в поисковой строке: «телефонный код Франции». И уже в ниспадающем окне видим — 33.
Tелефонный код Франции
Ну и, наконец, мы добрались до Марселя. Набираем так же: «телефонный код Марселя», — и перед нами масса желающих предоставить эту информацию. Выбираем одного из них и видим не только искомое — 491 — но и всю структуру номера, как нужно набирать: код страны, города, далее сам номер.
Телефонный код Марселя
Не будем обижать приверженцев Google
В мире есть два «поисковых царства», две поисковых идеологии, задающих моду всему миру. Вот — Яндекс, но есть и не менее знаменитый Google. Здесь поиск аналогичен с точностью до последней вводимой буквы.
Например, хотим узнать код Италии. Тогда запускаем google.ru и смело жмём в поисковой строке: «телефонный код Италии». Сама система предложит его — «+39», а ниже, кроме того, и масса полезных ссылок, в которых тоже можно почерпнуть что-нибудь полезное.
Экзотика
Судя по тому, что сегодня любой школьник может забыть положить в портфель учебник алгебры, но мобильный ни в коем случае, не мешает и создать что-то вроде энциклопедии мобильной связи, в которой и будет буквально всё — от тех же кодов до расположения вышек в каждом городе мира. А пока такого ещё не изобретали, можно воспользоваться и другой энциклопедией, самой известной — Wikipedia. Просто нужно внимательно смотреть на экран и «держать ушки на макушке».
Просто набираем в поиске Википедии: «Штутгарт». У нас перед глазами рассказ об этом славном немецком городе, его достопримечательностях, видах. А в колонке справа все «технические данные» об этом городе Мерседесов. Есть здесь и телефонный код: +49 711.
В общем, найти по номеру телефона страну, регион и даже оператора мобильной связи не составляет никакого труда. Немного опыта, умения жать на клавиши, ну, внимательности, иногда, конечно, изобретательности, на компьютере не без этого.
Источник