Генератор ФИО, ИНН, СНИЛС и дат рождения

03.12.18

Разработка - Универсальные функции

Понадобилась мне обезличенная база биллинга на полтора миллиона лицевых счетов. Забивать существующие ФИО символом "Х" ("Иванов Иван Иванович" -> "Хххххх Хххх Хххххххх") было не интересно. Взял из существующей базы собрал мужские, женские фамилии, имена и отчества и написал генератор случайных ФИО. Также в обработке есть возможность генерировать ИНН физических лиц, СНИЛС и дат рождения.

Файлы

ВНИМАНИЕ: Файлы из Базы знаний - это исходный код разработки. Это примеры решения задач, шаблоны, заготовки, "строительные материалы" для учетной системы. Файлы ориентированы на специалистов 1С, которые могут разобраться в коде и оптимизировать программу для запуска в базе данных. Гарантии работоспособности нет. Возврата нет. Технической поддержки нет.

Наименование Скачано Купить файл
Генератор ФИО, ИНН, СНИЛС и дат рождения:
.epf 437,59Kb
28 2 500 руб. Купить

Подписка PRO — скачивайте любые файлы со скидкой до 85% из Базы знаний

Оформите подписку на компанию для решения рабочих задач

Оформить подписку и скачать решение со скидкой

Вы можете заказать платную доработку или адаптацию этой разработки под вашу конфигурацию на «Бирже заказов».

  • 0% комиссии — оплата напрямую исполнителю;
  • Исполнители любого масштаба — от отдельных специалистов до команд под проект;
  • Прямой обмен контактами между заказчиком и исполнителем;
  • Безопасная сделка — при необходимости;
  • Рейтинги, кейсы и прозрачная система откликов.

В обработке присутствует:

  • мужских фамилий: 40420
  • мужских имен: 7061
  • мужских отчеств: 10956
  • женских фамилий: 45830
  • женских имен: 7170
  • женских отчеств: 11170

Для чего может пригодиться данная обработка:

  • для тестовой базы при генерации новых записей физических лиц;
  • для превращения рабочей базы в демонстрационную;
  • для молодых родителей, которые не могут придумать имя будущему ребенку.

Код обработки очень простой:

&НаКлиенте
Процедура Сгенерировать(Команда)
	СгенерироватьНаСервере()
КонецПроцедуры

&НаСервере
Процедура СгенерироватьНаСервере()
	СлучайныеФИО.Очистить();

	МужскиеФамилии=ЗаполнитьИзМакета("МужскиеФамилии");
	МужскиеИмена=ЗаполнитьИзМакета("МужскиеИмена");
	МужскиеОтчества=ЗаполнитьИзМакета("МужскиеОтчества");
	ЖенскиеФамилии=ЗаполнитьИзМакета("ЖенскиеФамилии");
	ЖенскиеИмена=ЗаполнитьИзМакета("ЖенскиеИмена");
	ЖенскиеОтчества=ЗаполнитьИзМакета("ЖенскиеОтчества");

	КоличествоМужскихФамилий=МужскиеФамилии.Количество();
	КоличествоМужскихИмен=МужскиеИмена.Количество();
	КоличествоМужскихОтчеств=МужскиеОтчества.Количество();
	КоличествоЖенскийФамилий=ЖенскиеФамилии.Количество();
	КоличествоЖенскийИмен=ЖенскиеИмена.Количество();
	КоличествоЖенскийОтчеств=ЖенскиеОтчества.Количество();

	Множители11=СтрРазделить("0,7,2,4,10,3,5,9,4,6,8,0",",");
	Множители12=СтрРазделить("0,3,7,2,4,10,3,5,9,4,6,8",",");

	ГенераторСЧ=Новый ГенераторСлучайныхЧисел();
	Для Х=1 По Количество Цикл
		Если СгенерироватьПол="Мужской" Тогда
			Фамилия=МужскиеФамилии[ГенераторСЧ.СлучайноеЧисло(0,КоличествоМужскихФамилий-1)];
			Имя=МужскиеИмена[ГенераторСЧ.СлучайноеЧисло(0,КоличествоМужскихИмен-1)];
			Отчество=МужскиеОтчества[ГенераторСЧ.СлучайноеЧисло(0,КоличествоМужскихОтчеств-1)];
			Пол="мужской"
		ИначеЕсли СгенерироватьПол="Женский" Тогда
			Фамилия=ЖенскиеФамилии[ГенераторСЧ.СлучайноеЧисло(0,КоличествоЖенскийФамилий-1)];
			Имя=ЖенскиеИмена[ГенераторСЧ.СлучайноеЧисло(0,КоличествоЖенскийИмен-1)];
			Отчество=ЖенскиеОтчества[ГенераторСЧ.СлучайноеЧисло(0,КоличествоЖенскийОтчеств-1)];
			Пол="женский"
		ИначеЕсли ГенераторСЧ.СлучайноеЧисло(0,1) Тогда
			Фамилия=МужскиеФамилии[ГенераторСЧ.СлучайноеЧисло(0,КоличествоМужскихФамилий-1)];
			Имя=МужскиеИмена[ГенераторСЧ.СлучайноеЧисло(0,КоличествоМужскихИмен-1)];
			Отчество=МужскиеОтчества[ГенераторСЧ.СлучайноеЧисло(0,КоличествоМужскихОтчеств-1)];
			Пол="мужской"
		Иначе
			Фамилия=ЖенскиеФамилии[ГенераторСЧ.СлучайноеЧисло(0,КоличествоЖенскийФамилий-1)];
			Имя=ЖенскиеИмена[ГенераторСЧ.СлучайноеЧисло(0,КоличествоЖенскийИмен-1)];
			Отчество=ЖенскиеОтчества[ГенераторСЧ.СлучайноеЧисло(0,КоличествоЖенскийОтчеств-1)];
			Пол="женский"
		КонецЕсли;
		Наименование=Фамилия+" "+Имя+" "+Отчество+" ("+Пол+")";

		Если СгенерироватьДатуРождения Тогда
			ДатаРождения=ТекущаяДата()-ГенераторСЧ.СлучайноеЧисло(1,365*90)*86400; //Не более 90 лет
			Наименование=Наименование+"; дата рождения "+Формат(ДатаРождения,"ДФ=dd.MM.yyyy")
		КонецЕсли;

		Если СгенерироватьИНН Тогда
			ИНН="";
			КонтрольнаяСумма11=0;
			КонтрольнаяСумма12=0;
			Для М=1 По 10 Цикл
				Цифра=Число(Сред("0123456789",ГенераторСЧ.СлучайноеЧисло(1,10),1));
				ИНН=ИНН+Цифра;
				КонтрольнаяСумма11=КонтрольнаяСумма11+Цифра*Множители11[М];
				КонтрольнаяСумма12=КонтрольнаяСумма12+Цифра*Множители12[М]
			КонецЦикла;
			Цифра=(КонтрольнаяСумма11%11)%10;
			ИНН=ИНН+Цифра;
			ИНН=ИНН+((КонтрольнаяСумма12+Цифра*Множители12[М])%11)%10;
			Наименование=Наименование+"; ИНН "+ИНН
		КонецЕсли;

		Если СгенерироватьСНИЛС Тогда
			СНИЛС="";
			Для М=1 По 9 Цикл
				Цифра=Число(Сред("0123456789",ГенераторСЧ.СлучайноеЧисло(1,10),1));
				СНИЛС=СНИЛС+Цифра;
			КонецЦикла;
			Если Число(СНИЛС)>1001998 Тогда
				Всего=0;
				Для М=1 По 9 Цикл
					Всего=Всего+Число(Сред(СНИЛС,10-М,1))*М
				КонецЦикла;
				Остаток=Всего%101;
				СНИЛС=СНИЛС+"."+?(Остаток=100,0,Остаток)
			Иначе
				СНИЛС=СНИЛС+".00"
			КонецЕсли;
			Наименование=Наименование+"; СНИЛС "+Формат(Число(СНИЛС),"ЧЦ=11; ЧДЦ=2; ЧРД=' '; ЧРГ=-; ЧВН=")
		КонецЕсли;

		СлучайныеФИО.ДобавитьСтроку(Наименование)
	КонецЦикла
КонецПроцедуры

&НаСервере
Функция ЗаполнитьИзМакета(ИмяМакета)
	Массив=Новый Массив;
	Текст=РеквизитФормыВЗначение("Объект").ПолучитьМакет(ИмяМакета);
	КоличествоСтрок=Текст.КоличествоСтрок();
	Для Х=1 По КоличествоСтрок Цикл
		Массив.Добавить(Текст.ПолучитьСтроку(Х))
	КонецЦикла;
	Возврат Массив
КонецФункции

//Для тех, кто сидит на 8.2 - необходимо раскомментировать эту функцию
//Функция СтрРазделить(Стр,Разделитель)
//	Массив=Новый Массив;
//	Строки=СтрЗаменить(Стр,Разделитель,Символы.ПС);
//	Для Х=1 По СтрЧислоСтрок(Строки) Цикл
//		Массив.Добавить(Число(СтрПолучитьСтроку(Строки,Х)))
//	КонецЦикла;
//	Возврат Массив
//КонецФункции

Обработка писалась на платформе 8.3.11.3034, но должна работать на 8.2.

Вступайте в нашу телеграмм-группу Инфостарт

обезличивание генератор случайные ФИО ИНН СНИЛ даты рождения

См. также

Загрузка и выгрузка в Excel Универсальные функции Программист 1С:Предприятие 8 Россия Бесплатно (free)

Описанный ниже подход позволяет в три шага заполнять формулы в Excel файлы, вне зависимости от ОС сервера (MS Windows Server или Linux). Подход подразумевает отказ от работы с COM-объектом в пользу работы через "объектную модель документа" (DOM).

30.10.2025    4896    Abysswalker    11    

47

Универсальные функции Работа с интерфейсом Программист 1С:Предприятие 8 Бесплатно (free)

Порой необходимо временно отключить расширение 1С, не удаляя его, чтобы не потерять данные. Но в этом случае при каждом запуске всем будет лезть уведомление о неактивном расширении, хотя очевидно, это техническая информация, которой не стоит лишний раз пугать пользователей.

14.05.2025    9119    DeerCven    15    

63

Универсальные функции Программист 1С:Предприятие 8 1C:Бухгалтерия Бесплатно (free)

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

21.05.2024    58278    dimanich70    85    

175

Универсальные функции Программист 1С:Предприятие 8 1C:Бухгалтерия Абонемент ($m)

Задача: вставить картинку из буфера обмена на форму средствами платформы 1С.

1 стартмани

18.03.2024    8170    7    John_d    13    

59

Универсальные функции Программист Стажер 1С:Предприятие 8 1C:Бухгалтерия Бесплатно (free)

Пришлось помучиться с GUID-ами немного, решил поделиться опытом, мало ли кому пригодится.

12.02.2024    73126    atdonya    31    

73

Универсальные функции Программист 1С:Предприятие 8 Бесплатно (free)

На заключительных этапах, когда идет отладка или доработка интерфейса, необходимо много раз переоткрыть внешний объект. Вот один из способов автоматизации этого.

30.11.2023    10162    ke.92@mail.ru    17    

68
Отзывы
2. Ziggurat 50 03.12.18 14:53 Сейчас в теме
Хорошая обработка, полезная, оригинальное решение, неординарный подход. Рекомендую.
YPermitin; by_1Cnik; BigB; +3 Ответить
Остальные комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. Timur.V 84 03.12.18 14:30 Сейчас в теме
Если красота не нужна, можно "Иванов Иван Иванович" копировать и добавлять номера по порядку к отчеству от 1 до ...
Иванов Иван Иванович1
Иванов Иван Иванович2
Иванов Иван Иванович3
2. Ziggurat 50 03.12.18 14:53 Сейчас в теме
Хорошая обработка, полезная, оригинальное решение, неординарный подход. Рекомендую.
YPermitin; by_1Cnik; BigB; +3 Ответить
3. tomvlad 3873 04.12.18 07:59 Сейчас в теме
А вот этот генератор помимо ФИО умеет еще генерировать ИНН, дату рождения и СНИЛС и превращать обезличенную базу в тестовую.
4. BigB 193 04.12.18 13:10 Сейчас в теме
(3) Я надеюсь, что СНИЛСы и ИННы Вы генерируете заведомо неверные, иначе по верным можно получить все оставшиеся реквизиты персональных данных.
5. tomvlad 3873 04.12.18 13:28 Сейчас в теме
(4) При генерации персональных данных для всех реквизитов (в т.ч. ИНН и СНИЛС) используется генератор случайных чисел (так же, как и в этой публикации). Но проверку проходят.
6. BigB 193 05.12.18 09:19 Сейчас в теме
(5) Добавил генерацию ИНН, СНИЛС и дат рождения.
7. RonX01 328 29.04.19 09:35 Сейчас в теме
В алгоритме формирования корректного СНИЛСа есть ошибка:
Здесь --> СНИЛС=СНИЛС+"."+?(Остаток=100,0,Остаток)
Надо --> СНИЛС=СНИЛС+"."+?(Остаток=100,0,Формат(Остаток, "ЧЦ=2; ЧВН="))

Ошибка из-за отсекания лидирующих нулей. Проявляется если контрольное число меньше 10, например, если контрольное число будет 9, то номер в конце СНИЛСа будет 90, а не 09.

Также в номере СНИЛС не должно быть трех одинаковых цифр, идущих подряд друг за другом.
8. RonX01 328 29.04.19 10:08 Сейчас в теме
(7)
Проблему возникновения трех одинаковых цифр, идущих подряд друг за другом можно решить добавлением проверки в код:
			Для М=1 По 9 Цикл
				Цифра=Число(Сред("0123456789",ГенераторСЧ.СлучайноеЧисло(1,10),1));
				СНИЛС=СНИЛС+Цифра;
			КонецЦикла;

Добавляем проверку (проверка в виде конечного автомата):
	Состояние = "Инициализация"; // Начальное состояние
	Для М = 1 По 9 Цикл
		
		Если Состояние = "Инициализация" Тогда
			Состояние = "НетОдинаковыхЦифр";
			Цифра = ГенераторСЧ.СлучайноеЧисло(0, 9);
			
		ИначеЕсли Состояние = "НетОдинаковыхЦифр" Тогда
			НоваяЦифра = ГенераторСЧ.СлучайноеЧисло(0, 9);
			Если Цифра = НоваяЦифра Тогда
				Состояние = "ДвеОдинаковыеПодряд";
				
			Иначе
				Цифра = НоваяЦифра;
				
			КонецЕсли;
			
		ИначеЕсли Состояние = "ДвеОдинаковыеПодряд" Тогда
			НоваяЦифра = ГенераторСЧ.СлучайноеЧисло(0, 9);
			Если Цифра = НоваяЦифра Тогда
				Состояние = "НетОдинаковыхЦифр";
				Цифра = (НоваяЦифра + 1)%10;
				
			Иначе
				Состояние = "НетОдинаковыхЦифр";
				Цифра = НоваяЦифра;
				
			КонецЕсли;
			
		КонецЕсли;
		
		СНИЛС = СНИЛС + Строка(Цифра);
	КонецЦикла;
Показать
9. user1201613 17.06.19 12:01 Сейчас в теме
Добрый день!
Данная обработка подходит для конфигурации ERP 2.0 ?
10. BigB 193 17.06.19 12:37 Сейчас в теме
(9) Если руки прямые - то для любой конфигурации подойдет.
11. akanig 5 15.11.21 21:23 Сейчас в теме
Не понял зачем при генерации ИНН контрольные суммы?
13. Markovka2 28.07.22 00:54 Сейчас в теме
не подходик к 1С:Предприятие 8.3 (8.3.20.1914) и последней бухгалтерии 3. Пишет Невозможно подключить дополнительную обработку из файла. Возможно, она не подходит для этой версии программы. Техническая информация: Метод объекта не обнаружен (СведенияОВнешнейОбработке)
14. BigB 193 01.08.22 11:52 Сейчас в теме
(13) Я вроде и не писал, что обработка подключаемая.
Её достаточно просто открыть (через открытие файла).
Для отправки сообщения требуется регистрация/авторизация