W3docs

lcg_value()

Découvrez la fonction lcg_value() en PHP, utilisée pour générer un nombre pseudo-aléatoire avec le générateur congruentiel linéaire (LCG).

La fonction lcg_value() en PHP est une fonction intégrée qui génère un flottant pseudo-aléatoire à l'aide de l'algorithme du générateur congruentiel linéaire (LCG). Elle ne prend aucun paramètre et repose sur une graine interne fixe pour produire sa séquence. Cette page explique ce que la fonction retourne, comment l'utiliser, comment mettre à l'échelle son résultat dans une plage donnée, et quand préférer une alternative plus sécurisée.

Qu'est-ce que la fonction lcg_value() ?

Un générateur congruentiel linéaire est un algorithme classique et léger qui produit une séquence de nombres qui semblent aléatoires mais sont entièrement déterminés par une graine de départ. PHP encapsule ceci dans lcg_value(), qui retourne un flottant dans l'intervalle (0, 1) — c'est-à-dire strictement supérieur à 0 et strictement inférieur à 1.

Deux caractéristiques sont importantes en pratique :

  • Aucun argument. On l'appelle avec lcg_value() avec des parenthèses vides ; passer des arguments n'a aucun effet.
  • Résultat flottant. Elle retourne toujours un float, jamais un entier. Pour obtenir un entier, il faut mettre le résultat à l'échelle soi-même (illustré ci-dessous).

Comment utiliser la fonction lcg_value()

L'utilisation de la fonction lcg_value() en PHP est simple. Voici un exemple de base :

php— editable, runs on the server

Dans cet exemple, nous appelons la fonction lcg_value() pour générer un nombre pseudo-aléatoire. Nous stockons ensuite le résultat dans une variable et l'affichons à l'écran.

Générer des nombres dans une plage spécifique

Puisque lcg_value() retourne un flottant compris entre 0 et 1, vous pouvez le mettre à l'échelle pour l'adapter à une plage souhaitée ou générer des entiers :

<?php
// Generate a random integer between 1 and 100
$min = 1;
$max = 100;
$random_int = (int)($min + lcg_value() * ($max - $min + 1));

echo $random_int;
?>

Remarques importantes

  • Non cryptographiquement sécurisé : L'algorithme LCG est prévisible et ne doit pas être utilisé pour des tâches sensibles à la sécurité comme la génération de jetons, de mots de passe ou d'identifiants de session. À des fins cryptographiques, utilisez random_int() ou random_bytes().
  • Graine fixe : La fonction utilise une graine interne fixe, ce qui signifie que la séquence de nombres sera identique d'une exécution de script à l'autre, sauf si le processus PHP est redémarré.
  • Plage exclusive : La valeur retournée n'est jamais exactement 0 ou 1, de sorte que la formule d'entier mis à l'échelle ci-dessus peut inclure en toute sécurité les deux extrémités de votre plage $min$max.
  • Déprécié en PHP 8.4 : À partir de PHP 8.4, lcg_value() est déprécié en faveur de \Random\Randomizer::getFloat(). Il fonctionne toujours mais émet un avis de dépréciation ; préférez donc la nouvelle API dans le nouveau code.

lcg_value() par rapport aux autres fonctions aléatoires

lcg_value() est l'une des plusieurs fonctions d'aléatoire disponibles en PHP. Choisissez en fonction de vos besoins :

  • Pour des entiers aléatoires dans une plage, rand() et mt_rand() sont généralement plus pratiques que mettre lcg_value() à l'échelle manuellement.
  • Pour connaître la borne supérieure que ces générateurs peuvent retourner, consultez getrandmax() et mt_getrandmax().
  • Pour des séquences reproductibles lors des tests, initialisez le générateur Mersenne Twister avec mt_srand().
  • Pour une aléatoire sensible à la sécurité, préférez random_int() à toutes les options ci-dessus.

Conclusion

La fonction lcg_value() offre un moyen simple de générer des flottants pseudo-aléatoires en PHP. Bien qu'elle soit utile pour des simulations basiques ou des applications non sensibles à la sécurité, le développement PHP moderne favorise généralement random_int() pour une meilleure aléatoire et sécurité. Nous espérons que ce guide vous aidera à comprendre comment utiliser lcg_value() efficacement dans vos projets.

Practice

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