как проверить оператора по номеру
Определить регион и оператора по номеру телефона
У каждого абонента мобильной сети есть персональный номер IMSI. Он содержит коды оператора и региона, в котором зарегистрирована SIM-карта. Его стоит отличать от IMEI, который присваивается смартфону или другом устройству, способному подключаться к сотовой сети.
Зачем нужен этот сервис?
Безлимитные разговоры предоставляются внутри сети. Для общения с абонентами других операторов предусмотрены пакетные минуты. Стоимость звонков устанавливается в зависимости от местоположения собеседника. Определив регион по номеру телефона, вы сможете планировать расходы на оплату услуг связи.
Почему важна проверка абонента?
Владелец SIM-карты может сменить оператора, сохранив за собой номер. При разговоре с ним вы будете использовать деньги на счёте или минуты, включённые в тариф. Чтобы избежать лишних затрат, следует проверить оператора и регион по номеру телефона.
Как пользоваться сервисом?
Узнать оператора и регион регистрации просто:
— укажите номер мобильного телефона;
— введите проверочное число с картинки, а если вы не можете разобрать его, обновите изображение;
— нажмите кнопку «Проверить».
Онлайн-сервис найдёт название оператора и регион, в котором зарегистрирован номер. Услуга предоставляется бесплатно.
Посещая сайт beeline.ru вы предоставляете согласие на обработку данных о посещении вами сайта beeline.ru (данные cookies и иные пользовательские данные), сбор которых автоматически осуществляется ПАО «ВымпелКом» (Российская Федерация, 127083, г. Москва, ул. 8 Марта, д. 10, стр. 14, далее — Билайн) на условиях Политики обработки персональных данных. Компания также может использовать указанные данные для их последующей обработки системами Google Analytics, Яндекс.Метрика, MyTarget, Monkey и др., а также передавать / привлекать к обработке данных третьих лиц, перечень которых размещен здесь. Обработка осуществляется с целью функционирования сайта www.beeline.ru и с целью продвижения товаров, работ, услуг Билайн и третьих лиц.
ПАО «ВымпелКом» раскрывает информацию, раскрытие которой предусмотрено законодательством РФ о ценных бумагах также на странице в сети Интернет ООО «Интерфакс-ЦРКИ» – информационного агентства, аккредитованного ЦБ РФ на раскрытие информации. Информация доступна по ссылке
У каждого абонента мобильной сети есть персональный номер IMSI. Он содержит коды оператора и региона, в котором зарегистрирована SIM-карта. Его стоит отличать от IMEI, который присваивается смартфону или другом устройству, способному подключаться к сотовой сети.
Зачем нужен этот сервис?
Безлимитные разговоры предоставляются внутри сети. Для общения с абонентами других операторов предусмотрены пакетные минуты. Стоимость звонков устанавливается в зависимости от местоположения собеседника. Определив регион по номеру телефона, вы сможете планировать расходы на оплату услуг связи.
Почему важна проверка абонента?
Владелец SIM-карты может сменить оператора, сохранив за собой номер. При разговоре с ним вы будете использовать деньги на счёте или минуты, включённые в тариф. Чтобы избежать лишних затрат, следует проверить оператора и регион по номеру телефона.
Как пользоваться сервисом?
Узнать оператора и регион регистрации просто:
— укажите номер мобильного телефона;
— введите проверочное число с картинки, а если вы не можете разобрать его, обновите изображение;
— нажмите кнопку «Проверить».
Онлайн-сервис найдёт название оператора и регион, в котором зарегистрирован номер. Услуга предоставляется бесплатно.
Как узнать оператора и страну по номеру телефона?
Если вам на телефон поступают звонки с незнакомых номеров, то лучше уточнить от какого оператора из какой страны с вами пытаются связаться абоненты. Особенно важно это, если вы хотите перезвонить незнакомцу. Существует несколько способов, которые помогут вам узнать оператора по номеру телефона.
Как узнать страну и оператора по номеру телефона
Стандартные возможности смартфонов позволяют без дополнительных программ узнавать, из какого региона вам проступил звонок. Однако, работает эта опция не для всех номеров и не каждый смартфон ее поддерживает. Поэтому можно использовать иные варианты:
Конечно лучше всего использовать онлайн способ. При поиске онлайн вам не нужно самостоятельно выделять из набора цифр код. Эта услуга для вас абсолютно бесплатна. Поисковая форма позволяет определить оператора связи и узнать другие подробности о номере.
Приложения для телефона, чтобы определить оператора по номеру
Ну а если вам недостаточно поисковой формы, то для смартфонов, работают на разных операционных системах, создана масса приложений для помощи в определении номеров и региона, откуда поступает вызов. Не так давно компания Яндекс создала собственный определитель, позволяющий узнать организацию, из которой поступил вызов. Но функционал этой программы ограничен – если компания использует сторонний номер телефона, например, мобильный одного из менеджеров, то вы не узнаете, кто хочет с вами связаться.
Неплохим приложением можно назвать утилиту «Операторы России». Она позволяет определить при входящем и исходящем вызове, какой оператор обслуживает вашего собеседника. Недостаток программы в том, что вы не сможете определить страну вызова. Базы данных ограничены пределами нашей страны.
Call Dispatcher
Более удачным по количеству справочной информации является приложение Call Dispatcher. Его базы данных собрали в себе сведения об украинских, белорусских и абхазских номерах. Функционал приложения позволяет:
После установки этой программы в директории карты памяти нужно обязательно создать папку Call Dispatcher, иначе базы данных загружены не будут. Только после создания папки необходимо приступать к скачиванию баз. Если вы их не загрузите, работать утилита не будет. Еще одна небольшая проблема при использовании этого программного продукта – не все операторы и номера вписаны в базы. Но эта неприятность редко затрагивает пользователей, так как базы данных регулярно пополняются.
Другие способы, позволяющие определить оператора связи
Если вы уверены, что звонок поступил к вам из России (номер начинается с кода +7), то достаточно определить оператора связи и регион использования симкарты. Для этого можно пользоваться разными способами.
Ручной поиск информации
Самый сложный способ определения оператора связи – использование справочника кодов. Каждый телефонный номер, кроме кода страны зашифровывает в себе идентификатор оператора. В России в его качестве используются числа в диапазоне от 900 до 999. На сегодня отечественные операторы задействовали 79 кодов из этого диапазона, еще 21 находится в резерве.
Большее количество идентификаторов заняли представители «большой тройки».
Таблица кодов операторов МТС, Мегафон и Билайн
Название оператора | Количество занятых кодов | Коды |
МТС | 25 | 902, 904, 908, 910, 911, 912, 913, 914, 915, 916, 917, 918, 919, 950, 978, 980, 981, 982, 983, 984, 985, 986, 987, 988, 989 |
Мегафон | 24 | 902, 904, 908, 920, 921, 922, 923, 924, 925, 926, 927, 928, 929, 930, 931, 932, 933, 934, 936, 937, 938, 939, 950, 999 |
Билайн | 24 | 900, 902, 903, 904, 905, 906, 908, 909, 950, 951, 953, 960, 961, 962, 963, 964, 965, 966, 967, 968, 969, 980, 983, 986 |
Как видите даже в этой таблице разным операторам принадлежат одинаковые коды. Не лучше ситуация у региональных компаний, которые в большинстве случаев пользуются идентификаторами более крупных операторов связи. По этой причине ручной поиск информации дает лишь общую информацию, а при коде 902 он и вовсе бесполезен.
Получаем информацию о стране и операторе от своего оператора
Операторы связи дают самую точную информацию о своих абонентах. С декабря 2013 года в России действует закон о сохранении номера при переходе клиента в другую сотовую компанию. В связи с ним появляется путаница, если человек пытается самостоятельно по коду определить оператора. Но не обязательно действовать самому. Операторы связи предусмотрели возможность определить принадлежность абонентского номера.
Недостаток этого способа в том, что у некоторых операторов сервис платный. Еще один минус – найти форму проверки на официальном сайте непросто. В большинстве случаев она «спрятана» в одном из разделов в с информацией для абонентов.
Использование электронных кошельков
Если у вас есть электронный кошелек, то определить принадлежность номера к конкретному оператору связи можно с его помощью. Для этого выберите в списке платежей пункт «Внести деньги на счет мобильного», а затем введите номер. После этого действия на страннице появится название или логотип оператора. Совершать платеж не обязательно.
Самый простой способ узнать данные абонента
О последнем способе мы уже упоминали выше – это онлайн-сервисы для получения полной информации об абоненте. Вы сможете узнать не только оператора связи, но и регион приобретения симкарты. Это позволит вам быстро сориентироваться в важных вопросах: стоит ли перезванивать незнакомцу, сколько обойдется минута связи, можно ли совершить вызов, используя лишь включенный пакет минут своего тарифа.
Большинство операторов сейчас предлагают безлимитные звонки внутри сети. По этой причине узнать, услугами какой компании пользуется предполагаемый собеседник очень важно. Если абонент относится к вашему сотовому оператору и находится с вами в одном регионе, то чаще всего можно звонить не опасаясь.
Преимущество онлайн-базы в том, что она имеет удобный пользовательский интерфейс. Вам достаточно только ввести номер и нажать кнопку «Найти». После обновления страницы вы получите результат в виде подробного отчета. Небольшой недостаток в том, что информация в базе обновляется чуть позже, чем у оператора. Но с каждым днем сведения вносятся более оперативно.
Узнать какой оператор и какой регион по номеру телефона
Самый быстрый способ
По комбинации цифр можно определить, к какому мобильному оператору относится номер, а также узнать регион.
Узнать буквально за несколько секунд, в каком регионе России или стране зарегистрирован номер телефона, можно с помощью специализированных сайтов в режиме онлайн. Потребуется только ввести комбинацию цифр в окно поиска и нажать кнопку “Найти” или “Определить”.
Подобных сайтов множество. Среди них рекомендуются те, которые выдают максимум доступных данных, т.е. не только регион в России или страну, но и город, название сотового оператора.
Среди таких сервисов:
Порядок определения номера через интернет
При определении стоит обратить внимание на то, что не так давно стало возможным перейти к другому оператору не меняя номер. Если он был, например абонентом Мегафон, по введению информации система также будет показывать на принадлежность именно к Мегафону.
Интернет используется в разных целях. И одной из них является возможность использование сервисов проверки.
Чтобы им воспользоваться и получить ответ на требуемый вопрос, стоит следовать следующему алгоритму:
Иногда очень полезно узнать регион по номеру мобильного. Зная то, кто вам позвонил, как минимум можно сэкономить денежные средства баланса абонента. Кроме того, это обеспечит безопасность, так как, не перезвонив на незнакомый номер, человек останется защищенным. Пользуйтесь тем, что для вас разработано профессионалами.
Бесплатные сервисы
Некоторые сайты и сервисы не только помогают узнать, откуда звонили, но и предоставляют другие полезные функции:
Большинство сайтов предлагают пользователям полные справочники и базы телефонных номеров по кодам и наименованиям операторов, а также по городам и областям России.
Коды регионов телефонов России по городам
Список представлен не в алфавитном порядке названий областей, а с тем расчетом по числовому возрастанию, чтобы по цифрам кода быстро узнать к какому региону России относится данный код:
Теперь Вы знаете, как бесплатно по номеру мобильного телефона определить регион и оператора сотовой связи.
Коды операторов
Ниже представлены коды, закреплённые за федеральными операторами сотовой связи:
Оператор | Код |
МТС | 902, 904, 908, 910, 911, 912, 913, 914, 915, 916, 917, 918, 919, 950, 978, 980, 981, 982, 983, 984, 985, 986, 987, 988, 989. |
Билайн | 900, 902, 903, 904, 905, 906, 908, 909, 950, 951, 953, 960, 961, 962, 963, 964, 965, 966, 967, 968, 969, 980, 983, 986 |
Мегафон | 902, 904, 908, 920, 921, 922, 923, 924, 925, 926, 927, 928, 929, 930, 931, 932, 933, 934, 936, 937, 938, 939, 950, 999 |
Йота | 958, 999 |
Теле2 | 900-902, 904, 908, 950-953, 958, 977, 992, 994, 996, 999 |
Стоит сказать, что данные комбинации цифр не могут дать пользователю какой-либо точной информации, связанной с геолокацией другого абонента: к примеру, def-код (996) предназначен для примерно 40 регионов нашей страны, в которых представлены услуги Yota.
Также некоторые из представленных серий делятся между операторами «Большой тройки» и региональными поставщиками связи, то есть, например, обладатель номера +7 (900) ХХХ-ХХ-ХХ может быть абонентом как Теле2, так и Екатеринбургского «Мотива».
Для идентификации входящего вызова следует обращать внимание не на первые 3 цифры, а на первые 5 (иногда даже 7) — в таком случае регион поиска значительно сузится, и пользователь сможет найти хотя бы примерные сведения о местоположении вызывающего его абонента.
Конечно, вряд ли кто-либо получит удовольствие от ручного скролла длинного списка из пятизначных чисел, поэтому для быстрого и качественного определения локации по номеру мобильного стоит использовать специальные онлайн-сервисы (RegionOperator или IndexMain.ru).
Можно ли получить данные о владельце номера
Намерение ”пробить” личные данные владельца номера бывает продиктовано разными причинами – от желания отследить вторую половину до обеспечения собственной безопасности. Создатели недобросовестных сервисов пользуются этим ради получения контактов и денег пользователей. На их сайтах можно увидеть обещания распознать не только имя, фамилию, адрес прописки, но и даже местоположение звонящего. Подобные заявления пусты и являются признаками мошенников.
Получить полные данные хозяина номера телефона законным путем можно только от правоохранительных органов при расследовании уголовного дела.
Легальные способы, как проверить самостоятельно, кому может принадлежать номер мобильного:
Все описанные действия не гарантируют успеха в идентификации личности, на которую зарегистрирована сим-карта. Если они не дали результата, стоит оценить серьезность ситуации и необходимость поиска данных.
Как определить оператора по номеру телефона
Как определить оператора по номеру телефона
Как узнать по номеру телефона, к какому сотовому оператору относится абонент, и зачем это нужно в современной жизни?
Большинство операторов сегодня не делают различий при звонках внутри сети или на других операторов, но только в рамках пакета минут. А вот когда начинают действовать расценки при исчерпании пакета минут, очень полезно знать, на какого оператора вы собираетесь позвонить.
А еще вы можете определять, из какого региона вам позвонили или отправили СМС. Так что умение устанавливать оператора и регион покупки сим-карты может весьма пригодиться.
Как определять принадлежность номера?
Итак, вы увидели незнакомый номер на экране телефона. Если он начинается с +7, значит, вам звонили из России, так как под огромную территорию нашей страны отведен только этот международный код.
Далее обратите внимание на следующие после +7 три цифры. Они называются префикс — трехсимвольное обозначение, которое служит для разделения базы телефонных номеров между операторами связи и по географическому признаку. Также префикс называют DEF-кодом. Именно по нему проводят проверку принадлежности номера к определенному оператору.
В нашей стране все мобильные операторы имеют префиксы от 900 до 999. Существуют общеизвестные префиксы, например, практически все знают, что 926 — это «Мегафон» Москвы, 916 — МТС Москвы, а 999 — Yota. У «Билайна» региональные привязки не такие четкие, однако префиксы 903, 905, 960 хорошо узнаваемы.
Расскажем подробнее, под какими кодами работают крупнейшие сотовые операторы России — это всем известная «большая тройка», а также примыкающие к ней Tele2 и Yota.
Определить оператора МТС легко по номерам с префиксом в диапазоне от 910 до 919 — такие номера у давно зарегистрировавшихся абонентов. Новые абоненты МТС имеют коды 901, 902,904, 908, 950, 978, и от 980 до 989.
С региональными привязками у этого оператора довольная четкая система:
Билайн
Оператор «Билайн» работает под известными кодами 903-909 (давно зарегистрированные абоненты), а диапазон 900, 902, 950, 951, 953, 980, 983, 986, и от 960 до 969 отдан зарегистрированным в последние 3-5 лет абонентам. У этого оператора нет строгой привязки def-кодов к регионам, они работают во всех регионах, поэтому определить только по трем цифрам, откуда звонят, не всегда возможно.
МегаФон
Этому оператору принадлежит целых 25 префиксов. Самые «старые» из них относятся к диапазону от 920 до 928, а более новые — от 929 до 939. Также используются коды 902, 904, 908, 950, 951, и 999.
Самые популярные префиксы оператора:
Tele2
Один из самых молодых и перспективных российских операторов связи работает с кодами 900, 901, 902, 908, 953, 958 (для всех регионов), 904, 950, 951, 952, 991, 992, 993-996, и 999. Легко определить абонента Теле2 из Москвы по коду 977, а для Санкт-Петербурга отведен код 991.
Этого оператора распознать легче всего — во всех регионах абоненты имеют префикс 999. Но будьте внимательны, эти же цифры может использовать абоненты и других операторов. Также виртуальный оператор использует для новых номеров префиксы 958, 991, 995, и 996.
Где проверить номер сотового телефона
Как вы уже поняли, по префиксу не всегда можно точно определить сотового оператора, как и регион покупки сим-карты не получается узнать по этим 3-м цифрам.
Но если есть полный номер телефона, можно проверить, откуда вам звонили или писали. Для этого существует масса ресурсов и сайтов, где достаточно ввести номер телефона, и система выдаст вам компанию, управляющую номером, а также региональную привязку.
Проверки всегда бесплатны, так как эта информация носит общедоступный характер, но не все сайты для проверки надежны. Так как люди часто пытаются узнать оператора по телефону, эти сайты содержат много рекламы, а еще там можно подхватить вирус. Поэтому используйте их осторожно.
Есть безопасный сайт Центрального научно-исследовательского института связи (легко найти в поисковых системах). Здесь также есть страница для https://zniis.ru/bdpn/check для проверки номера на принадлежность оператору. А еще это учреждение занимается администрированием базы данных перенесённых абонентских номеров, то есть учитывает всех, кто перешел от одного оператора к другому с сохранением номера.
Это интересно — статистика переходов
По данным Министерства связи и массовых коммуникаций, на конец 2016 года технологией MNP воспользовались 4,744 млн человек. Причем от “Мегафона” ушло больше всего абонентов (1,466 млн), следом идет МТС (1,344 млн), “Билайн” (947 тыс.) и Tele2 (458 тыс.). Довольно внушительное количество абонентов (860 тыс.) покинуло небольших операторов “Скартел”, “Мотив”, “Скайлинк” и прочих.
Специалисты считают, что показатели оттока характеризуют деятельность операторов, так как уходят к другим не от хорошей жизни. Но еще интереснее приток абонентов — это уже показатель хорошей тарифной политики и эффективной рекламной кампании.
Приток на начало 2017 года был таким:
Более свежей статистики с разделение по операторам нет. Однако отмечается, что услуга становится все востребованнее. Так, уже в прошлом году была преодолена отметка в 10 миллионов перенесенных номеров, а на сегодня уже воспользовались сервисом более 14 миллионов пользователей.
Самая свежая статистика по перенесенным номерам (из-за которых теперь и невозможно точно установить оператора связи по номеру телефона) приведена на сайте ФГУП ЦНИИС (Центрального научно-исследовательского института связи”).
По состоянию на октябрь, 2019 года, подано 29,3 млн заявок на перенос номера, из них уже выполнен перенос 14,1 млн номеров. Ежедневно операторы регистрируют порядка 20-40 тысяч новых заявок на перенос номера.
Неудивительно, что при таких масштабах переноса уже очень трудно самостоятельно узнать принадлежность номера. Приходится проверять на различных сайтах и в базах данных.
Кстати, при проверке номера важно знать наименования юридических лиц операторов. Если при поиске оператора по номеру мобильного телефона выйдет результат ПАО “Вымпелком”, это всем известный желто-черный оператор “Билайн”. А ПАО “Мобильные телесистемы”, как нетрудно догадаться, это оператор МТС. И только с “Мегафоном” не возникнет трудностей идентификации, ведь бренд и наименование юридического лица совпадают.
Трудности определения
С 2014 года отменили так называемое “мобильное рабство”, то есть абоненты получили возможность переходить от одного оператора к другому с сохранением номера и тем самым выбирать для себя лучшие условия без потери мобильного номера.
Во всем мире эта технология носит название MNP — mobile Number portability. C одной стороны, абоненты получили свободу выбора оператора и тарифов, с другой стороны, такой переход приводит к некоторым неудобствам.
Во-первых, системы тарифов операторов претерпели изменения, ведь потеряли смысл дешевые звонки внутри сети — как узнать, у каких абонентов из списка контактов настоящий “Мегафон” или МТС? Ведь даже если у них префиксы 927 или 917, они могли перейти к другим операторам по MNP.
Проверять каждый контакт на специальных сайтах и площадках? Сервисы хоть и бесплатные, но отнимают много времени. Вот почему сотовые провайдеры ввели в тарифах пакеты минут, которые одинаково расходуются на любых операторов.
Во-вторых, стало невозможно идентифицировать “на глазок” звонящего — цифры префикса потеряли точную привязку к оператору и субъекту РФ. Но этот фактор не будет решающим, так как вся тарифная политика теперь направлена на отмену определения абонента по признаку “свой-чужой”.
Резюме
Для установления принадлежности номера к тому или иному оператору служит префикс — три цифры после международного кода +7. Префикс позволяет определить наименование оператора и регион регистрации сим-карты.
Однако после того, как в России была введена технология смены оператора с сохранением номера, система идентификации потеряла четкость. Уже более 14 миллионов человек поменяли оператора, оставшись на старых номерах с известными префиксами. Теперь для установления оператора номер нужно проверять на сайте ФГУП ЦНИИС.
Рекомендуем выбирать тариф с большим пакетом минут, и тогда для вас не будет иметь значения, на номер какого оператора вы звоните.
Как определить мобильного оператора и домашний регион по номеру телефона
Когда мы пытаемся определить какому оператору принадлежит номер телефона, то обычно смотрим на его DEF код. Например, если номер начинается на 916, то это МТС, на 968 – Билайн, 926 – Мегафон (все зависит от вашего региона). Но этот метод очень условный и совершенно не подходит когда нужны точные данные. В реальности все сложнее: DEF коды часто делят между собой несколько операторов, и совсем необязательно, что искомый номер относится к операторам большой четверки. Ну и наконец, номер можно просто портировать.
В статье я расскажу о том, как по номеру телефона достоверно определить мобильного оператора который его обслуживает, а также получить дополнительную, «бесплатную» информацию – домашний регион абонента. Использовать эти данные можно как угодно, начиная от предзаполнения адреса в анкете пользователя и перенаправления на региональную версию вашего сервиса, до использования этих данных в процессинге и статистике. В конце статьи будет ссылка на github с исходниками.
Сразу оговорюсь, что домашний регион абонента, по большому счету, никак не связан с текущим месторасположением пользователя, т.е. определяемый регион отвечает на вопрос «Откуда номер?», а не «Где пользователь?».
Источники данных
Россвязь
Свой номер телефона мы получаем когда заключаем договор на обслуживание с оператором связи. В свою очередь, распределением диапазонов номеров между операторами связи, а также стандартизацией и общим контролем за услугами связи занимаются соответствующие государственные и международные организации. В России такой организацией является Федеральное агентство связи (Россвязь).
Таким образом, самым надежным источником информации кто обслуживает российский номер телефона является Россвязь, причем это открытые данные, которые агентство публикует у себя на сайте: www.rossvyaz.ru/opendata. Свежий список диапазонов мобильных номеров находится в CSV по ссылке. Каждая строка в файле выглядит как:
DEF-код, начало диапазона, конец диапазона, название оператора, название региона
Однако, с 2013 года появилась возможность переносить номер от оператора к оператору. Значит, руководствуясь только реестрами Россвязи, нельзя однозначно сказать, что номер обслуживается определенным оператором. Зато это вполне можно сказать про регион, ведь переносимость номера работает только в рамках домашнего региона и перенести номер из МТС Новосибирск в Tele2 Санкт-Петербург не получится в принципе.
Таким образом, если по задаче нужно определить только регион пользователя, то реестров Россвязи будет достаточно.
База Данных Перенесенных Номеров
Структура этой базы крайне проста: это три CSV файла в которых в формате «номер, название оператора» перечислены:
Суммируя: у нас есть некие диапазоны номеров, которые соответствуют определенным операторам и регионам (Россвязь), и список номеров-исключений из этих диапазонов (БДПН), который распространяется только на название оператора.
Как определять абонентов
Самое очевидное решение этой задачи: посмотреть на слово «диапазон» и использовать перечисленные емкости буквально. Т.е. для определения номера, сортируем всех операторов по их диапазонам и ищем запись, которая относится к минимальному диапазону, в который попадает конкретный номер. Сложность этого алгоритма будет как у бинарного поиска, что довольно неплохо.
Но есть более оригинальный и универсальный способ реализации, сложность которого – константа, независимо от размера данных. Этот метод предполагает использование масок номеров.
Маска номера
Маска номера – это строка состоящая из цифр и спецсимвола со значением «wildcard одиночного символа» («?»), который говорит, что на его месте может быть любая цифра. Причем после знака вопроса может стоять только знак вопроса.
Таким образом, один из диапазонов Билайн в Москве «79031000000 – 79031999999», в виде маски будет записан как «79031. ».
С такими масками очень удобно работать, например, задавать их вручную в конфигурации. Кроме того, представление диапазонов в виде масок дает возможность использовать более эффективные методы хранения и простые алгоритмы поиска.
Хеш-таблица
Например, один из таких алгоритмов это хранение соответствий «маска-оператор» в хеш-таблице (или любом другом key-value хранилище). Суть алгоритма в следующем: все подобные маски складываются в хеш-таблицу, где они являются ключами. Значениями в таблице являются объекты-операторы с регионами.
Работу поиска нагляднее всего объяснить на примере. Скажем, мы ищем информацию по номеру: 7(903)100-1234, и у нас есть маска 79031. – Билайн, Москва.
Сперва ищем в таблице запись по ключу в точности как исходный номер: 79031001234.
Если не найдено, то меняем последнюю цифру номера на «?» и ищем по ключу 7903100123?.
Если опять ничего не нашли, то снова меняем последнюю цифру на «?» и ищем по 790310012. и так далее.
В конце концов мы сделаем поиск по ключу 79031. и обнаружим, что номер относится к оператору Билайн, Москва.
Видно, что в данном случае сложность алгоритма равна сложности нескольких взятий из хеш-таблицы, что при правильной реализации обычно равно константе. Сложность поиска в таком дереве зависит от длины телефонных номеров, которая по рекомендации ITU-T E.164 не превышает 15 символов.
Этот же алгоритм можно применить и к портированным номерам – их можно просто добавить в ту же самую хеш-таблицу.
Префиксное дерево
Гораздо более эффективный по производительности метод – построение префиксного дерева из масок, который будет опираться на то, что номера состоят из цифр. Каждая нода этого дерева сможет иметь до 10 цифровых нод-потомков (0-9) и одной wildcard-ноды. Wildcard-нода может иметь только wildcard-потомков. При добавлении очередной маски в дерево, каждый символ маски последовательно превратится в ноду. Таким образом, фактически мы представляем все имеющиеся у нас маски в виде одного дерева.
Например, дерево состоящее из масок: 7913? – Mno1 791?? – Mno3 7952 – Mno2 7953 – Mno3 795? – Mno1 будет иметь вид, как на картинке (перечисленные маски в дереве идут слева направо). |
Алгоритм поиска в дереве, думаю, уже понятен: берем по порядку каждую цифру из искомого номера и последовательно спускаемся по дереву начиная с корня. В первую очередь спускаемся по цифровым нодам, если цифровых нод нет, то смотрим есть ли «?»-нода. Если есть, то в конечном итоге проверяем длину маски, и если она соответствует номеру, то оператор найден.
Заключение
В зависимости от ограничений, можно комбинировать эти подходы и разделять хранилища перенесенных номеров и масок Россвязи. Например, по памяти выгоднее для портированных номеров использовать подход с хеш-таблицей, а для реестров Россвязи всегда выгоднее использовать дерево масок. При поиске сначала смотреть в таблице, а если в ней ничего не найдено, то искать в дереве. Разделение хранилищ в первую очередь удобно для их автообновления, т.е. если изменилась БДПН (а она меняется постоянно), то совсем необязательно перечитывать диапазоны Россвязи.
Для максимальной производительности можно хранить всю информацию прямо в оперативной памяти. В моей реализации на Java, дерево масок Россвязи занимает не более 20-30Мб, хеш-таблица с масками портированных номеров: около 500-600 Мб. Если же портированные номера хранить в префиксном дереве, то из-за того, что ноды дерева получаются очень разреженные, памяти потребуется примерно в 1.5 раза больше. Но зато, это дает достаточно весомый прирост производительности.