неділю, 20 липня 2008 р.

Генератор паролей

Во-первых нам нужна функция генерации случайного символа

function randSymbol(){
$str = 'qwertyuiopasdfghjklzxcvbnm';
return $str[mt_rand(0,strlen($str)-1)];
}

В переменной $str - указываются символы из которых будет состоять пароль

Разберем подробно строку

return $str[mt_rand(0,strlen($str)-1)];

strlen($str) - кол-во символов в строке $str

mt_rand(0,strlen($str)-1) - случайное число от 0 до [Длина строки $str]-1, т.е. номер символа

$str[mt_rand(0,strlen($str)-1)] - случайный символ из строки

Во-вторых нужна функция создания строки
И тут я хочу использовать, возможно не всем знакомую функцию обратного вызова
preg_replace_callback()

Формат вызова такой:
mixed preg_replace_callback ( mixed pattern, callback callback, mixed subject [, int limit] )

Функция заменяет фрагменты текста, удовлетворяющие регулярному выражению
И вот как мы можем применить это:

function genPwd($length = 10){
$pass = str_repeat(chr(32),$length);
return
preg_replace_callback('#.#','randSymbol',$pass);
}
?>

Рассмотрим ее более подробно

str_repeat(chr(32),$length) - генерируем строку строку длинной $length, состоящую из пробелов

#.# - регулярное выражение, вернет каждый символ строки
randSymbol - наша функция генерации произвольного символа
$pass - пустая строка длины $length

preg_replace_callback('#.#','randSymbol',$pass) - каждый символ строки меняется на произвольный символ

Что мы имеем в итоге?
Компактую комбинацию

function genPwd($length = 10){
$pass = str_repeat(' ',$length);
return
preg_replace_callback('#.#','randSymbol',$pass);
}

function
randSymbol(){
$str = 'qwertyuiopasdfghjklzxcvbnm';
return
$str[mt_rand(0,strlen($str)-1)];
}

echo
genPwd(6);
?>

Создающую пароль произвольной длины из заданных нами символов

1 коментар:

Анонім сказав...

function GetPwd($length=6){
$result="";
for(n=0; n<$length; n++){
$result.=chr(rand(ord("a"),ord("z")));
}
return $result;

не проще?