Телефонодобывающий комбайн Tony (tony@MadTanks.com) Спецвыпуск: Хакер, номер #056, стр. 056-060-2 Алгоритм поиска Теперь абстрагируемся от того, где искать номера телефонов, и будем считать, что у нас на диске уже лежит куча файлов, в которых записаны номера телефонов. Более того, чтобы не путать мух с котлетами, будем считать, что на вход нашему алгоритму попадает массив, в котором лежит содержимое файла. Первый шаг, который нам предстоит сделать - это найти в массиве места, где могут встречаться ключевые символы "8" или "+7". Код, который выполняет эту работу, смотри в листинге "Поиск ключевых символов". Далее необходимо анализировать найденный кусок массива, длина которого составляет 32 байта и в котором через разделители записан номер. Почему я сделал такое допущение? В номере телефона всего 11 цифр, и вряд ли каждая цифра отделяется от соседних цифр большим количеством разделителей. Теперь мы должны вытащить из этих 32-х байтов десять цифр, идущих сразу после ключевых символов. Все остальные цифры игнорируются. Если найдено десять цифр, то это номер телефона, который нужно занести в предварительный список. Соответствующий код найдешь в листинге "Анализ строки, содержащей номер телефона". Анализ заключается в разделении строки на токены – куски текста, между которыми записаны разделители. Если в строке записан действительно телефонный номер, то токен будет состоять исключительно из цифр. Эти два шага (поиск и анализ) составляют первичный поиск номеров телефонов, или первичный фильтр. После отработки этих шагов мы имеем громадный список телефонов операторов сотовой связи, междугородних стационарных телефонов, нестандартных номеров с количеством цифр, не равным 11-ти. И тут нужна вторичная фильтрация номеров: отбросить все номера, в которых больше или меньше 11-ти цифр, и простые междугородние телефоны. Если с нестандартными телефонами все понятно, то как нам определить, является номер мобильным телефоном или нет? Все очень просто: первые три цифры после ключевых символов являются кодом операторов мобильной связи. Количество кодов ограниченно, и их можно найти здесь: http://mobilephone.pochta.ru/pages/def.htm. |