WebScript.Ru
C:\   главная  ::   о сайте  ::  каталог скриптов  ::  гнездо  ::  форум  ::   авторам  :: Новостройки ::   ХОСТИНГ  ::

|| разделы::
|| поиск по сайту::

|| реклама::
|| новости почтой::
Рассылки Subscribe.Ru ::



Новости сайта WebScript.Ru
Популярные статьи

Hot 5 Stories

|| рекомендуем::




Пароль навскидку


Прислал: Сергей Парижский [ 07.09.2007 @ 12:18 ]
Раздел:: [ Статьи по PHP ]


Для начала напишем страницу с формой для пользователя. На самом деле сценарий будет находиться в этой же странице, только будет активизироваться, когда пользователь будет нажимать на кнопку Сгенерировать пароль.

Итак, создайте файл index.php и напишите в нем следующее:
<html>
<head>
<title>
Генератор паролей
</title>
</head>
<body>
<form action=index.php method=POST>
Количество символов в пароле:
<input type=text name=PassLength value=7 maxlength=2 size=4> <br>
<input type=checkbox name=lower checked>Нижний регистр (a-z)<br>
<input type=checkbox name=upper checked>Верхний регистр (A-Z)<br>
<input type=checkbox name=digit checked>Цифры (0-9)<br>
<input type=checkbox name=spec checked>Специальные символы (!@#$%^&*()-_+=|/")<br><br>
<input type=hidden name=action value=2>
<input type=submit value="Сгенерировать пароль"><br>
</form>
<?

//код сценария

?>
</body>
</html>
В action для формы мы указали исходную страницу. Для того чтобы узнать, когда генерировать пароль, а когда страница просто загружена, мы ввели скрытый (hidden) параметр action со значением 2. Для начала давайте осуществим проверку в сценарии, чтобы выяснить, насколько корректно нам были переданы данные и передавались ли они вообще:
function vyhod() //функция выхода
{
echo "</body></html>"; //дописываем окончание страницы
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) $PassLength=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(); /* если пользователь не выбрал символов, которые будут использоваться в пароле, то завершаем работу сценария */

for($i=0;$i<$PassLength;$i++)
$Pass.=$PassCase[rand(0,$CharSize)]; //генерируем пароль

echo "<font size=5 color=green><b>".$Pass."</b></font>"; /* выводим сгенерированный пароль */
Здесь также присутствуют проверки на корректность переданных данных. Но давайте рассмотрим подробней генерацию пароля. Генерация пароля осуществляется в цикле, который за каждую итерацию добавляет новый символ в пароль. Мы используем переменную PassCase — сюда мы ранее занесли все символы, которые можно использовать в пароле. А теперь случайным образом (для выбора случайного символа используется функция rand(), которая в нашем случае является индексом для строки с выбранными для пароля символов) выбираем необходимое количество и таким образом создаем пароль. Результат работы сценария можно увидеть на рис. 1.

Сайт автора
Мой Компьютер


 :::::  And пишет 16.10.2007 @ 08:18 
if ($PassLength>50 || $PassLength<5) $PassLenght=7;

заменить на

if ($PassLength>50 || $PassLength<5) $PassLength=7;

не внимательно статью печатали..
 :::::  HeeL пишет 16.10.2007 @ 09:03 
And, не внимательно комментарий печатали

Во-первых, ты написал две одинаковые строки, во-вторых - в коде тоже самое!
 :::::  qw пишет 24.10.2007 @ 15:10 
Совсем плохой стал
 :::::  Gosha пишет 24.11.2007 @ 14:48 
Спасибо, никак не мог разобраться самостоятельно!
 :::::  Vladimir пишет 09.12.2007 @ 21:42 
HeeL, Вы невнимательно прочитали и код и комментарий..
$PassLength и $PassLenght - это две разные переменные..
 :::::  HeeL пишет 09.12.2007 @ 22:00 
Да, вы правы
 :::::  Юга пишет 21.01.2008 @ 14:58 
Парижский, я тебя обожаю! :)

Статья так себе, мне больше нравятся твои последнии работы!


ЗЫ Если бы ты сделал у себя на сайте (http://heel.org.ua) возможность комментировать, коммент был бы там! ;)
 :::::  Jumanji пишет 22.12.2008 @ 12:52 
Этот скрипт не рабоотает, попробуйте его скопировать и запустить у себя на компьютере
 :::::  nilbug.ru пишет 26.04.2009 @ 22:21 
$speccase="!@#$%^&*()-_+=|/""; //специальные символы - внимательно посмотри! из за этого и не работает!
Имя:
Email:
URL

Введите сумму двух чисел девять и шесть (девять+шесть=?)
Запомнить мою информацию

* Html запрещен* Ваш E-mail опубликован не будет.

Copyright © 2000-2001 WebScript.Ru nas@webscript.ru
Design © 2001 by Parallax Design Studio (aka Spectator.ru)
Все торговые марки и авторские права на эту страницу принадлежат их соответствующим владельцам.
Сгенерировано за: 0.0367348