Создать пароль. Создает новый пароль, соответствующий заданным правилам проверки сложности.
// Создает новый пароль, соответствующий заданным правилам проверки сложности.
// Для облегчения запоминания, пароль формируется из слогов (согласная-гласная).
//
// Параметры:
// ПараметрыПароля - Структура - возвращается функций ПараметрыПароля.
// ГСЧ - ГенераторСлучайныхЧисел - если уже используется.
// - Неопределено - создать новый.
//
// Возвращаемое значение:
// Строка - новый пароль.
//
Функция СоздатьПароль(ПараметрыПароля, ГСЧ = Неопределено) Экспорт
НовыйПароль = "";
СогласныеСтрочные = ПараметрыПароля.СогласныеБуквыСтрочные;
СогласныеЗаглавные = ПараметрыПароля.СогласныеБуквыЗаглавные;
КоличествоСогласныхСтрочных = СтрДлина(СогласныеСтрочные);
КоличествоСогласныхЗаглавных = СтрДлина(СогласныеЗаглавные);
ИспользоватьСогласные = (КоличествоСогласныхСтрочных > 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
///////////////////////////////////////////////////////////////////////////////////////////////////////
СохраняемоеЗначениеСтрокиПароля (БСП)
СтарыйПарольСовпадаетССохраненным (БСП)
УстановитьПарольСертификата (БСП)
ПодтвердитьВременныйПароль (БСП)
Канал FastCode 1C в Телеграм! Шаблоны кода, статьи, полезные советы, курсы по 1С (8К участников)