mt_getrandmax()
Aprende la función mt_getrandmax() en PHP, que devuelve el valor máximo que puede generar mt_rand() y cómo usarla para normalizar números aleatorios.
La función mt_getrandmax() en PHP devuelve el entero más grande posible que mt_rand() puede generar. No recibe argumentos y devuelve un valor constante durante toda la vida del script, por lo que se usa principalmente como límite superior conocido al escalar o normalizar números aleatorios.
Esta página cubre qué devuelve la función, la sintaxis, por qué importa el valor, cómo convertirlo en un float aleatorio, errores comunes y cómo difiere del antiguo getrandmax().
¿Qué es la función mt_getrandmax()?
mt_getrandmax() es una función integrada de PHP que devuelve un int — el valor más grande que mt_rand() puede producir. Dado que mt_rand() utiliza el generador de números pseudoaleatorios Mersenne Twister, esta función expone el límite superior del rango de salida de ese generador.
El valor depende de la plataforma, pero en toda compilación moderna de PHP es 2147483647 (2^31 - 1). No crece en sistemas de 64 bits — mt_rand() siempre trabaja dentro del rango de 32 bits, por lo que mt_getrandmax() devuelve el mismo número en todas partes. Trátalo como una constante durante la ejecución de tu script.
Sintaxis
mt_getrandmax(): int- Parámetros: ninguno.
- Valor de retorno: el entero máximo que
mt_rand()puede devolver.
Cómo usar la función mt_getrandmax()
Usar mt_getrandmax() es sencillo — llámala sin argumentos. Aquí hay un ejemplo básico:
Uso básico
El código anterior obtiene el límite superior y lo almacena en una variable para uso posterior.
Definir un rango explícito
Puedes combinar mt_getrandmax() con mt_rand() para hacer explícito el rango de salida completo. Las dos llamadas siguientes son equivalentes — llamar a mt_rand() sin argumentos ya devuelve un valor entre 0 y mt_getrandmax():
<?php
$max = mt_getrandmax();
$randomNumber = mt_rand(0, $max);
echo $randomNumber, "\n"; // some value in 0..2147483647
echo mt_rand(), "\n"; // identical range, no arguments needed
?>Generar un Float Aleatorio entre 0 y 1
El uso real más común de mt_getrandmax() es normalizar un entero aleatorio en un float dentro del rango [0, 1). Divide el entero aleatorio por el máximo:
<?php
$ratio = mt_rand() / (mt_getrandmax() + 1);
echo $ratio; // e.g. 0.4173...
?>Sumar 1 al divisor mantiene el resultado estrictamente por debajo de 1. Para escalar a cualquier rango [$min, $max], multiplica la razón por el intervalo:
<?php
$min = 5;
$max = 25;
$value = $min + $ratio * ($max - $min);Errores Comunes
- No es un setter.
mt_getrandmax()solo lee el límite superior — no hay forma de cambiarlo. Para restringir la salida, pasaminymaxamt_rand(). - No acepta argumentos. Pasar alguno generará un
ArgumentCountErroren PHP 8+. - No es criptográficamente segura. Ni
mt_rand()ni su rango son seguros para contraseñas, tokens o claves. Para aleatoriedad sensible a la seguridad usarandom_int()orandom_bytes(). - Evita el truco del módulo para rangos.
mt_rand() % $nintroduce sesgo hacia valores más pequeños. Prefieremt_rand(0, $n - 1).
mt_getrandmax() vs getrandmax()
PHP incluye un par paralelo de generadores. getrandmax() informa el límite del antiguo generador rand(), mientras que mt_getrandmax() informa el límite para mt_rand(). Desde PHP 7.1, rand() y mt_rand() usan internamente el mismo motor Mersenne Twister, por lo que ambas funciones devuelven 2147483647 — pero aun así debes emparejar cada *getrandmax() con su generador correspondiente por claridad.
Conclusión
mt_getrandmax() devuelve el límite superior del generador Mersenne Twister de PHP (2147483647 en compilaciones modernas). Su principal utilidad es como divisor para producir floats aleatorios normalizados y rangos escalados. Para aleatoriedad segura usa random_int(), y recuerda que la función es de solo lectura — usa mt_rand($min, $max) para restringir resultados. Consulta también mt_srand() para inicializar el generador.