The seed is the PID + LCG (https://github.com/php/php-src/search?q=GENERATE_SEED&unscoped_q=GENERATE_SEED)
(PHP 4, PHP 5, PHP 7, PHP 8)
mt_rand — Генерирует случайное значение через генератор случайных чисел на базе Вихря Мерсе́нна
Генераторы случайных чисел старых стандартных библиотек языка C создают результат на основе сомнительных или неизвестных характеристик и работают медленно. Функция mt_rand() заменяет старую функцию rand() и работает на базе генератора случайных чисел с известными характеристиками на основе » Вихря Мерсе́нна и генерирует случайные числа в среднем в четыре раза быстрее, чем функция rand() стандартной библиотеки языка C.
При вызове без необязательных параметров min
и max
функция mt_rand()
возвращает псевдослучайное значение от 0 до значения, которое возвращает функция
mt_getrandmax(). Вызов mt_rand(5, 15)
вернёт случайное число между 5 и 15 включительно.
Функция не создаёт безопасные для криптографических целей значения, её нельзя использовать в криптографических целях или целях, которые требуют, чтобы значения возврата нельзя было угадать.
Безопасные для криптографических целей случайные последовательности создаёт композиция класса Random\Randomizer с движком Random\Engine\Secure. В простых сценариях пользуются функциями random_int() и random_bytes() с удобным и безопасным API-интерфейсом, который поддерживается безопасным для криптографических целей CSPRNG-генератором псевдослучайных чисел операционной системы.
min
Необязательный параметр: минимальное значение случайного числа. Значение по умолчанию равняется 0.
max
Необязательный параметр: максимальное значение случайного числа. Значение по умолчанию равняется значению возврата функции mt_getrandmax().
Функция возвращает случайное целое значение между значением параметра min
, или 0,
и значением параметра max
, или значением, которое
возвращает функция mt_getrandmax(), включительно,
или возвращает значение false
, если параметр max
меньше параметра min
.
Версия | Описание |
---|---|
7.2.0 | В функции mt_rand() исправили ошибку смещения по модулю. То есть последовательности, которые сгенерировали с конкретным начальным значением, могут несовпадать со значениями, которые сгенерировали в PHP 7.1 на 64-битных машинах. |
7.1.0 | Функция rand() стала псевдонимом функции mt_rand(). |
7.1.0 |
Функцию mt_rand()
обновили
и теперь функция генерирует значения через корректную версию генератора случайных чисел на основе
Вихря Мерсенна. Старое поведение получают через функцию mt_srand() с аргументом
MT_RAND_PHP для второго параметра.
|
Пример #1 Пример генерации случайного значения через генератор случайных чисел на базе Вихря Мерсе́нна функцией mt_rand()
<?php
echo mt_rand(), "\n";
echo mt_rand(), "\n";
echo mt_rand(5, 15), "\n";
?>
Вывод приведённого примера будет похож на:
1604716014 1478613278 6
Диапазон min
— max
не должен
выходить за границы значения, которое возвращает функция mt_getrandmax().
То есть (max
-
min
) <= mt_getrandmax().
Иначе функция mt_rand() может возвращать
менее качественные случайные числа.
The seed is the PID + LCG (https://github.com/php/php-src/search?q=GENERATE_SEED&unscoped_q=GENERATE_SEED)
To reiterate the message about *not* using mt_rand() for anything security related, here's a new tool that has been just posted that recovers the seed value given a single mt_rand() output:
http://www.openwall.com/php_mt_seed/README