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

03.12.18

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

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

Скачать исходный код

Наименование Файл Версия Размер
Генератор ФИО, ИНН, СНИЛС и дат рождения:
.epf 437,59Kb
21
.epf 437,59Kb 21 Скачать

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

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

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

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

1 стартмани

18.03.2024    2848    1    John_d    9    

56

GUID в 1С 8.3 - как с ними быть

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

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

12.02.2024    4967    atdonya    22    

51

Переоткрытие внешних обработок

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

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

30.11.2023    4085    ke.92@mail.ru    16    

62

Валидация JSON через XDTO (включая массивы)

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

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

28.08.2023    9309    YA_418728146    6    

143

Печать непроведенных документов для УТ, КА, ERP. Настройка печати по пользователям, документам и печатным формам

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

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

2 стартмани

22.08.2023    2191    24    progmaster    7    

3

Расширение: Быстрые отборы через буфер [Alt+C] Копировать список, [Alt+V] Вставить список, [Ctrl+C] Копировать из файлов

Инструментарий разработчика Универсальные функции Платформа 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    16322    141    sapervodichka    112    

129

Система контроля ведения учета [БСП]

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

В данном материале рассмотрим типовой алгоритм подсистемы контроля учета БСП в конфигурациях на примерах.

18.07.2022    7342    quazare    8    

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

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

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