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:
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()orandom_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()ymt_rand()suelen ser más cómodos que escalarlcg_value()manualmente. - Para conocer el límite superior que pueden devolver esos generadores, consulta
getrandmax()ymt_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.