mt_rand

mt_rand()
mt_rand($min, $max)

Zwraca losową liczbę całkowitą z generatora Mersenne Twister. Bez parametrów od 0 do wartości mt_getrandmax(), z dwoma parametrami z podanego przedziału łącznie z obiema granicami. Jest szybka i nadaje się do gier, symulacji i przykładowych danych.

Parametry

  • $min – najmniejsza możliwa wartość.
  • $max – największa możliwa wartość. Nie może być mniejsza niż $min.

Przykłady

// rzut kostką: mogą wypaść obie granice
$roll = mt_rand(1, 6);
var_dump($roll >= 1 && $roll <= 6); // bool(true)
// bez parametrów: od 0 do mt_getrandmax()
echo mt_getrandmax(); // 2147483647
var_dump(mt_rand() <= mt_getrandmax()); // bool(true)
// to samo ziarno daje ten sam ciąg liczb
mt_srand(42);
$first = array(mt_rand(1, 100), mt_rand(1, 100));
mt_srand(42);
$second = array(mt_rand(1, 100), mt_rand(1, 100));
var_dump($first === $second); // bool(true)
// powrót do losowego ziarna
mt_srand();
// losowa liczba dziesiętna od 0 do 1
$number = mt_rand() / mt_getrandmax();
var_dump($number >= 0 && $number <= 1); // bool(true)
// liczbę, której nie da się odgadnąć, zwraca random_int
$code = random_int(100000, 999999);
var_dump($code >= 100000 && $code <= 999999); // bool(true)

Na co uważać

  • Nie jest kryptograficznie bezpieczna. Kilkaset kolejnych wyników wystarczy, by ustalić stan generatora i wszystkie następne liczby. Hasła, tokeny, kody potwierdzające i losowania opieraj na random_int().
  • Po wywołaniu mt_srand() ze stałą wartością zwraca zawsze ten sam ciąg. Pomaga to w testach, w działającej aplikacji nie ustawiaj ziarna ręcznie.
  • Gdy $max jest mniejsze niż $min, w PHP 7 zwraca false z ostrzeżeniem, a od PHP 8.0 rzuca wyjątek ValueError.
  • Od PHP 7.1 funkcja rand() jest tylko inną nazwą mt_rand.
  • Przedział ustalaj parametrami, nie resztą z dzielenia. Wyrażenie mt_rand() % 10 nie daje wszystkich liczb z tym samym prawdopodobieństwem.

Powiązane funkcje:
rand()
random_int()
shuffle()