О проекте
FakerRussia — программная библиотека для генерации реалистичных персональных данных, адаптированных к российской специфике. Предназначена для тестирования программного обеспечения, наполнения баз данных тестовыми наборами информации, создания демонстрационных стендов, проведения нагрузочных испытаний, а также для любых иных сценариев, требующих наличия правдоподобных персональных данных, соответствующих российским реалиям.
Библиотека обеспечивает генерацию комплексного профиля человека, включающего биографические сведения, адресные данные, контактную информацию, документальные данные, финансовые показатели, сведения о трудовой деятельности, транспортные данные и семейное положение. Все генерируемые характеристики находятся в логической взаимосвязи друг с другом, что обеспечивает высокую степень реалистичности итогового результата.
Возможности
ФИО с учётом пола, возраст 1-110 лет, дата рождения, антропометрия, знак зодиака, поколение, группа крови, религия, телосложение, цвет глаз/волос, образование, здоровье, прививки, военная категория, ФИО родителей
Регион РФ, город, улица, полный адрес регистрации с индексом, фактический адрес, тип жилья
Телефон с кодом города, мобильный оператор, email, соцсети (1-15), IPv4/IPv6, игровая платформа
ИНН (12 цифр с контр. суммой), СНИЛС, паспортные данные, дата выдачи, код подразделения, ЕНП (алгоритм Луна), административные нарушения
БИК, количество карт (0-5), номера карт (Luhn), CVV, зарплата, типы карт, сроки действия, ИНН/КПП банков, банкротство
Должность, стаж, уровень квалификации, место работы, заболевания, вредные привычки, хобби, уровень английского, дата начала работы, график
Марка/модель, госномер (формат Б000ББ 00), состояние, цвет, год выпуска, технические характеристики
Семейный статус, ФИО супруга, возраст супруга, дата брака, стаж брака, количество детей, имена детей, проживание с родителями
Быстрый старт
generate_person()
from russiafaker import FakerRussia
# Создание генератора
faker = FakerRussia()
# Генерация человека с удобным доступом ко всем данным
person = faker.generate_person()
# Прямой доступ к любым данным
print(f"Клиент: {person.full_name}, {person.age} лет")
print(f"Телефон: {person.phone}")
print(f"Email: {person.email}")
print(f"Адрес: {person.registration_address}")
print(f"Работа: {person.job}, зарплата: {person.salary} руб.")
print(f"Автомобиль: {person.car} {person.car_year} года")
print(f"Семейный статус: {person.marital_status}, детей: {person.children_count}")
# Краткое строковое представление
print(person)
# Сохранение в словарь (для JSON, баз данных)
person_dict = person.to_dict()
Указание пола
# Генерация данных для мужчины
male_faker = FakerRussia(my_gender="мужской")
male_person = male_faker.generate_person()
# Генерация данных для женщины
female_faker = FakerRussia(my_gender="женский")
female_person = female_faker.generate_person()
Требования к окружению
| Компонент | Требование |
|---|---|
| Python | Версия 3.8 и выше |
| Операционная система | Windows, Linux, macOS |
| Зависимости | Отсутствуют (только стандартная библиотека) |
Установка
Через PyPI (рекомендуемый способ)
pip install russiafaker==2.0.0
Ссылка на PyPI: https://pypi.org/project/russiafaker/2.0.0/
Из исходных кодов
git clone https://github.com/waratecs123/FakerRussia.git
cd FakerRussia
pip install .
Руководство по использованию
Импорт и инициализация
from russiafaker import FakerRussia
generator = FakerRussia()
Получение полного профиля
person = generator.generate_person()
print(person) # Краткая информация
print(generator) # Полный вывод всех данных
Доступ к отдельным категориям
| Атрибут | Класс | Описание |
|---|---|---|
.bio | BioGenerator | Биографические данные |
.address | AddressGenerator | Адресные данные |
.contact | ContactGenerator | Контактные данные |
.document | DocumentGenerator | Документальные данные |
.finance | FinanceGenerator | Финансовые данные |
.work | WorkGenerator | Рабочие данные |
.vehicle | VehicleGenerator | Транспортные данные |
.family | FamilyGenerator | Семейные данные |
Примеры доступа к данным
person = generator.generate_person()
# Через объект PersonData
print(person.full_name) # ФИО
print(person.age) # Возраст
print(person.phone) # Телефон
print(person.city) # Город
print(person.salary) # Зарплата
print(person.car) # Автомобиль
# Через прямые генераторы
print(generator.bio.full_name)
print(generator.address.city)
Сброс данных
generator.reset() # Полная перегенерация всех данных
Класс PersonData
При использовании метода generate_person() возвращается объект PersonData со следующими атрибутами:
Основные атрибуты
| Категория | Атрибуты |
|---|---|
| Биография | .full_name, .name, .surname, .patronymic, .gender, .age, .birth_date, .nationality, .height, .weight, .body_mass_index, .zodiac_sign, .generation, .blood_type, .religion, .body_type, .eye_color, .hair_color, .education_level, .shoe_size, .vision, .hearing_status, .disability_group, .pulse, .vaccinations, .military_fitness_category, .father_full_name, .mother_full_name |
| Адрес | .region, .city, .street, .registration_address, .actual_address, .housing_type |
| Контакты | .phone, .mobile_operator, .phone_model, .email, .social_networks, .ipv4, .ipv6, .gaming_platform |
| Документы | .inn, .snils, .passport, .passport_issue_date, .passport_unit_code, .enp, .administrative_violations |
| Работа | .is_employed, .job, .work_experience, .job_start_date, .level_work, .place_work, .diseases, .bad_habits, .hobby, .english_level, .work_schedule |
| Финансы | .bik, .number_cards, .banks, .bank_inn, .bank_kpp, .bank_cards, .cvv_cvc, .card_types, .card_validity, .salary, .bankruptcy |
| Транспорт | .has_car, .car, .car_body_type, .car_engine_type, .car_engine_capacity, .car_transmission, .car_drive, .car_engine_power, .car_reg_number, .car_condition, .car_color, .car_year |
| Семья | .marital_status, .spouse_full_name, .spouse_age, .marriage_date, .years_marriage, .children_count, .children_names, .living_with_parents, .family_members_count |
Методы
| Метод | Возвращает | Описание |
|---|---|---|
.to_dict() | dict | Преобразование всех данных в словарь |
__str__() | str | Краткое представление человека |
Примеры сгенерированных данных
Краткий вывод (print(person))
Иванов Иван Иванович, 34 лет, male
Проживает: Москва, 101000, Московская область - Город Москва - Тверская д. 25 корп. 3
Работа: Программист, зарплата: 150000 руб.
Семейный статус: Женат, детей: 2
Биографические данные
ФИО: Иванов Иван Иванович
Год рождения: 15.05.1990
Возраст: 34
Пол: male
ФИО отца: Иванов Иван Петрович
ФИО матери: Иванова (девичья фамилия - Петрова) Мария Ивановна
Национальность: Русский
Рост: 178
Вес: 82
Индекс массы тела: 25.87
Знак зодиака: Телец
Поколение: Миллениалы
Группа крови: A (II) Rh+
Религия: Православие
Телосложение: Нормальное
Цвет глаз: Карие
Цвет волос: Русые
Образование: Высшее
Средний балл школьного аттестата: 4.32
Размер обуви: 43
Зрение: -2.5
Уровень слуха: Нормальный
Инвалидность: Отсутствует
Пульс в покое: 72
Прививки: Гепатит B, Корь, Грипп
Военная категория годности: Б
Финансовые данные
БИК: 044525974
Количество карт: 2
Банки: Сбербанк, Тинькофф
Номера карт: 4276123456789012, 5213245678901234
CVV/CVC: 123, 456
Зарплата: 85000
Банкротство: False
Алгоритмы генерации
| Элемент | Алгоритм |
|---|---|
| ИНН | 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% | Вероятность отсутствия повреждений |
Расширение функциональности
Для создания собственного генератора необходимо унаследоваться от BaseGenerator:
import random
from russiafaker.b_h__base_generator import BaseGenerator
from russiafaker.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 "Данные сброшены"