W3docs

rand()

Aprende a usar la función rand() en PHP para generar enteros aleatorios, su sintaxis, casos de uso y cuándo evitarla.

La función rand() en PHP genera un entero pseudoaleatorio. Este capítulo cubre su sintaxis, cómo funcionan los argumentos opcionales de rango, la diferencia entre rand() y la más rápida mt_rand(), por qué nunca deberías usar ninguna de las dos para seguridad, y algunos patrones prácticos como lanzar un dado o elegir un elemento aleatorio de un array.

Qué hace la función rand()

rand() es una función integrada de PHP que devuelve un entero aleatorio. Sin argumentos, devuelve un valor entre 0 y getrandmax() (el valor más grande que puede producir el generador — al menos 32767). Cuando pasas un $min y un $max, devuelve un entero en el rango inclusivo $min ≤ n ≤ $max.

Produce números pseudoaleatorios: valores que parecen aleatorios pero son generados por un algoritmo determinista a partir de una semilla interna. Eso está bien para juegos, muestreo y datos de prueba, pero no para nada donde la predictibilidad sea un riesgo (consulta Seguridad más abajo).

Sintaxis

rand(): int
rand(int $min, int $max): int
ParámetroDescripción
$minOpcional. El valor más bajo a devolver. Por defecto es 0.
$maxOpcional. El valor más alto a devolver. Por defecto es getrandmax().

$min y $max son inclusivos, por lo que rand(1, 6) puede devolver 1, 6 o cualquier valor intermedio. Si pasas $min mayor que $max, PHP 8 lanza un ValueError.

Uso básico

php— editable, runs on the server

Aquí llamamos a rand() con un rango, almacenamos el resultado en $result y lo imprimimos. Ejecuta el ejemplo varias veces y obtendrás un número diferente en cada ejecución.

Casos de uso comunes

Algunos patrones que usarás con frecuencia:

<?php
// 1. Roll a six-sided die
$die = rand(1, 6);

// 2. Pick a random element from an array
$colors = ['red', 'green', 'blue'];
$color  = $colors[rand(0, count($colors) - 1)];

// 3. A coin flip
$side = rand(0, 1) === 0 ? 'heads' : 'tails';

echo "Die: $die, Color: $color, Coin: $side";
?>

Para seleccionar un elemento de un array, PHP también ofrece el helper dedicado array_rand(), que es más claro que calcular el índice manualmente.

rand() vs mt_rand()

mt_rand() utiliza el algoritmo Mersenne Twister. Es más rápido y tiene mejores propiedades estadísticas que el rand() heredado, por lo que es la opción preferida de uso general. Ambos comparten la misma firma:

<?php
$a = rand(1, 100);     // legacy generator
$b = mt_rand(1, 100);  // Mersenne Twister — recommended
echo "$a and $b";
?>

Desde PHP 7.1, rand() es en realidad un alias de mt_rand() internamente, por lo que se comportan igual en PHP moderno. Prefiere mt_rand() en código nuevo para mayor claridad. Su compañero mt_getrandmax() te indica el valor más grande que puede devolver.

Semilla

Puedes inicializar el generador con srand() (o mt_srand() para mt_rand()). Usar una semilla fija hace que la secuencia sea reproducible — útil para pruebas:

<?php
srand(42);
echo rand(1, 100), "\n"; // same output every run for seed 42
?>

Desde PHP 4.2 casi nunca necesitas llamar a srand() manualmente — PHP inicializa el generador automáticamente en el primer uso.

Cuándo no usar rand()

rand() y mt_rand() no son criptográficamente seguras. Su salida es predecible, por lo que nunca las uses para contraseñas, tokens, IDs de sesión, enlaces de restablecimiento de contraseña ni nada sensible a la seguridad. Para esos casos, usa un CSPRNG:

<?php
$secureInt   = random_int(1, 100);     // cryptographically secure integer
$secureBytes = random_bytes(16);       // 16 random bytes
echo $secureInt, ' ', bin2hex($secureBytes);
?>

random_int() tiene la misma firma (min, max) que rand(), por lo que suele ser un reemplazo directo cuando importa la seguridad.

Resumen

  • rand($min, $max) devuelve un entero pseudoaleatorio en un rango inclusivo; sin argumentos abarca de 0 a getrandmax().
  • Prefiere mt_rand() para uso general — es más rápido y con mejor distribución (y rand() es un alias desde PHP 7.1).
  • Usa random_int() / random_bytes() siempre que el valor deba ser impredecible.

Para más información sobre valores numéricos y helpers matemáticos, consulta PHP Numbers y PHP Math.

Práctica

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