W3docs

mt_rand()

La función mt_rand() en PHP genera un entero aleatorio usando el algoritmo Mersenne Twister. Aprende su sintaxis, parámetros y casos de uso.

La función mt_rand() en PHP genera un entero aleatorio usando el algoritmo Mersenne Twister. Esta página cubre su sintaxis y parámetros, en qué se diferencia del antiguo rand(), cómo sembrarla para obtener resultados reproducibles, y cuándo deberías usar una alternativa criptográficamente segura.

Qué hace la función mt_rand()

mt_rand() devuelve un entero pseudoaleatorio. "Pseudoaleatorio" significa que los números provienen de un algoritmo determinista inicializado con un estado interno — parecen aleatorios, pero la misma semilla siempre produce la misma secuencia. El algoritmo Mersenne Twister que utiliza produce números de mayor calidad y más uniformemente distribuidos que el generador libc del antiguo rand(), y tiene un período extremadamente largo (no se repetirá durante 2^19937 − 1 valores).

Ten en cuenta que mt_rand() no es criptográficamente seguro: si el estado interno es conocido o recuperable, se pueden predecir valores futuros. Para contraseñas, tokens, sales o cualquier cosa sensible a la seguridad, usa random_int() en su lugar.

Sintaxis

mt_rand(): int
mt_rand(int $min, int $max): int
ParámetroDescripción
$minOpcional. El valor más bajo que puede devolver (inclusive). Por defecto es 0.
$maxOpcional. El valor más alto que puede devolver (inclusive). Por defecto es mt_getrandmax().

Valor de retorno: un entero aleatorio entre $min y $max inclusive, o entre 0 y mt_getrandmax() cuando se llama sin argumentos. Si $min es mayor que $max, PHP emite una advertencia y devuelve false.

Cómo usar la función mt_rand()

Llámala con dos argumentos para elegir un número de un rango inclusivo, o sin ninguno para obtener un valor en el rango completo:

php— editable, runs on the server

La primera llamada restringe la salida al rango 1–100; la segunda abarca el rango completo, cuyo límite superior puedes inspeccionar con mt_getrandmax() (comúnmente 2147483647).

Casos de uso comunes

Simular una tirada de dados:

<?php
$roll = mt_rand(1, 6);
echo "You rolled a $roll\n";
?>

Elegir un elemento aleatorio de un array generando un índice válido:

<?php
$colors = ['red', 'green', 'blue', 'yellow'];
$pick = $colors[mt_rand(0, count($colors) - 1)];
echo "Random color: $pick\n";
?>

Usar count($colors) - 1 como límite superior es importante: los índices de array son de base cero, por lo que un array de cuatro elementos tiene índices válidos 03. (Para esta tarea específica, array_rand() es una opción más directa.)

Sembrar para resultados reproducibles

Dado que Mersenne Twister es determinista, sembrarlo con mt_srand() hace que la secuencia sea repetible — útil para pruebas, simulaciones o cualquier momento en que necesites que la salida "aleatoria" sea la misma en cada ejecución:

<?php
mt_srand(42);
echo mt_rand(), "\n";   // same value every run for seed 42

mt_srand(42);           // reset to the same seed
echo mt_rand(), "\n";   // identical to the line above
?>

Sin una semilla explícita, PHP inicializa automáticamente el generador, por lo que obtienes una salida diferente en cada ejecución.

Alternativa segura: random_int()

Cuando la aleatoriedad no debe ser adivinable — tokens de sesión, códigos de restablecimiento de contraseña, claves API — mt_rand() no es la herramienta adecuada. Usa random_int(), que obtiene valores de la fuente criptográficamente segura del sistema operativo:

<?php
// Cryptographically secure integer between 1 and 100
$secure = random_int(1, 100);
echo $secure, "\n";
?>

Comparte la misma firma (int $min, int $max), por lo que reemplazarla es sencillo.

mt_rand() vs. rand()

Desde PHP 7.1, rand() es un alias de mt_rand() y usa el mismo motor Mersenne Twister, por lo que se comportan de forma idéntica. En versiones anteriores, rand() usaba el generador libc más débil de la plataforma. Prefiere mt_rand() cuando quieras resultados consistentes y de alta calidad en todas las versiones de PHP.

Conclusión

mt_rand() es la función principal para obtener enteros pseudoaleatorios rápidos y de buena calidad en PHP. Úsala para juegos, muestreo, mezcla y aleatoriedad general; siémbrala con mt_srand() cuando necesites secuencias reproducibles; y cambia a random_int() siempre que la seguridad sea importante.

Práctica

Práctica
¿Cuál es el propósito de la función mt_rand() en PHP?
¿Cuál es el propósito de la función mt_rand() en PHP?
Was this page helpful?