rand()
Découvrez la fonction rand() en PHP pour générer des entiers aléatoires, sa syntaxe, ses cas d'utilisation et ses limites de sécurité.
La fonction rand() en PHP génère un entier pseudo-aléatoire. Ce chapitre couvre sa
syntaxe, le fonctionnement des arguments de plage optionnels, la différence entre rand() et la
version plus rapide mt_rand(), pourquoi vous ne devriez jamais utiliser l'une ou l'autre pour
la sécurité, ainsi que quelques modèles pratiques comme lancer un dé ou choisir un élément
aléatoire dans un tableau.
Ce que fait la fonction rand()
rand() est une fonction PHP intégrée qui retourne un entier aléatoire. Sans arguments, elle
retourne une valeur entre 0 et getrandmax() (la plus grande valeur que le
générateur peut produire — au moins 32767). Lorsque vous passez un $min et un $max, elle retourne
un entier dans la plage inclusive $min ≤ n ≤ $max.
Elle produit des nombres pseudo-aléatoires : des valeurs qui semblent aléatoires mais sont générées par un algorithme déterministe à partir d'une valeur de départ interne. C'est parfait pour les jeux, l'échantillonnage et les données de test, mais pas pour des situations où la prévisibilité est un risque (voir Sécurité ci-dessous).
Syntaxe
rand(): int
rand(int $min, int $max): int| Paramètre | Description |
|---|---|
$min | Optionnel. La valeur la plus basse à retourner. Par défaut 0. |
$max | Optionnel. La valeur la plus haute à retourner. Par défaut getrandmax(). |
$min et $max sont inclusifs, donc rand(1, 6) peut retourner 1, 6, ou n'importe quelle
valeur entre les deux. Si vous passez un $min supérieur à $max, PHP 8 lève une ValueError.
Utilisation de base
Ici, nous appelons rand() avec une plage, stockons le résultat dans $result et l'affichons.
Exécutez l'exemple plusieurs fois et vous obtiendrez un nombre différent à chaque exécution.
Cas d'utilisation courants
Quelques modèles que vous utiliserez souvent :
<?php
// 1. Roll a six-sided die
$die = rand(1, 6);
// 2. Pick a random element from an array
$colors = ['red', 'green', 'blue'];
$color = $colors[rand(0, count($colors) - 1)];
// 3. A coin flip
$side = rand(0, 1) === 0 ? 'heads' : 'tails';
echo "Die: $die, Color: $color, Coin: $side";
?>Pour choisir un élément de tableau, PHP propose également le helper dédié
array_rand(), qui est plus clair que de calculer l'index
manuellement.
rand() vs mt_rand()
mt_rand() utilise l'algorithme Mersenne Twister. Il est plus rapide et
possède de meilleures propriétés statistiques que le rand() hérité, ce qui en fait le choix
préféré pour un usage général. Les deux partagent la même signature :
<?php
$a = rand(1, 100); // legacy generator
$b = mt_rand(1, 100); // Mersenne Twister — recommended
echo "$a and $b";
?>Depuis PHP 7.1, rand() est en réalité un alias de mt_rand() en interne, ils se comportent
donc de la même manière sur un PHP moderne. Préférez mt_rand() dans le nouveau code pour plus
de clarté. Sa fonction complémentaire
mt_getrandmax() vous indique la plus grande valeur qu'il peut retourner.
Initialisation du générateur
Vous pouvez initialiser le générateur avec srand() (ou mt_srand() pour mt_rand()).
L'initialisation avec une valeur fixe rend la séquence reproductible — pratique pour les tests :
<?php
srand(42);
echo rand(1, 100), "\n"; // same output every run for seed 42
?>Depuis PHP 4.2, vous n'avez presque jamais besoin d'appeler srand() manuellement — PHP
initialise le générateur automatiquement à la première utilisation.
Quand ne pas utiliser rand()
rand() et mt_rand() ne sont pas cryptographiquement sécurisés. Leur sortie est prévisible,
donc ne les utilisez jamais pour des mots de passe, des jetons, des identifiants de session, des
liens de réinitialisation de mot de passe, ou quoi que ce soit de sensible en matière de sécurité.
Pour ces cas, utilisez un CSPRNG :
<?php
$secureInt = random_int(1, 100); // cryptographically secure integer
$secureBytes = random_bytes(16); // 16 random bytes
echo $secureInt, ' ', bin2hex($secureBytes);
?>random_int() a la même signature (min, max) que rand(), ce qui en fait généralement un
remplacement direct lorsque la sécurité est importante.
Résumé
rand($min, $max)retourne un entier pseudo-aléatoire dans une plage inclusive ; sans arguments, elle couvre0jusqu'àgetrandmax().- Préférez
mt_rand()pour un usage général — il est plus rapide et mieux distribué (etrand()en est un alias depuis PHP 7.1). - Utilisez
random_int()/random_bytes()lorsque la valeur doit être imprévisible.
Pour en savoir plus sur les valeurs numériques et les helpers mathématiques, consultez PHP Numbers et PHP Math.