mt_srand()
Hoy hablaremos de la función mt_srand() en PHP, usada para inicializar el generador de números aleatorios de mt_rand().
Hoy hablaremos de la función mt_srand() en PHP. Esta función inicializa el generador de números aleatorios utilizado por mt_rand(). Nota: mt_srand() está obsoleta desde PHP 8.1 y fue eliminada en PHP 8.4. Para aplicaciones PHP modernas, usa random_int() o random_bytes() en su lugar.
¿Qué es la función mt_srand()?
La función mt_srand() inicializa el generador de números aleatorios Mersenne Twister con un valor de semilla específico. Cuando se proporciona una semilla fija, mt_rand() produce una secuencia de números predecible y reproducible. Este comportamiento determinista es principalmente útil para pruebas, depuración o escenarios en los que se requiere una salida aleatoria consistente.
Cómo usar la función mt_srand()
Usar mt_srand() es sencillo. Aquí tienes un ejemplo básico:
¿Cómo usar la función mt_srand() en PHP?
En este ejemplo, mt_srand(12345) establece la semilla del generador. Las llamadas posteriores a mt_rand() producirán la misma salida en distintas ejecuciones porque la semilla permanece constante. El resultado se almacena en $result y se imprime en pantalla.
Nota de compatibilidad de versiones: En PHP 8.1+, este código generará una advertencia de obsolescencia. Para PHP 8.4+ y proyectos modernos, reemplaza mt_srand()/mt_rand() con random_int() para una generación de números aleatorios segura y compatible.
El reemplazo moderno
mt_srand() existe para hacer que la aleatoriedad sea reproducible fijando una semilla. Las funciones modernas y criptográficamente seguras no pueden ser inicializadas intencionalmente: obtienes valores impredecibles cada vez:
<?php
// Modern, secure replacement — no seeding required
$result = random_int(1, 100); // a secure random integer between 1 and 100 (inclusive)
echo $result;
?>Dado que random_int() obtiene datos de la fuente criptográficamente segura del sistema operativo, deberías usarla para cualquier cosa sensible en cuanto a seguridad (tokens, contraseñas, códigos de un solo uso). La contrapartida es que pierdes reproducibilidad: no hay ninguna semilla que establecer, por lo que el mismo código nunca produce el mismo número dos veces.
Si realmente necesitas una secuencia reproducible (por ejemplo, generar los mismos fixtures de prueba en cada ejecución) en PHP 8.2+, usa la clase \Random\Randomizer basada en objetos y con soporte para semillas, junto con el motor Mt19937, en lugar de la obsoleta mt_srand().
Conclusión
Aunque mt_srand() proporciona secuencias aleatorias deterministas para código legado o necesidades específicas de prueba, está obsoleta en PHP 8.1 y fue eliminada en PHP 8.4. El desarrollo moderno en PHP debe basarse en random_int() o random_bytes() para una generación de números aleatorios segura y compatible. Esperamos que esta guía aclare el contexto histórico y el uso correcto de mt_srand() en entornos PHP más antiguos.