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