Как сгенерировать номера телефонов по DEF-кодам — полное руководство
Что такое DEF-коды и как они работают
Представьте: вам нужна база номеров конкретного оператора — например, все номера МТС в Московском регионе. Парсить их из интернета долго и ненадёжно. Проще сгенерировать самостоятельно.
DEF-код (иногда говорят ABC-DEF, но для простоты используют только DEF) — это трёхзначный код оператора в российском мобильном номере. Он идёт сразу после семёрки:
Структура номера: 7 [DEF] [XXXXXXX]
7— код страны (Россия)DEF— три цифры, определяющие оператора и регион (например, 916, 926, 999)XXXXXXX— семь цифр абонентского номера (от 0000000 до 9999999)
Каждому оператору присвоены определённые DEF-коды. Например:
- МТС: 910—919, 980—989
- Мегафон: 920—939
- Билайн: 900—909, 950—953, 960—969
- Теле2: 950—953 (часть), 960—969 (часть)
Зная DEF-код, вы можете сгенерировать все возможные номера этого оператора — или любой диапазон из них.
Зачем генерировать номера по DEF-кодам
Генерация номеров — легальная и полезная операция в нескольких сценариях:
- Тестирование систем — нужна база из миллиона тестовых номеров для нагрузочного тестирования
- Исследование рынка — хотите узнать, сколько номеров у конкретного оператора
- Аналитика покрытия — проверяете, какие диапазоны активны, а какие зарезервированы
- Валидация данных — создаёте справочник для проверки корректности номеров
Важно: генерация номеров сама по себе легальна, но использование для нежелательных рассылок или мошенничества — нет. Всегда соблюдайте законы о персональных данных и не спамьте.
Как устроены DEF-коды в России
Российские мобильные коды имеют чёткую структуру. Все мобильные номера начинаются с 79 (код страны + признак мобильного), дальше идёт двузначный код оператора (XX), и замыкает трёхзначный DEF третья цифра (Y):
7 9 [XX] [Y] [XXXXXXX]
Для простоты три цифры после девятки (XXY) называют DEF-кодом.
Примеры распределения DEF-кодов
| Оператор | DEF-коды | Примеры номеров |
|---|---|---|
| МТС | 910—919, 980—989 | 79161234567, 79851234567 |
| Мегафон | 920—929, 930—939 | 79201234567, 79351234567 |
| Билайн | 900—909, 960—969 | 79051234567, 79681234567 |
| Теле2 | 950—953, 958—959, 970—979 | 79511234567, 79771234567 |
| Yota | 955, 999 | 79551234567, 79991234567 |
Важно понимать: один DEF-код может содержать 10 миллионов номеров (от 0000000 до 9999999 в последних семи цифрах). На практике не все комбинации активны — часть зарезервирована, часть не выдана.
Excel-формулы для маленьких диапазонов
Подходит для: маленьких диапазонов (до 10 тысяч номеров)
Время: 10 минут
Сложность: низкая
Excel умеет генерировать последовательности. Создадим столбец номеров для DEF-кода 916 (МТС Москва):
- В ячейке A1 напишите начальный номер:
79160000000 - В ячейке A2 формула:
=A1+1 - Протащите формулу вниз на нужное количество строк
Получите последовательность:
79160000000
79160000001
79160000002
...
79160009999
Ограничения:
- Excel начинает тормозить после 50—100 тысяч строк
- Нельзя сгенерировать несколько DEF-кодов сразу
- Номера идут по порядку (не перемешаны)
Для быстрого прототипа на десятке тысяч номеров — подойдёт. Для серьёзной работы — нет.
Python-скрипт для любых объёмов
Подходит для: любых объёмов
Время: 15 минут на написание
Сложность: средняя (нужно знать Python)
Python справляется с генерацией миллионов номеров за секунды:
import random
def generate_numbers(def_code, start, end):
"""
Генерирует номера для заданного DEF-кода.
def_code: трёхзначный код оператора (например, 916)
start: начало диапазона последних 7 цифр (например, 0)
end: конец диапазона (например, 9999999)
"""
numbers = []
for i in range(start, end + 1):
# Формируем номер: 7 + DEF + 7-значный номер
phone = f"7{def_code}{i:07d}"
numbers.append(phone)
# Перемешиваем для случайности
random.shuffle(numbers)
return numbers
# Пример: генерируем первые 10 000 номеров для МТС (916)
phones = generate_numbers('916', 0, 9999)
# Сохраняем в файл
with open('phones_mts_916.csv', 'w') as f:
for phone in phones:
f.write(phone + '\n')
print(f'Сгенерировано: {len(phones):,} номеров'.replace(',', ' '))
Этот скрипт:
- Генерирует все номера в указанном диапазоне
- Перемешивает их (Fisher-Yates shuffle)
- Сохраняет в CSV
Для нескольких DEF-кодов:
def_codes = ['916', '926', '999'] # МТС Москва, МТС Питер, Yota
all_phones = []
for code in def_codes:
all_phones.extend(generate_numbers(code, 0, 999999)) # По 1 млн на код
random.shuffle(all_phones)
with open('phones_multiple_def.csv', 'w') as f:
for phone in all_phones:
f.write(phone + '\n')
Ограничения:
- Большие диапазоны (10+ млн) могут упереться в память
- Нужно писать код вручную
Basalt — генератор с интерфейсом
Подходит для: любых объёмов, без программирования
Время: 2 минуты
Сложность: нулевая
Basalt предоставляет удобный интерфейс для генерации номеров по DEF-кодам.
Инструкция:
- Откройте функцию «Генерация номеров»
- Добавьте строки с параметрами:
- DEF-код: 916 (или другой)
- От: 0 (начало диапазона последних 7 цифр)
- До: 9999999 (конец диапазона)
- Можете добавить несколько строк для разных кодов (например, 916, 926, 999)
- Нажмите «Запустить»
Basalt автоматически:
- Генерирует все номера в указанных диапазонах
- Перемешивает их алгоритмом Fisher-Yates
- Упаковывает в ZIP-архив (если файл больше 100 МБ)
- Показывает прогресс-бар и статистику
Пример результата:
Сгенерировано: 10 000 000 номеров
Размер архива: 95 МБ
Время: 1 минута 23 секунды
Файл готов к использованию — просто распакуйте архив и получите CSV с номерами.
Почему Basalt быстрый
Программа использует несколько оптимизаций:
- Потоковая запись — номера записываются сразу в файл, не загружаясь целиком в память
- Эффективное перемешивание — Fisher-Yates работает за O(n) без дополнительной памяти
- Сжатие на лету — большие файлы упаковываются в ZIP с максимальной компрессией
Результат: генерация 10 миллионов номеров занимает меньше двух минут даже на слабом ноутбуке.
Валидность сгенерированных номеров
Важный вопрос: все ли сгенерированные номера реально существуют?
Короткий ответ: нет. Не все комбинации выданы абонентам.
Когда вы генерируете все номера для DEF-кода 916 (от 79160000000 до 79169999999), вы создаёте 10 миллионов комбинаций. На практике:
- Часть выдана абонентам — это рабочие номера
- Часть зарезервирована оператором — ещё не выдана, но может быть выдана в будущем
- Часть не используется — зарезервирована для служебных нужд или вообще не планируется к выдаче
По оценкам, у крупных операторов (МТС, Мегафон, Билайн) активны примерно 30—50% номеров из доступного диапазона. Это означает, что из 10 миллионов сгенерированных номеров реально работают 3—5 миллионов.
Как проверить активность?
Теоретически можно прозвонить каждый номер и проверить, отвечает ли абонент. На практике это:
- Долго (миллионы звонков)
- Дорого
- Может нарушать законы о спаме
Для большинства задач (тестирование, аналитика) неважно, активен ли номер — достаточно, что он корректно сформирован и принадлежит нужному оператору.
Правовые аспекты
Генерация телефонных номеров — не запрещена законом. Вы создаёте математические последовательности, а не получаете персональные данные.
Но:
- Нельзя использовать для спама — массовые нежелательные звонки и SMS нарушают законы о рекламе и персональных данных
- Нельзя продавать как «базы клиентов» — это обман, поскольку сгенерированные номера не содержат информации о владельцах
- Можно использовать для тестирования — генерация тестовых данных легальна
- Можно использовать для исследований — анализ структуры нумерации, покрытия операторов
В России действует закон «О персональных данных» (152-ФЗ). Телефонный номер считается персональными данными, только если он привязан к конкретному человеку. Сгенерированный номер без привязки к владельцу — не персональные данные.
Рекомендация: используйте сгенерированные базы ответственно. Для маркетинга лучше покупать легальные базы с согласиями на рассылку, а не генерировать номера.
Практические советы
1. Всегда перемешивайте
Номера, сгенерированные по порядку (79160000000, 79160000001...), выглядят подозрительно. Перемешивайте их перед использованием — так база кажется естественнее.
2. Генерируйте только нужные диапазоны
Не нужно генерировать все 10 миллионов номеров, если вам достаточно 100 тысяч. Укажите диапазон в последних семи цифрах:
- От
0до99999— 100 тысяч номеров - От
0до999999— 1 миллион - От
0до9999999— весь диапазон (10 млн)
3. Используйте ZIP для больших файлов
Файл с 10 миллионами номеров весит около 120 МБ в CSV. В ZIP он сжимается до 20—30 МБ. Basalt делает это автоматически, но если вы генерируете вручную — не забудьте упаковать.
4. Проверяйте актуальность DEF-кодов
Операторы иногда получают новые диапазоны или отдают старые. Перед генерацией проверьте, что DEF-код действительно принадлежит нужному оператору. Используйте справочники Роскомнадзора или операторов.
Генерация номеров — просто и быстро
Создание базы телефонных номеров по DEF-кодам — несложная задача, если знать структуру нумерации.
Что запомнить:
- DEF-код — три цифры после семёрки и девятки:
7 9 [DEF] [XXXXXXX] - Каждому оператору присвоены свои диапазоны DEF
- Один DEF-код может содержать до 10 миллионов номеров
- Не все сгенерированные номера активны (обычно 30—50%)
- Генерация легальна, но использование для спама — нет
Выбор инструмента:
- Для маленьких диапазонов (до 10 тыс.) — Excel
- Для автоматизации — Python-скрипт
- Для быстрой генерации без кода — Basalt
Главное — понимайте, зачем вам нужна база, и используйте её ответственно. Генерация для тестирования или анализа — отличная идея. Генерация для спама — плохая и незаконная.