W3docs

lcg_value()

Aprende a usar la función lcg_value() en PHP para generar números pseudoaleatorios con el generador congruencial lineal (LCG).

La función lcg_value() en PHP es una función integrada que genera un número float pseudoaleatorio usando el algoritmo del generador congruencial lineal (LCG). No acepta parámetros y se basa en una semilla interna fija para producir su secuencia. Esta página explica qué devuelve la función, cómo usarla, cómo escalar su salida a un rango determinado y cuándo conviene usar una alternativa más segura.

¿Qué es la función lcg_value()?

Un generador congruencial lineal es un algoritmo clásico y ligero para producir una secuencia de números que parecen aleatorios, pero están completamente determinados por una semilla inicial. PHP encapsula esto en lcg_value(), que devuelve un float en el rango (0, 1) — es decir, mayor que 0 y menor que 1.

Dos características son relevantes en la práctica:

  • Sin argumentos. Se llama como lcg_value() con paréntesis vacíos; pasar argumentos no tiene ningún efecto.
  • Resultado float. Siempre devuelve un float, nunca un entero. Para obtener un entero, hay que escalar el resultado manualmente (se muestra a continuación).

Cómo usar la función lcg_value()

Usar la función lcg_value() en PHP es sencillo. Aquí hay un ejemplo básico:

php— editable, runs on the server

En este ejemplo, llamamos a la función lcg_value() para generar un número pseudoaleatorio. Luego almacenamos el resultado en una variable y lo mostramos en pantalla.

Generar números en un rango específico

Dado que lcg_value() devuelve un float entre 0 y 1, se puede escalar para ajustarlo a un rango deseado o generar enteros:

<?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;
?>

Notas importantes

  • No es criptográficamente segura: El algoritmo LCG es predecible y no debe usarse para tareas sensibles a la seguridad, como generar tokens, contraseñas o IDs de sesión. Para fines criptográficos, usa random_int() o random_bytes().
  • Semilla fija: La función utiliza una semilla interna fija, lo que significa que la secuencia de números será idéntica en diferentes ejecuciones del script a menos que se reinicie el proceso PHP.
  • El rango es exclusivo: El valor devuelto nunca es exactamente 0 ni 1, por lo que la fórmula de entero escalado anterior puede incluir de forma segura ambos extremos del rango $min$max.
  • Obsoleta en PHP 8.4: A partir de PHP 8.4, lcg_value() está obsoleta en favor de \Random\Randomizer::getFloat(). Sigue funcionando, pero emite un aviso de obsolescencia, por lo que se recomienda usar la API más nueva en código nuevo.

lcg_value() frente a otras funciones de aleatoriedad

lcg_value() es una de las varias funciones de aleatoriedad disponibles en PHP. Elige según lo que necesites:

  • Para enteros aleatorios en un rango, rand() y mt_rand() suelen ser más cómodos que escalar lcg_value() manualmente.
  • Para conocer el límite superior que pueden devolver esos generadores, consulta getrandmax() y mt_getrandmax().
  • Para secuencias reproducibles durante las pruebas, inicializa el generador Mersenne Twister con mt_srand().
  • Para aleatoriedad sensible a la seguridad, prefiere random_int() sobre todas las anteriores.

Conclusión

La función lcg_value() ofrece una forma sencilla de generar floats pseudoaleatorios en PHP. Aunque es útil para simulaciones básicas o aplicaciones no relacionadas con la seguridad, el desarrollo moderno en PHP generalmente prefiere random_int() por una mayor aleatoriedad y seguridad. Esperamos que esta guía te ayude a entender cómo usar lcg_value() de forma efectiva en tus proyectos.

Práctica

Práctica
¿Qué hace la función lcg_value() en PHP?
¿Qué hace la función lcg_value() en PHP?
Was this page helpful?