W3docs

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

php— editable, runs on the server

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, pasa min y max a mt_rand().
  • No acepta argumentos. Pasar alguno generará un ArgumentCountError en 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 usa random_int() o random_bytes().
  • Evita el truco del módulo para rangos. mt_rand() % $n introduce sesgo hacia valores más pequeños. Prefiere mt_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.

Práctica

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