mt_rand()
Découvrez la fonction mt_rand() en PHP, qui génère un entier aléatoire à l'aide de l'algorithme Mersenne Twister.
La fonction mt_rand() en PHP génère un entier aléatoire à l'aide de l'algorithme Mersenne Twister. Cette page couvre sa syntaxe et ses paramètres, ses différences avec l'ancienne fonction rand(), comment l'initialiser pour obtenir des résultats reproductibles, et quand il vaut mieux utiliser une alternative cryptographiquement sécurisée.
Ce que fait la fonction mt_rand()
mt_rand() retourne un entier pseudo-aléatoire. « Pseudo-aléatoire » signifie que les nombres proviennent d'un algorithme déterministe initialisé par un état interne — ils semblent aléatoires, mais la même graine produit toujours la même séquence. L'algorithme Mersenne Twister qu'elle utilise génère des nombres de meilleure qualité, mieux distribués, que le générateur libc derrière l'ancienne rand(), et sa période est extrêmement longue (il ne se répètera pas avant 2^19937 − 1 valeurs).
Notez que mt_rand() n'est pas cryptographiquement sécurisée : si l'état interne est connu ou récupérable, les valeurs futures peuvent être prédites. Pour les mots de passe, les jetons, les sels ou tout ce qui est sensible en matière de sécurité, utilisez plutôt random_int().
Syntaxe
mt_rand(): int
mt_rand(int $min, int $max): int| Paramètre | Description |
|---|---|
$min | Facultatif. La valeur minimale que le résultat peut prendre (inclusive). Par défaut : 0. |
$max | Facultatif. La valeur maximale que le résultat peut prendre (inclusive). Par défaut : mt_getrandmax(). |
Valeur de retour : un entier aléatoire compris entre $min et $max inclus, ou entre 0 et mt_getrandmax() si la fonction est appelée sans arguments. Si $min est supérieur à $max, PHP émet un avertissement et retourne false.
Comment utiliser la fonction mt_rand()
Appelez-la avec deux arguments pour choisir un nombre dans un intervalle inclusif, ou sans argument pour obtenir une valeur sur la plage complète :
Le premier appel restreint le résultat à l'intervalle 1–100 ; le second couvre la plage complète, dont la borne supérieure peut être inspectée avec mt_getrandmax() (généralement 2147483647).
Cas d'utilisation courants
Simuler un lancer de dé :
<?php
$roll = mt_rand(1, 6);
echo "You rolled a $roll\n";
?>Choisir un élément aléatoire dans un tableau en générant un index valide :
<?php
$colors = ['red', 'green', 'blue', 'yellow'];
$pick = $colors[mt_rand(0, count($colors) - 1)];
echo "Random color: $pick\n";
?>Utiliser count($colors) - 1 comme borne supérieure est important : les index de tableau sont à base zéro, donc un tableau de quatre éléments a des index valides de 0 à 3. (Pour cette tâche spécifique, array_rand() est une option plus directe.)
Initialisation pour des résultats reproductibles
Comme Mersenne Twister est déterministe, l'initialiser avec mt_srand() rend la séquence répétable — utile pour les tests, les simulations, ou chaque fois que vous avez besoin que la sortie « aléatoire » soit identique à chaque exécution :
<?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
?>Sans graine explicite, PHP initialise automatiquement le générateur, vous obtenez donc une sortie différente à chaque exécution.
Alternative sécurisée : random_int()
Lorsque le caractère aléatoire ne doit pas être devinable — jetons de session, codes de réinitialisation de mot de passe, clés API — mt_rand() n'est pas le bon outil. Utilisez random_int(), qui puise dans la source cryptographiquement sécurisée du système d'exploitation :
<?php
// Cryptographically secure integer between 1 and 100
$secure = random_int(1, 100);
echo $secure, "\n";
?>Elle partage la même signature (int $min, int $max), donc le remplacement est simple.
mt_rand() vs. rand()
Depuis PHP 7.1, rand() est un alias de mt_rand() et utilise le même moteur Mersenne Twister, donc elles se comportent de manière identique. Sur les versions plus anciennes, rand() utilisait le générateur libc plus faible de la plateforme. Préférez mt_rand() pour obtenir des résultats cohérents et de haute qualité sur toutes les versions de PHP.
Conclusion
mt_rand() est la fonction de référence pour générer rapidement des entiers pseudo-aléatoires de bonne qualité en PHP. Utilisez-la pour les jeux, l'échantillonnage, le mélange et la randomisation générale ; initialisez-la avec mt_srand() lorsque vous avez besoin de séquences reproductibles ; et basculez vers random_int() dès que la sécurité est en jeu.