W3docs

mt_rand()

Функция mt_rand() в PHP генерирует случайное целое число с помощью алгоритма Вихрь Мерсенна. Узнайте синтаксис, параметры и отличия от rand().

Функция mt_rand() в PHP генерирует случайное целое число с использованием алгоритма Вихрь Мерсенна. На этой странице рассматриваются синтаксис и параметры функции, её отличия от устаревшей rand(), способ задания начального значения для воспроизводимых результатов, а также случаи, когда следует использовать криптографически безопасную альтернативу.

Что делает функция mt_rand()

mt_rand() возвращает псевдослучайное целое число. «Псевдослучайное» означает, что числа получаются с помощью детерминированного алгоритма, инициализированного внутренним состоянием — они выглядят случайными, но одно и то же начальное значение всегда даёт одну и ту же последовательность. Используемый алгоритм Вихрь Мерсенна генерирует числа более высокого качества с более равномерным распределением, чем генератор libc, лежащий в основе устаревшей rand(), и имеет исключительно длинный период (не повторится в течение 2^19937 − 1 значений).

Обратите внимание, что mt_rand() не является криптографически безопасной: если внутреннее состояние известно или может быть восстановлено, будущие значения можно предсказать. Для паролей, токенов, солей или чего-либо, связанного с безопасностью, используйте random_int().

Синтаксис

mt_rand(): int
mt_rand(int $min, int $max): int
ПараметрОписание
$minНеобязательный. Наименьшее возможное значение результата (включительно). По умолчанию 0.
$maxНеобязательный. Наибольшее возможное значение результата (включительно). По умолчанию mt_getrandmax().

Возвращаемое значение: случайное целое число в диапазоне от $min до $max включительно, или от 0 до mt_getrandmax() при вызове без аргументов. Если $min больше $max, PHP выдаёт предупреждение и возвращает false.

Как использовать функцию mt_rand()

Вызовите функцию с двумя аргументами, чтобы получить число из заданного диапазона, или без аргументов — для получения значения в полном диапазоне:

php— editable, runs on the server

Первый вызов ограничивает результат диапазоном 1–100; второй охватывает полный диапазон, верхнюю границу которого можно узнать с помощью mt_getrandmax() (обычно 2147483647).

Типичные случаи использования

Симуляция броска кубика:

<?php
$roll = mt_rand(1, 6);
echo "You rolled a $roll\n";
?>

Выбор случайного элемента массива путём генерации допустимого индекса:

<?php
$colors = ['red', 'green', 'blue', 'yellow'];
$pick = $colors[mt_rand(0, count($colors) - 1)];
echo "Random color: $pick\n";
?>

Использование count($colors) - 1 в качестве верхней границы важно: индексы массивов начинаются с нуля, поэтому массив из четырёх элементов имеет допустимые индексы 03. (Для этой конкретной задачи array_rand() является более прямым вариантом.)

Инициализация для воспроизводимых результатов

Поскольку алгоритм Вихрь Мерсенна является детерминированным, его инициализация с помощью mt_srand() делает последовательность повторяемой — это полезно для тестов, симуляций или в тех случаях, когда «случайный» вывод должен быть одинаковым при каждом запуске:

<?php
mt_srand(42);
echo mt_rand(), "\n";   // same value every run for seed 42

mt_srand(42);           // reset to the same seed
echo mt_rand(), "\n";   // identical to the line above
?>

Без явного начального значения PHP автоматически инициализирует генератор, поэтому при каждом запуске вывод будет разным.

Безопасная альтернатива: random_int()

Когда случайность не должна быть предсказуемой — для токенов сессий, кодов сброса пароля, API-ключей — mt_rand() является неподходящим инструментом. Используйте random_int(), которая получает данные из криптографически безопасного источника операционной системы:

<?php
// Cryptographically secure integer between 1 and 100
$secure = random_int(1, 100);
echo $secure, "\n";
?>

Функция имеет ту же сигнатуру (int $min, int $max), поэтому замена не составит труда.

mt_rand() против rand()

Начиная с PHP 7.1, rand() является псевдонимом mt_rand() и использует тот же движок Вихрь Мерсенна, поэтому они ведут себя одинаково. В более старых версиях rand() использовала более слабый генератор libc платформы. Предпочитайте mt_rand(), когда вам нужны стабильные результаты высокого качества в разных версиях PHP.

Заключение

mt_rand() — основная функция для быстрого получения псевдослучайных целых чисел хорошего качества в PHP. Используйте её для игр, выборки, перемешивания и общей рандомизации; инициализируйте с помощью mt_srand(), когда нужны воспроизводимые последовательности; и переходите на random_int(), когда важна безопасность.

Практика

Практика
Для чего используется функция mt_rand() в PHP?
Для чего используется функция mt_rand() в PHP?
Was this page helpful?