Фактически требование сводилось к мин количеству символов = 8, должны быть буквы нижнего и верхнего регистра, цифры и спец. символы.
Вот что из этого получилось:
Функция СгенерироватьПароль(МинДлинаПароля=8, СложныйПароль=Истина) ПарольВалиден = Ложь; Пока НЕ ПарольВалиден Цикл ГСЧ = Новый ГенераторСлучайныхЧисел(Секунда(ТекущаяДата())); ТПароль = СтрЗаменить(Строка(Новый УникальныйИдентификатор()),"-",""); Если не СложныйПароль тогда Возврат Лев(ТПароль,МинДлинаПароля); Иначе НобходимыеСимволяДляСложности = ".,<>/?;:'[]{}\`~!@#$%^&*()-_+="; МаксСимволов = МинДлинаПароля+ГСЧ.СлучайноеЧисло(0,4); ТПароль = Лев(ТПароль,МаксСимволов); Для Сим=1 по МаксСимволов Цикл Если Сим>1 И Булево(ГСЧ.СлучайноеЧисло(0,1)) И Найти(НобходимыеСимволяДляСложности,Сред(ТПароль,Сим-1,1))=0 тогда ТПароль = Лев(ТПароль,Сим)+Сред(НобходимыеСимволяДляСложности,ГСЧ.СлучайноеЧисло(0,30),1)+Сред(ТПароль,Сим+1); Сим = Сим+1; ТПароль = Сред(ТПароль,1,МаксСимволов); КонецЕсли; Если Булево(ГСЧ.СлучайноеЧисло(0,1)) тогда ТПароль = Лев(ТПароль,Сим-1)+ВРег(Сред(ТПароль,Сим,1))+Сред(ТПароль,Сим+1); КонецЕсли; КонецЦикла; КонецЕсли; //Проверка валидности пароля //((?=.*[a-z])(?=.*\d)(?=.*[\.,<>/\?;:'\[\]\{\}\\`~!@#$%^&*()-_+=])(?=.*[A-Z]).{6,}) RegExp = Новый COMОбъект("VBScript.RegExp"); //СтруктураФайлов = Новый СписокЗначений; RegExp.MultiLine = Истина; // истина — текст многострочный, ложь — одна строка RegExp.Global = Истина; // истина — поиск по всей строке, ложь — до первого совпадения RegExp.IgnoreCase = Ложь; // истина — игнорировать регистр строки при поиске RegExp.Pattern = "^((?=.*[a-z])(?=.*\d)(?=.*[\.,<>/\?;:'\[\]\{\}\\`~!@#$%^&\*()-_+=])(?=.*[A-Z]).{8,})$"; ПарольВалиден = RegExp.Test(ТПароль); КонецЦикла; Возврат ТПароль; КонецФункции
No comments:
Post a Comment