mt_rand

mt_rand()
mt_rand($min, $max)

Renvoie un entier aléatoire issu du générateur Mersenne Twister. Sans paramètres de 0 à la valeur de mt_getrandmax(), avec deux paramètres dans l’intervalle donné, les deux bornes comprises. Elle est rapide et convient aux jeux, aux simulations et aux données d’exemple.

Paramètres

  • $min – la plus petite valeur possible.
  • $max – la plus grande valeur possible. Elle ne doit pas être inférieure à $min.

Exemples

// un lancer de dé : les deux bornes peuvent sortir
$roll = mt_rand(1, 6);
var_dump($roll >= 1 && $roll <= 6); // bool(true)
// sans paramètres : de 0 à mt_getrandmax()
echo mt_getrandmax(); // 2147483647
var_dump(mt_rand() <= mt_getrandmax()); // bool(true)
// la même graine donne la même suite de nombres
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)
// retour à une graine aléatoire
mt_srand();
// un nombre décimal aléatoire de 0 à 1
$number = mt_rand() / mt_getrandmax();
var_dump($number >= 0 && $number <= 1); // bool(true)
// un nombre impossible à deviner vient de random_int
$code = random_int(100000, 999999);
var_dump($code >= 100000 && $code <= 999999); // bool(true)

Points d’attention

  • Elle n’est pas sûre du point de vue cryptographique. Quelques centaines de résultats consécutifs suffisent pour retrouver l’état du générateur et tous les nombres suivants. Pour les mots de passe, les jetons, les codes de vérification et les tirages au sort, utilisez random_int().
  • Après un appel de mt_srand() avec une valeur fixe, elle renvoie toujours la même suite. C’est utile dans les tests, en production n’initialisez pas le générateur à la main.
  • Quand $max est inférieur à $min, elle renvoie false avec un avertissement en PHP 7 et lève une exception ValueError depuis PHP 8.0.
  • Depuis PHP 7.1, la fonction rand() n’est qu’un autre nom de mt_rand.
  • Fixez l’intervalle avec les paramètres, pas avec le reste d’une division. L’expression mt_rand() % 10 ne donne pas tous les nombres avec la même probabilité.

Fonctions associées :
rand()
random_int()
shuffle()