Зачем устанавливать srand перед shuffle

proWoke

Новичок
Здравствуйте. Читал статью про капчу на хабре. Статья середины 2011 года, т.е. современная. И я наткнулся на такой кусок кода:
PHP:
  function generate_code() 
    {    
          $chars = 'abdefhknrstyz23456789'; // Задаем символы, используемые в капче. Разделитель использовать не надо.
          $length = rand(4, 7); // Задаем длину капчи, в нашем случае - от 4 до 7
          $numChars = strlen($chars); // Узнаем, сколько у нас задано символов
          $str = '';
          for ($i = 0; $i < $length; $i++) {
            $str .= substr($chars, rand(1, $numChars) - 1, 1);
          } // Генерируем код

        // Перемешиваем, на всякий случай
            $array_mix = preg_split('//', $str, -1, PREG_SPLIT_NO_EMPTY);
            srand ((float)microtime()*1000000);
            shuffle ($array_mix);
        // Возвращаем полученный код
        return implode("", $array_mix);
    }
Тут применяется функция srand, которая устанавливает алгоритм генерации псевдослучайных чисел. Как я понимаю для того, чтобы shuffle всегда по разному перемешивал. Но shuffle и так по разному перемешивает всегда. Так вот вопрос, зачем нужна эта вот строчка:

PHP:
srand ((float)microtime()*1000000);
Спрашиваю потому, что на хабре, вроде как, сидят фанатики и никто не сказал про это. Поэтому я решил, что может я тогда доехать не могу сам.
 

AmdY

Пью пиво
Команда форума
да, генерит случайно, но он основывается на параметрах типа текущего времени и можно с достаточной точностью предсказать сгенерированное число. сид как раз этому и мешает. вот только на время его лучше не замешивать.
 

Фанат

oncle terrible
Команда форума
На хабре сидят такие же идиотики, как везде.
Плюс еще отягченные страхом за свою кармочку - боятся лишний раз вякнуть.

смысла функция не имеет
 

AmdY

Пью пиво
Команда форума
proWoke
имей ввиду, что не только на хабре такие. ;)
 
  • Like
Реакции: craz

fixxxer

К.О.
Партнер клуба
srand на самом деле нужен для ровно обратного - для повторяемой случайной последовательности
 

AmdY

Пью пиво
Команда форума
Проверил, shuffle дейтвительно rand использует внутрях для генерации индекса. Вот только задание сида подобнызом образом только помогает обсчитать варианты, так как php этот сид готовит более заковырысто, с учётом pid и т.д. Так что srand нужно использовать очень осторожно.
 
Сверху