str_shuffle и случайность
Некоторое время назад я написал генератор случайных строк, который строит строку, используя символ 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 ()? Я'Я использую мою функцию случайных строк для генерации паролей, поэтому качество случайности имеет значение.
ОБНОВИТЬ: Как было отмечено, метод str_shuffle не эквивалентен коду I 'м уже используется и будет менее случайным из-за строки 'Символы s остаются такими же, как у ввода, только с измененным их порядком. Однако я'Мне все еще интересно, как функция str_shuffle рандомизирует свою входную строку.