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

03.12.18

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

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

Скачать файл

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

Наименование SM По подписке [?] Купить один файл
Генератор ФИО, ИНН, СНИЛС и дат рождения:
.epf 437,59Kb
23
23
1 SM
Скачать Купить за 1 850 руб.

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

  • мужских фамилий: 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.

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

См. также

Универсальные функции Программист Платформа 1С v8.3 Конфигурации 1cv8 Бесплатно (free)

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

21.05.2024    11106    dimanich70    80    

124

Универсальные функции Программист Платформа 1С v8.3 Конфигурации 1cv8 Абонемент ($m)

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

1 стартмани

18.03.2024    3310    3    John_d    11    

57

Универсальные функции Программист Стажер Платформа 1С v8.3 Конфигурации 1cv8 Бесплатно (free)

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

12.02.2024    7719    atdonya    22    

55

Универсальные функции Программист Платформа 1С v8.3 Бесплатно (free)

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

30.11.2023    4684    ke.92@mail.ru    16    

65

WEB-интеграция Универсальные функции Механизмы платформы 1С Программист Платформа 1С v8.3 Конфигурации 1cv8 Бесплатно (free)

При работе с интеграциями рано или поздно придется столкнуться с получением JSON файлов. И, конечно же, жизнь заставит проверять файлы перед тем, как записывать данные в БД.

28.08.2023    11184    YA_418728146    7    

150

Пакетная печать Печатные формы Адаптация типовых решений Универсальные функции Платформа 1С v8.3 1С:ERP Управление предприятием 2 1С:Управление торговлей 11 1С:Комплексная автоматизация 2.х Россия Абонемент ($m)

Расширение для программ 1С:Управление торговлей, 1С:Комплексная автоматизация, 1С:ERP, которое позволяет распечатывать печатные формы для непроведенных документов. Можно настроить, каким пользователям, какие конкретные формы документов разрешено печатать без проведения документа.

2 стартмани

22.08.2023    2769    43    progmaster    8    

4

Инструментарий разработчика Универсальные функции Платформа 1С v8.3 Конфигурации 1cv8 1С:Розница 2 1С:ERP Управление предприятием 2 1С:Бухгалтерия 3.0 1С:Управление торговлей 11 1С:Комплексная автоматизация 2.х 1С:Зарплата и Управление Персоналом 3.x Абонемент ($m)

Копирует в буфер значения из списков, из ячеек отчетов, таблиц, настроек списков, других отборов и вставляет в выбранную настройку отбора. Работает с Объект не найден. Работает как в одной так и между разными базами 1С. Использует комбинации [Alt+C] Копировать список, [Alt+V] Вставить список. Также для копирования данных используется стандартная [Ctrl+C] (например из открытого xls, mxl, doc и т.п. файла скопировать список наименований)

1 стартмани

13.10.2022    17128    152    sapervodichka    112    

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

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

Также в номере СНИЛС не должно быть трех одинаковых цифр, идущих подряд друг за другом.
8. RonX01 323 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) Я вроде и не писал, что обработка подключаемая.
Её достаточно просто открыть (через открытие файла).
Оставьте свое сообщение