PHP:
Génération de nombres aléatoires
Comment faire :
PHP offre plusieurs fonctions pour générer des nombres aléatoires, mais les plus couramment utilisées sont rand()
, mt_rand()
, et pour des fins cryptographiques, random_int()
.
Pour générer un nombre aléatoire simple entre 0 et getrandmax() (la plus grande valeur possible retournée par rand()
), vous pouvez utiliser :
echo rand();
Pour une plage plus spécifique, telle que entre 1 et 100 :
echo rand(1, 100);
Cependant, mt_rand()
est un meilleur choix pour la vitesse et l’aléatoire :
echo mt_rand(1, 100);
La sortie pour les deux pourrait être n’importe quoi entre 1 et 100, dépendant de la randomisation, par exemple, 42
.
Pour les contextes cryptographiques ou de sécurité, où l’imprévisibilité est cruciale, random_int()
est le choix préféré car il génère des entiers pseudo-aléatoires cryptographiquement sûrs :
echo random_int(1, 100);
Là encore, la sortie est un nombre aléatoire entre 1 et 100, comme 84
, mais avec une garantie plus forte d’aléatoire.
Plongée profonde
La fonction rand()
est présente dans PHP depuis ses premières versions, servant comme l’approche initiale pour générer des nombres aléatoires. Cependant, elle n’est pas le meilleur choix pour les applications nécessitant un degré élevé de randomisation à cause de son algorithme relativement prévisible.
mt_rand()
, introduit dans PHP 4, est basé sur l’algorithme Twister de Mersenne - de loin supérieur en termes de vitesse et de l’aléatoire qu’il peut générer par rapport à rand()
. Il est rapidement devenu l’option privilégiée pour la plupart des besoins non cryptographiques.
Pour les applications sensibles à la sécurité, random_int()
a été introduit dans PHP 7 pour générer des entiers pseudo-aléatoires cryptographiquement sûrs en utilisant des octets aléatoires du générateur de nombres aléatoires du système. Il est considérablement plus sûr que rand()
ou mt_rand()
, le rendant le meilleur choix pour générer des jetons, des clés ou d’autres éléments où la prévisibilité pourrait conduire à des vulnérabilités de sécurité.
Malgré ces améliorations, il est crucial de choisir la bonne fonction basée sur le contexte de l’application. Pour un usage général, mt_rand()
suffit, mais pour tout ce qui pourrait être ciblé ou exploité, random_int()
est la voie à suivre, fournissant à la fois aléatoire et sécurité.