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

  • Автор темы Автор темы proWoke
  • Дата начала Дата начала

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);

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

смысла функция не имеет
 
proWoke
имей ввиду, что не только на хабре такие. ;)
 
  • Like
Реакции: craz
srand на самом деле нужен для ровно обратного - для повторяемой случайной последовательности
 
Проверил, shuffle дейтвительно rand использует внутрях для генерации индекса. Вот только задание сида подобнызом образом только помогает обсчитать варианты, так как php этот сид готовит более заковырысто, с учётом pid и т.д. Так что srand нужно использовать очень осторожно.
 
Сверху