Издательский дом ООО "Гейм Лэнд"СПЕЦВЫПУСК ЖУРНАЛА ХАКЕР #56, ИЮЛЬ 2005 г.

Телефонодобывающий комбайн

Tony (tony@MadTanks.com)

Спецвыпуск: Хакер, номер #056, стр. 056-060-2


Алгоритм поиска

Теперь абстрагируемся от того, где искать номера телефонов, и будем считать, что у нас на диске уже лежит куча файлов, в которых записаны номера телефонов. Более того, чтобы не путать мух с котлетами, будем считать, что на вход нашему алгоритму попадает массив, в котором лежит содержимое файла. Первый шаг, который нам предстоит сделать - это найти в массиве места, где могут встречаться ключевые символы "8" или "+7". Код, который выполняет эту работу, смотри в листинге "Поиск ключевых символов".

Далее необходимо анализировать найденный кусок массива, длина которого составляет 32 байта и в котором через разделители записан номер. Почему я сделал такое допущение? В номере телефона всего 11 цифр, и вряд ли каждая цифра отделяется от соседних цифр большим количеством разделителей. Теперь мы должны вытащить из этих 32-х байтов десять цифр, идущих сразу после ключевых символов. Все остальные цифры игнорируются. Если найдено десять цифр, то это номер телефона, который нужно занести в предварительный список. Соответствующий код найдешь в листинге "Анализ строки, содержащей номер телефона". Анализ заключается в разделении строки на токены – куски текста, между которыми записаны разделители. Если в строке записан действительно телефонный номер, то токен будет состоять исключительно из цифр. Эти два шага (поиск и анализ) составляют первичный поиск номеров телефонов, или первичный фильтр.

После отработки этих шагов мы имеем громадный список телефонов операторов сотовой связи, междугородних стационарных телефонов, нестандартных номеров с количеством цифр, не равным 11-ти. И тут нужна вторичная фильтрация номеров: отбросить все номера, в которых больше или меньше 11-ти цифр, и простые междугородние телефоны. Если с нестандартными телефонами все понятно, то как нам определить, является номер мобильным телефоном или нет? Все очень просто: первые три цифры после ключевых символов являются кодом операторов мобильной связи. Количество кодов ограниченно, и их можно найти здесь: http://mobilephone.pochta.ru/pages/def.htm.

Назад на стр. 056-060-1  Содержание  Вперед на стр. 056-060-3