О проекте
FakerRussia — программная библиотека для генерации реалистичных персональных данных, адаптированных к российской специфике. Предназначена для тестирования программного обеспечения, наполнения баз данных тестовыми наборами информации, создания демонстрационных стендов, проведения нагрузочных испытаний, а также для любых иных сценариев, требующих наличия правдоподобных персональных данных, соответствующих российским реалиям.
Библиотека обеспечивает генерацию комплексного профиля человека, включающего биографические сведения, адресные данные, контактную информацию, документальные данные, финансовые показатели, сведения о трудовой деятельности, транспортные данные и семейное положение. Все генерируемые характеристики находятся в логической взаимосвязи друг с другом, что обеспечивает высокую степень реалистичности итогового результата.
Возможности
ФИО с учётом пола, возраст 1-110 лет, дата рождения, антропометрия, знак зодиака, поколение, группа крови, религия, телосложение, цвет глаз/волос, образование, размер обуви, здоровье, инвалидность, прививки, военная категория
Регион РФ, город, улица, полный адрес регистрации с индексом, фактический адрес, тип жилья
Телефон с кодом города, мобильный оператор, модель телефона, email, соцсети (1-15), IPv4/IPv6, игровая платформа
ИНН (12 цифр с контр. суммой), СНИЛС, паспортные данные, дата выдачи паспорта, код подразделения, ЕНП (алгоритм Луна), административные нарушения
БИК, количество карт (0-5), номера карт (Luhn), CVV, зарплата, типы карт, сроки действия, ИНН/КПП банков, банкротство
Должность, стаж, уровень квалификации, место работы, заболевания, вредные привычки, хобби, уровень английского, дата начала работы, график
Марка/модель, госномер (формат Б000ББ 00), состояние, цвет, год выпуска, технические характеристики
Семейный статус, ФИО супруга, возраст супруга, дата брака, стаж брака, количество детей, имена детей, проживание с родителями
Требования к окружению
| Компонент | Требование |
|---|---|
| Python | Версия 3.8 и выше |
| Операционная система | Windows, Linux, macOS (платформонезависимость) |
| Зависимости | Отсутствуют, используется только стандартная библиотека Python |
Установка
git clone https://github.com/waratecs123/FakerRussia.git
cd FakerRussia
pip install .
Все данные встроены в пакет (регионы, города, улицы, имена, банки, болезни). Дополнительных зависимостей не требуется.
Архитектура проекта
FakerRussia/
├── __init__.py # Точка входа, класс FakerRussia
├── b_a__address_generator.py # Генерация адресных данных
├── b_b__bio_generator.py # Генерация биографических данных
├── b_c__contact_generator.py # Генерация контактных данных
├── b_d__document_generator.py # Генерация документальных данных
├── b_e__finance_generator.py # Генерация финансовых данных
├── b_f__work_generator.py # Генерация рабочих данных
├── b_g__vehicle_generator.py # Генерация транспортных данных
├── b_h__base_generator.py # Базовый класс для всех генераторов
├── b_i__family_generator.py # Генерация семейных данных
├── a__data/ # Директория исходных данных (JSON)
└── b__additional_algorithms/ # Вспомогательные алгоритмы
Диаграмма зависимостей модулей
FakerRussia (главный класс)
│
├── BioGenerator
├── AddressGenerator
├── WorkGenerator ───────────────► BioGenerator
├── ContactGenerator ────────────► BioGenerator, AddressGenerator
├── VehicleGenerator ────────────► BioGenerator, AddressGenerator
├── DocumentGenerator ───────────► BioGenerator, AddressGenerator, VehicleGenerator
├── FinanceGenerator ────────────► BioGenerator, AddressGenerator, DocumentGenerator, WorkGenerator
└── FamilyGenerator ─────────────► BioGenerator, FinanceGenerator
Руководство по использованию
Инициализация генератора
from FakerRussia import FakerRussia
generator = FakerRussia()
Указание пола
male_generator = FakerRussia(my_gender="мужской")
female_generator = FakerRussia(my_gender="женский")
Получение полного профиля
generator = FakerRussia()
print(generator)
Доступ к категориям данных
| Атрибут | Класс | Описание |
|---|---|---|
.bio | BioGenerator | Биографические данные |
.address | AddressGenerator | Адресные данные |
.contact | ContactGenerator | Контактные данные |
.document | DocumentGenerator | Документальные данные |
.finance | FinanceGenerator | Финансовые данные |
.work | WorkGenerator | Рабочие данные |
.vehicle | VehicleGenerator | Транспортные данные |
.family | FamilyGenerator | Семейные данные |
Работа со списковыми значениями
generator = FakerRussia()
# Возвращает список Python
vaccinations_list = generator.bio.vaccinations()
# Возвращает строку с элементами через запятую
vaccinations_str = generator.bio.vaccinations(visualization=True)
Сброс данных
generator.reset() # Полная перегенерация всех данных
Генераторы (полный API)
BioGenerator
| Свойство / метод | Тип | Описание |
|---|---|---|
.full_name | str | Полное ФИО |
.gender | str | male / female |
.age | int | Возраст 1-110 лет |
.year | str | Дата рождения (ДД.ММ.ГГГГ) |
.name, .surname, .patronymic | str | Компоненты ФИО |
.father_name | str | Имя отца |
.full_name_father | str | ФИО отца |
.full_name_mother | str | ФИО матери с девичьей фамилией |
.height | int | Рост в см (возрастная норма) |
.weight | int | Вес в кг |
.body_mass_index | str | ИМТ |
.zodiac_sign | str | Знак зодиака |
.generation | str | Поколение (бумер, зумер и др.) |
.blood_type | str | Группа крови с резусом |
.religion | str | Вероисповедание |
.body_type | str | Телосложение |
.eye_color, .hair_color | str | Цвет глаз и волос |
.education_level | str | Уровень образования |
.shoe_size | str | Размер обуви |
.vision | str | Зрение (±0.0 до 6.0) |
.hearing_status | str | Состояние слуха |
.disability_group | str | Группа инвалидности |
.pulse | int | Пульс в покое |
.vaccinations(visualization) | list/str | Список прививок |
.military_fitness_category | str | Военная категория годности |
.current_place_study | str | Место учёбы |
.average_score_certificate | str | Средний балл аттестата |
AddressGenerator
| Свойство | Описание |
|---|---|
.region | Название региона РФ |
.city | Город из выбранного региона |
.street | Улица в городе |
.registration_address | Полный адрес регистрации (индекс, регион, город, улица, дом, корпус) |
.actual_address | Фактический адрес (30% совпадает с регистрацией) |
.housing_type | Тип жилья (квартира, частный дом и др.) |
ContactGenerator
| Свойство / метод | Описание |
|---|---|
.phone | +7 (код города) XXX-XX-XX |
.mobile_operator | Мобильный оператор (МТС, Билайн, Мегафон и др.) |
.phone_model | Модель телефона |
.email | Email адрес |
.social_networks(visualization) | Список соцсетей и мессенджеров (1-15) |
.ipv4 | IPv4 адрес |
.ipv6 | IPv6 адрес |
.gaming_platform | Игровая платформа |
DocumentGenerator
| Свойство / метод | Описание |
|---|---|
.inn | 12-значный ИНН с контрольными цифрами |
.snils | СНИЛС формата XXX-XXX-XXX YY |
.passport_series_number | Серия и номер паспорта |
.date_issue | Дата выдачи паспорта (14, 20 или 45 лет) |
.unit_code | Код подразделения |
.enp | ЕНП полиса ОМС (16 цифр, алгоритм Луна) |
.administrative_violations(visualization) | Список административных нарушений |
FinanceGenerator
| Свойство / метод | Описание |
|---|---|
.bik | Банковский идентификационный код |
.number_cards | Количество карт (0-5) |
.bank(visualization) | Названия банков |
.bank_card(visualization) | Номера карт (алгоритм Луна) |
.cvv_cvc(visualization) | CVV/CVC коды |
.salary | Зарплата в рублях |
.card_type(visualization) | Типы карт (Debit/Credit) |
.validity_period(visualization) | Сроки действия MM/YY |
.inn_bank | ИНН банков |
.kpp_bank | КПП банков |
.bankruptcy | Статус банкротства (bool) |
WorkGenerator
| Свойство / метод | Описание |
|---|---|
.job | Должность или статус занятости |
.work_experience | Стаж в годах |
.level_work | Уровень квалификации |
.place_work | Место работы (компания или ИП) |
.diseases(visualization) | Список заболеваний |
.bad_habits(visualization) | Вредные привычки |
.hobby(visualization) | Хобби по возрастной группе |
.english_level | Уровень английского языка |
.job_start_date | Дата начала работы |
.work_schedule | Рабочий график |
.is_employed | Трудоустроен ли (bool) |
VehicleGenerator
| Свойство / метод | Описание |
|---|---|
.car | Марка и модель автомобиля |
.has_car | Наличие автомобиля (bool) |
.car_registration_number | Госномер (формат А123ББ 77) |
.car_body_type | Тип кузова |
.machine_engine_type | Тип двигателя |
.engine_capacity |
Объем двигателя (л) |
.transmission_type |
Тип трансмиссии |
.machine_drive |
Привод |
.engine_power |
Мощность (л.с.) |
.car_color |
Цвет автомобиля |
.car_year |
Год выпуска |
.car_condition_type(visualization) |
Список повреждений |
FamilyGenerator
| Свойство / метод | Описание |
|---|---|
.marital_status | Семейный статус |
.spouse_surname, .spouse_name, .spouse_patronymic | ФИО супруга по компонентам |
.spouse_full_name | Полное ФИО супруга(и) |
.spouse_age | Возраст супруга |
.marriage_date | Дата бракосочетания |
.years_marriage | Количество лет в браке |
.children_count | Количество детей |
.children_names(visualization) | Имена детей |
.living_with_parents | Проживание с родителями (bool) |
.family_members_count | Количество членов семьи |
Алгоритмы генерации
| Элемент | Алгоритм |
|---|---|
| ИНН | 12 цифр: первые 4 — префикс региона, 11-я и 12-я цифры — контрольные суммы по весовым коэффициентам |
| СНИЛС | 9 цифр + 2 контрольные, расчёт по сумме произведений с весами 9-1, остаток от деления на 101 |
| Номера карт | 16 цифр: префикс 6 цифр + 11 случайных + контрольная цифра по алгоритму Луна |
| ЕНП ОМС | 16 цифр с контрольной суммой Луна, первая цифра 2 |
| Дата выдачи паспорта | 14 лет (при возрасте 14-19), 20 лет (при возрасте 20-44), 45 лет (при возрасте 45+) |
| Зарплата | Определяется по должности и уровню квалификации из диапазонов в JSON |
| Количество детей | Стаж брака 1-5 лет → 1-3 ребенка, 6-15 лет → 4-6, более 15 лет → 1-10 |
Вероятностные механизмы
| Свойство | Вероятность | Описание |
|---|---|---|
| Фактический адрес | 30% | Совпадает с адресом регистрации |
| Наличие автомобиля | 50% | Для лиц старше 16 лет |
| Наличие банковских карт | 50% | Для лиц старше 18 лет |
| Наличие прививок | 70% | Вероятность наличия хотя бы одной прививки |
| Наличие вредных привычек | 50% | Для лиц старше 10 лет |
| Наличие инвалидности | 30% | Вероятность присвоения группы инвалидности |
| Идеальное состояние авто | 50% | Вероятность отсутствия повреждений |
| Проживание с родителями | 50% | При выполнении условий (возраст < 40, зарплата < 65000, отсутствие супруга) |
Примеры сгенерированных данных
Биографические данные
ФИО: Иванов Иван Иванович
Год рождения: 15.05.1990
Возраст: 34
Пол: male
ФИО отца: Иванов Иван Петрович
ФИО матери: Иванова (девичья фамилия - Петрова) Мария Ивановна
Национальность: Русский
Рост: 178
Вес: 82
Индекс массы тела: 25.87
Знак зодиака: Телец
Поколение: Миллениалы
Группа крови: A (II) Rh+
Религия: Православие
Телосложение: Нормальное
Цвет глаз: Карие
Цвет волос: Русые
Образование: Высшее
Средний балл школьного аттестата: 4.32
Размер обуви: 43
Зрение: -2.5
Уровень слуха: Нормальный
Инвалидность: Отсутствует
Пульс в покое: 72
Прививки: Гепатит B, Корь, Грипп
Военная категория годности: Б
Адресные данные
Регион: Московская область
Город: Москва
Улица: Тверская
Адрес регистрации: 101000, Московская область - Город Москва - Тверская д. 25 корп. 3
Фактический адрес: 101000, Московская область - Город Москва - Тверская д. 25 корп. 3
Тип жилья: Квартира
Финансовые данные
БИК: 044525974
Количество карт: 2
Банки: Сбербанк, Тинькофф
Номера карт: 4276123456789012, 5213245678901234
CVV/CVC: 123, 456
Зарплата: 85000
Банкротство: False
Расширение функциональности
Для создания собственного генератора необходимо унаследоваться от BaseGenerator:
import random
from FakerRussia.b_h__base_generator import BaseGenerator
from FakerRussia.b__additional_algorithms.a_a__handle_errors import handle_errors
class CustomGenerator(BaseGenerator):
def __init__(self):
super().__init__()
self._data = None
self._load_custom_data()
def _load_custom_data(self):
data = self._load_json('a__data/custom/custom_data.json')
self.CUSTOM_DATA = data.get("CUSTOM_DATA", [])
@property
@handle_errors
def custom_property(self) -> str:
if self._data is None:
self._data = random.choice(self.CUSTOM_DATA)
return self._data
def reset(self):
self._data = None
return "Данные сброшены"