А назад я написал случайный генератор строк, который строит строку с использованием символа mt_rand() th в строке до тех пор, пока не будет достигнута желаемая длина.
public function getPassword ()
{
if ($this -> password == '')
{
$pw = '';
$charListEnd = strlen (static::CHARLIST) - 1;
for ($loops = mt_rand ($this -> min, $this -> max); $loops > 0; $loops--)
{
$pw .= substr (static::CHARLIST, mt_rand (0, $charListEnd), 1);
}
$this -> password = $pw;
}
return $this -> password;
}
(CHARLIST - это константа класса, содержащая пул символов для пароля. $min и $max являются ограничениями длины)
Сегодня, когда я изучал что-то еще, я наткнулся на следующий код:
function generateRandomString ($length = 10) {
return substr(str_shuffle ("0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ"), 0, $length);
}
Это почти то же самое, что и мой цикл mt_rand() в одной строке. Мне очень нравится по этой простой причине, меньшее количество строк кода всегда хорошо.:)
Но когда я посмотрел str_shuffle в руководстве PHP, документация на нем была довольно легкой. Одна вещь, которую я действительно хотел узнать, это алгоритм, который он использует для случайности? В руководстве не упоминается, какая рандомизация выполняется для получения перетасованной строки. Если он использует rand() вместо mt_rand(), то, в конце концов, придерживаться моего текущего решения может быть лучше.
Итак, в основном я хотел бы знать, как str_shuffle рандомизирует строку. Используется ли rand() или mt_rand()? Я использую свою функцию случайных строк для генерации паролей, поэтому важно качество случайности.
UPDATE. Как уже указывалось, метод str_shuffle не эквивалентен уже используемому мне коду и будет менее случайным из-за того, что строковые символы остаются такими же, как и вход, только с изменением их порядка. Однако мне все еще интересно, как функция str_shuffle рандомизирует свою входную строку.