Для начала напишем страницу с формой для пользователя. На самом деле сценарий будет находиться в этой же странице, только будет активизироваться, когда пользователь будет нажимать на кнопку Сгенерировать пароль.
Итак, создайте файл index.php и напишите в нем следующее:
В action для формы мы указали исходную страницу. Для того чтобы узнать, когда генерировать пароль, а когда страница просто загружена, мы ввели скрытый (hidden) параметр action со значением 2. Для начала давайте осуществим проверку в сценарии, чтобы выяснить, насколько корректно нам были переданы данные и передавались ли они вообще:
function vyhod() //функция выхода
{
echo ""; //дописываем окончание страницы
exit; //заканчиваем работу
}
if (!isset($action)) vyhod(); /* если переменная $action не определена, то вызываем нашу функцию выхода */
else //иначе проверяем
{
if ($action!=2) //если значение переменной $action не равно 2, то также выходим
{
vyhod();
}
}
if (!isset($PassLength) || $PassLength==="") vyhod(); /* если длина пароля не указана, или переменная для хранения длины не определена, опять же выходим */
else
{
//проверяем, является ли длина пароля числом
$ok=0;
for($i=48;$i<58;$i++)
{
if ($PassLength[0]===chr($i)) $ok++;
}
if ($ok==0) vyhod();
if (StrLen($PassLength)==0)
{
$ok=0;
for($i=48;$i<58;$i++)
{
if ($PassLength[1]===chr($i)) $ok++;
}
if ($ok==0) vyhod();
}
}
Данная проверка сводится в основном к проверке длины пароля и переменной $action, которая решает, стоит ли генерировать пароль. Функция vyhod() содержит две строки, первая содержит закрывающие тэги для страницы, а вторая завершает работу сценария. Сначала делаем элементарные проверки на то, определена ли переменная $action и равняется ли эта переменная двум. Если одно из этих условий не выполняется, то сразу выходим.
Затем идут проверки длины пароля. Длина пароля передается в переменной PassLength. Если эта переменная не определена или не указана (ничему не равняется), то вызывается функция vyhod() для завершения сценария. Если переменная указана, то далее мы проверяем ее на корректность. Делаем цикл от 48 до 58, так как этот диапазон в таблице ASCII указывает на цифры от 0 до 9. В цикле мы проверяем, является ли первый символ цифрой, то есть символом в диапазоне от 48 до 58. Если первый символ лежит в диапазоне от 48 до 58 (то есть является цифрой), то увеличиваем на единицу переменную $ok. После окончания работы цикла мы делаем проверку — если значение переменной $ok изменилось, значит, это цифра, иначе это какой-то другой символ — и выходим из сценария. После этого мы проверяем длину пароля — если она состоит из двух цифр, то для второго числа осуществляем аналогичную проверку; если проверка пройдена, продолжаем выполнения сценария.
Теперь допишем окончание сценария:
$PassCase=""; //символы, которые будут использоваться в пароле
$Pass=""; //сам пароль
$lowercase="zyxwvutsrqponmlkjihgfedcba"; //символы в нижнем регистре
$uppercase="ABCDEFGHIJKLMNOPQRSTUVWXYZ"; //символы в верхнем регистре
$speccase="!@#$%^&*()-_+=\\|/\""; //специальные символы
$digitcase="0123456789"; //цифры
/* делаем проверку; если пользователь отказался от использования некоторых символов, то присваиваем соответствующим переменным значение false */
if (!isset($lower)) $lower=false;
if (!isset($upper)) $upper=false;
if (!isset($digit)) $digit=false;
if (!isset($spec)) $spec=false;
if ($PassLength>50 || $PassLength<5) $PassLenght=7; /* если длина пароля больше 50 или меньше 5,то устанавливаем длину в 7 */
//определяем символы, которые будут использоваться в пароле
if ($lower) $PassCase.=$lowercase;
if ($upper) $PassCase.=$uppercase;
if ($digit) $PassCase.=$digitcase;
if ($spec) $PassCase.=$speccase;
$CharSize=StrLen($PassCase)-1; //узнаем длину пароля
if ($CharSize==-1) vyhod(); /* если пользователь не выбрал символов, которые будут использоваться в пароле, то завершаем работу сценария */
Здесь также присутствуют проверки на корректность переданных данных. Но давайте рассмотрим подробней генерацию пароля. Генерация пароля осуществляется в цикле, который за каждую итерацию добавляет новый символ в пароль. Мы используем переменную PassCase — сюда мы ранее занесли все символы, которые можно использовать в пароле. А теперь случайным образом (для выбора случайного символа используется функция rand(), которая в нашем случае является индексом для строки с выбранными для пароля символов) выбираем необходимое количество и таким образом создаем пароль. Результат работы сценария можно увидеть на рис. 1.