mt_rand
(PHP 4, PHP 5, PHP 7)
mt_rand — Генерирует случайное значение методом mt
Описание
$min
, int $max
)Многие генераторы случайных чисел в старых библиотеках имеют сомнительные или неизвестные характеристики, а также работают довольно медленно. По умолчанию, PHP использует генератор случайных чисел libc с помощью функции rand(). Функция mt_rand() представляет собой удобную замену этой функции. Она использует генератор случайных чисел с известными характеристиками, основанный на "» Вихре Мерсенна", который генерирует случайные числа в среднем в четыре раза быстрее, чем libc rand().
Вызванная без необязательных параметров min
и
max
, функция mt_rand()
возвращает псевдослучайное значение между 0 и mt_getrandmax().
Если вам нужно, например, случайное число между 5 и 15 (включительно),
используйте вызов mt_rand(5,15)
Список параметров
-
min
-
Необязательный параметр: минимальное значение случайного числа (по умолчанию: 0)
-
max
-
Необязательный параметр: максимальное значение случайного числа (по умолчанию: mt_getrandmax())
Возвращаемые значения
Случайное целое значение между min
(или 0)
и max
(или mt_getrandmax(), включительно),
или FALSE
в случае, если max
меньше min
.
Список изменений
Версия | Описание |
---|---|
5.3.4 |
Приводит к ошибке E_WARNING и возвращает FALSE , если
max < min .
|
Примеры
Пример #1 Пример использования mt_rand()
<?php
echo mt_rand() . "\n";
echo mt_rand() . "\n";
echo mt_rand(5, 15);
?>
Результатом выполнения данного примера будет что-то подобное:
1604716014 1478613278 6
Примечания
Данная функция не генерирует криптографически безопасные значения и не должна использоваться в криптографических целях. Если вам требуется криптографически безопасное значение, подумайте об использовании функции openssl_random_pseudo_bytes() вместо данной.
Распределение значений, возвращаемых mt_rand(),
отдает предпочтение четным числам на 64-битных сборках PHP,
если параметр max
больше 2^32.
Потому что, если max
больше, чем значение, возвращаемое
функцией mt_getrandmax(), то вывод генератора случайных чисел
округляется в большую сторону.
Смотрите также
- mt_srand() - Переинициализирует генератор случайных чисел mt
- mt_getrandmax() - Показывает максимально возможное значение случайного числа
- openssl_random_pseudo_bytes() - Generate a pseudo-random string of bytes
- rand() - Генерирует случайное число
- PHP Руководство
- Функции по категориям
- Индекс функций
- Справочник функций
- Математические расширения
- Математические функции
- abs
- acos
- acosh
- asin
- asinh
- atan2
- atan
- atanh
- base_convert
- bindec
- ceil
- cos
- cosh
- decbin
- dechex
- decoct
- deg2rad
- exp
- expm1
- floor
- fmod
- getrandmax
- hexdec
- hypot
- intdiv
- is_finite
- is_infinite
- is_nan
- lcg_value
- log10
- log1p
- log
- max
- min
- mt_getrandmax
- mt_rand
- mt_srand
- octdec
- pi
- pow
- rad2deg
- rand
- round
- sin
- sinh
- sqrt
- srand
- tan
- tanh
Коментарии
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
The seed is the PID + LCG (https://github.com/php/php-src/search?q=GENERATE_SEED&unscoped_q=GENERATE_SEED)
To see some systematic deviations from a universal distribution run:
<?php
$alfabet = str_split('ADHKLMNPSTUWX');
$countalfabet = count($alfabet)-1;
$code = array_fill_keys($alfabet, 0);
for ($L=0; $L<80*$countalfabet; $L++)
{
$lettr = floor(mt_rand ( 0, $countalfabet ));
$code[$alfabet[$lettr]]++;
}
foreach($code as $L => $Freq)
{
for($F=0; $F<$Freq; $F++)
{
echo $L;
}
echo "\n<br/>";
}
?>