Функция ПарольСоответствуетТребованиям (Пароль) экспорт
УстановитьПроверкуСложностиПаролейПользователей(Истина);
ВременныйПользовательИБ = ПользователиИнформационнойБазы.СоздатьПользователя();
ВременныйПользовательИБ.АутентификацияСтандартная = Истина;
ВременныйПользовательИБ.Имя = НСтр("ru = 'Временный пользователь'")+
" (" + Строка(Новый УникальныйИдентификатор) + ")";
ВременныйПользовательИБ.Пароль = Пароль;
ХорошийПароль = Истина;
Попытка
ВременныйПользовательИБ.Записать();
Исключение
ХорошийПароль = Ложь;
КонецПопытки;
ВременныйПользовательИБ.Удалить();
Возврат ХорошийПароль;
КонецФункции
Функция ПроверкаВалидностиEmail(Адрес) Экспорт
ЛатинскиеБуквы = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ";
Цифры = "0123456789";
//ищем крайний справа символ @ для правильного выделения локальной и доменной части
ИндексСобаки = Найти(Адрес,"@");
//1. строка адреса вообще не содержит разделителя
Если ИндексСобаки = 0 Тогда
Возврат ЛОЖЬ;
КонецЕсли;
УрезаемаяСтрока = Сред(Адрес, ИндексСобаки+1);
Пока Найти(УрезаемаяСтрока,"@") > 0 Цикл
ИндексСобаки = ИндексСобаки + Найти(УрезаемаяСтрока,"@");
УрезаемаяСтрока = Сред(УрезаемаяСтрока, ИндексСобаки+1);
КонецЦикла;
ДоменнаяЧасть = Сред(Адрес, ИндексСобаки+1);
ЛокальнаяЧасть = Лев(Адрес, ИндексСобаки-1);
//2. Проверяем длину локальной части
Если СтрДлина(ЛокальнаяЧасть) < 1 ИЛИ СтрДлина(ЛокальнаяЧасть) > 64 Тогда
Возврат ЛОЖЬ;
КонецЕсли;
//3. Проверяем длину доменной части
Если СтрДлина(ДоменнаяЧасть) < 1 ИЛИ СтрДлина(ДоменнаяЧасть) > 255 Тогда
Возврат ЛОЖЬ;
КонецЕсли;
//4. Проверяем что локальная части не начинается и не заканчивается на "."
Если Лев(ЛокальнаяЧасть, 1) = "." ИЛИ Прав(ЛокальнаяЧасть, 1) = "." Тогда
Возврат ЛОЖЬ;
КонецЕсли;
//5. Локальная части не содержит 2 или более "." подряд
Если Найти(ЛокальнаяЧасть, "..") > 0 Тогда
Возврат ЛОЖЬ;
КонецЕсли;
//Проверка доменной части
//6. Доменная часть не начинается с точки
Если Лев(ДоменнаяЧасть, 1) = "." Тогда
Возврат ЛОЖЬ;
КонецЕсли;
//7. Доменная часть не содержит 2 или более "." подряд
Если Найти(ДоменнаяЧасть, "..") > 0 Тогда
Возврат ЛОЖЬ;
КонецЕсли;
//8. Проверка частей доменной части
//каждая часть начинается с буквы и заканчивается буквой или цифрой
//каждая часть длиной не более 63 символов
ИдентификаторыДоменнойЧасти = СтроковыеФункцииКлиентСервер.РазложитьСтрокуВМассивПодстрок(ДоменнаяЧасть, ".");
Для Каждого ИдентификаторДомена ИЗ ИдентификаторыДоменнойЧасти Цикл
Если СтрДлина(ИдентификаторДомена) > 63 Тогда
Возврат ЛОЖЬ;
КонецЕсли;
Если Найти(ЛатинскиеБуквы, Лев(ИдентификаторДомена,1)) = 0
//для доменов, нарушающих RFC 1035 п.2.3.1, например @1c.ru :)
И Найти(Цифры, Лев(ИдентификаторДомена,1)) = 0
Тогда
Возврат ЛОЖЬ;
КонецЕсли;
Если Найти(ЛатинскиеБуквы, Прав(ИдентификаторДомена,1)) = 0 И Найти(Цифры, Прав(ИдентификаторДомена,1)) = 0 Тогда
Возврат ЛОЖЬ;
КонецЕсли;
КонецЦикла;
//Все проверки пройдены - радуемся
Возврат ИСТИНА;
КонецФункции