W3docs

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ètreDescription
$minOptionnel. La valeur la plus basse à retourner. Par défaut 0.
$maxOptionnel. 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

php— editable, runs on the server

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 couvre 0 jusqu'à getrandmax().
  • Préférez mt_rand() pour un usage général — il est plus rapide et mieux distribué (et rand() 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.

Pratique

Pratique
Que fait la fonction rand() en PHP ?
Que fait la fonction rand() en PHP ?
Was this page helpful?