СоздатьПароль (БСП)

Автор: 1С
ОбщийМодуль.ПользователиСлужебный
1С БСП

Создать пароль. Создает новый пароль, соответствующий заданным правилам проверки сложности.

// Создает новый пароль, соответствующий заданным правилам проверки сложности.
// Для облегчения запоминания, пароль формируется из слогов (согласная-гласная).
//
// Параметры:
//  ПараметрыПароля - Структура - возвращается функций ПараметрыПароля.
//  ГСЧ             - ГенераторСлучайныхЧисел - если уже используется.
//                  - Неопределено - создать новый.
//
// Возвращаемое значение:
//  Строка - новый пароль.
//
Функция СоздатьПароль(ПараметрыПароля, ГСЧ = Неопределено) Экспорт
	
	НовыйПароль = "";
	
	СогласныеСтрочные               = ПараметрыПароля.СогласныеБуквыСтрочные;
	СогласныеЗаглавные              = ПараметрыПароля.СогласныеБуквыЗаглавные;
	КоличествоСогласныхСтрочных     = СтрДлина(СогласныеСтрочные);
	КоличествоСогласныхЗаглавных    = СтрДлина(СогласныеЗаглавные);
	ИспользоватьСогласные           = (КоличествоСогласныхСтрочных > 0)
	                                  ИЛИ (КоличествоСогласныхЗаглавных > 0);
	
	ГласныеСтрочные                 = ПараметрыПароля.ГласныеБуквыСтрочные;
	ГласныеЗаглавные                = ПараметрыПароля.ГласныеБуквыЗаглавные;
	КоличествоГласныхСтрочных       = СтрДлина(ГласныеСтрочные);
	КоличествоГласныхЗаглавных      = СтрДлина(ГласныеЗаглавные);
	ИспользоватьГласные             = (КоличествоГласныхСтрочных > 0) 
	                                  ИЛИ (КоличествоГласныхЗаглавных > 0);
	
	Цифры                   = ПараметрыПароля.Цифры;
	КоличествоЦифр          = СтрДлина(Цифры);
	ИспользоватьЦифры       = (КоличествоЦифр > 0);
	
	СпецСимволы             = ПараметрыПароля.СпецСимволы;
	КоличествоСпецСимволов  = СтрДлина(СпецСимволы);
	ИспользоватьСпецСимволы = (КоличествоСпецСимволов > 0);
	
	// Создание генератора случайных чисел.
	Если ГСЧ = Неопределено Тогда
		ГСЧ = Новый ГенераторСлучайныхЧисел();
	КонецЕсли;
	
	Счетчик = 0;
	
	МаксимальнаяДлина           = ПараметрыПароля.МаксимальнаяДлина;
	МинимальнаяДлина            = ПараметрыПароля.МинимальнаяДлина;
	
	// Определение позиции спец. символов и цифр.
	Если ПараметрыПароля.ПроверятьУсловияСложности Тогда
		УстановитьСтрочную      = ПараметрыПароля.СтрочныеБуквыПроверятьНаличие;
		УстановитьЗаглавную     = ПараметрыПароля.ЗаглавныеБуквыПроверятьНаличие;
		УстановитьЦифру         = ПараметрыПароля.ЦифрыПроверятьНаличие;
		УстановитьСпецСимвол    = ПараметрыПароля.СпецСимволыПроверятьНаличие;
	Иначе
		УстановитьСтрочную      = (КоличествоГласныхСтрочных > 0) 
		                          ИЛИ (КоличествоСогласныхСтрочных > 0);
		УстановитьЗаглавную     = (КоличествоГласныхЗаглавных > 0) 
		                          ИЛИ (КоличествоСогласныхЗаглавных > 0);
		УстановитьЦифру         = ИспользоватьЦифры;
		УстановитьСпецСимвол    = ИспользоватьСпецСимволы;
	КонецЕсли;
	
	Пока Счетчик < МаксимальнаяДлина Цикл
		
		// Начало с согласной буквы.
		Если ИспользоватьСогласные Тогда
			Если УстановитьЗаглавную И УстановитьСтрочную Тогда
				СтрокаПоиска = СогласныеСтрочные + СогласныеЗаглавные;
				ВерхняяГраница = КоличествоСогласныхСтрочных + КоличествоСогласныхЗаглавных;
			ИначеЕсли УстановитьЗаглавную Тогда
				СтрокаПоиска = СогласныеЗаглавные;
				ВерхняяГраница = КоличествоСогласныхЗаглавных;
			Иначе
				СтрокаПоиска = СогласныеСтрочные;
				ВерхняяГраница = КоличествоСогласныхСтрочных;
			КонецЕсли;
			Если ПустаяСтрока(СтрокаПоиска) Тогда
				СтрокаПоиска = СогласныеСтрочные + СогласныеЗаглавные;
				ВерхняяГраница = КоличествоСогласныхСтрочных + КоличествоСогласныхЗаглавных;
			КонецЕсли;
			Символ = Сред(СтрокаПоиска, ГСЧ.СлучайноеЧисло(1, ВерхняяГраница), 1);
			Если Символ = ВРЕГ(Символ) Тогда
				Если УстановитьЗаглавную Тогда
					УстановитьЗаглавную = (ГСЧ.СлучайноеЧисло(0, 1) = 1);
				КонецЕсли;
			Иначе
				УстановитьСтрочную = Ложь;
			КонецЕсли;
			НовыйПароль = НовыйПароль + Символ;
			Счетчик     = Счетчик + 1;
			Если Счетчик >= МинимальнаяДлина Тогда
				Прервать;
			КонецЕсли;
		КонецЕсли;
		
		// Добавление гласных.
		Если ИспользоватьГласные Тогда
			Если УстановитьЗаглавную И УстановитьСтрочную Тогда
				СтрокаПоиска = ГласныеСтрочные + ГласныеЗаглавные;
				ВерхняяГраница = КоличествоГласныхСтрочных + КоличествоГласныхЗаглавных;
			ИначеЕсли УстановитьЗаглавную Тогда
				СтрокаПоиска = ГласныеЗаглавные;
				ВерхняяГраница = КоличествоГласныхЗаглавных;
			Иначе
				СтрокаПоиска = ГласныеСтрочные;
				ВерхняяГраница = КоличествоГласныхСтрочных;
			КонецЕсли;
			Если ПустаяСтрока(СтрокаПоиска) Тогда
				СтрокаПоиска = ГласныеСтрочные + ГласныеЗаглавные;
				ВерхняяГраница = КоличествоГласныхСтрочных + КоличествоГласныхЗаглавных;
			КонецЕсли;
			Символ = Сред(СтрокаПоиска, ГСЧ.СлучайноеЧисло(1, ВерхняяГраница), 1);
			Если Символ = ВРЕГ(Символ) Тогда
				УстановитьЗаглавную = Ложь;
			Иначе
				УстановитьСтрочную = Ложь;
			КонецЕсли;
			НовыйПароль = НовыйПароль + Символ;
			Счетчик     = Счетчик + 1;
			Если Счетчик >= МинимальнаяДлина Тогда
				Прервать;
			КонецЕсли;
		КонецЕсли;
	
		// Добавление цифр.
		Если ИспользоватьЦифры И УстановитьЦифру Тогда
			УстановитьЦифру = (ГСЧ.СлучайноеЧисло(0, 1) = 1);
			Символ          = Сред(Цифры, ГСЧ.СлучайноеЧисло(1, КоличествоЦифр), 1);
			НовыйПароль     = НовыйПароль + Символ;
			Счетчик         = Счетчик + 1;
			Если Счетчик >= МинимальнаяДлина Тогда
				Прервать;
			КонецЕсли;
		КонецЕсли;
		
		// Добавление спец. символов.
		Если ИспользоватьСпецСимволы И УстановитьСпецСимвол Тогда
			УстановитьСпецСимвол = (ГСЧ.СлучайноеЧисло(0, 1) = 1);
			Символ      = Сред(СпецСимволы, ГСЧ.СлучайноеЧисло(1, КоличествоСпецСимволов), 1);
			НовыйПароль = НовыйПароль + Символ;
			Счетчик     = Счетчик + 1;
			Если Счетчик >= МинимальнаяДлина Тогда
				Прервать;
			КонецЕсли;
		КонецЕсли;
	КонецЦикла;
	
	Возврат НовыйПароль;
	
КонецФункции

///////////////////////////////////////////////////////////////////////////////////////////////////////
// Copyright (c) 2019, ООО 1С-Софт
// Все права защищены. Эта программа и сопроводительные материалы предоставляются 
// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0)
// Текст лицензии доступен по ссылке:
// https://creativecommons.org/licenses/by/4.0/legalcode
///////////////////////////////////////////////////////////////////////////////////////////////////////

Рекомендации

Похожие публикации

СохраняемоеЗначениеСтрокиПароля (БСП)

СтарыйПарольСовпадаетССохраненным (БСП)

УстановитьПарольСертификата (БСП)

ПроверитьЛогинИПароль (БСП)

ПолучитьВременныйПароль (БСП)

ПодтвердитьВременныйПароль (БСП)

ПолучитьНастройкиПолученияВременныхПаролей (БСП)

ИзменитьНастройкиПолученияВременныхПаролей (БСП)

1С Менеджер конфигураций