rand()
Conheça a função rand() no PHP, usada para gerar números inteiros aleatórios com ou sem intervalo definido.
A função rand() no PHP gera um número inteiro pseudoaleatório. Este capítulo aborda sua
sintaxe, como funcionam os argumentos de intervalo opcionais, a diferença entre rand() e a
função mais rápida mt_rand(), por que você nunca deve usar nenhuma delas para segurança, e
alguns padrões práticos como lançar um dado ou selecionar um elemento aleatório de um array.
O que a Função rand() Faz
rand() é uma função nativa do PHP que retorna um número inteiro aleatório. Sem argumentos, ela
retorna um valor entre 0 e getrandmax() (o maior valor que o
gerador pode produzir — pelo menos 32767). Quando você passa $min e $max, ela retorna um
inteiro no intervalo inclusivo $min ≤ n ≤ $max.
Ela produz números pseudoaleatórios: valores que parecem aleatórios, mas são gerados por um algoritmo determinístico a partir de uma semente interna. Isso é adequado para jogos, amostragem e dados de teste, mas não para situações em que a previsibilidade é um risco (veja Segurança abaixo).
Sintaxe
rand(): int
rand(int $min, int $max): int| Parâmetro | Descrição |
|---|---|
$min | Opcional. O menor valor a retornar. O padrão é 0. |
$max | Opcional. O maior valor a retornar. O padrão é getrandmax(). |
$min e $max são inclusivos, portanto rand(1, 6) pode retornar 1, 6 ou qualquer valor
entre eles. Se você passar $min maior que $max, o PHP 8 lança um ValueError.
Uso Básico
Aqui chamamos rand() com um intervalo, armazenamos o resultado em $result e o exibimos.
Execute o exemplo algumas vezes e você obterá um número diferente a cada execução.
Casos de Uso Comuns
Alguns padrões que você usará com frequência:
<?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 selecionar um elemento de um array, o PHP também oferece o auxiliar dedicado
array_rand(), que é mais claro do que calcular o índice
manualmente.
rand() vs mt_rand()
mt_rand() usa o algoritmo Mersenne Twister. É mais rápido e possui
melhores propriedades estatísticas do que o rand() legado, sendo a opção preferida para uso
geral. Os dois compartilham a mesma assinatura:
<?php
$a = rand(1, 100); // legacy generator
$b = mt_rand(1, 100); // Mersenne Twister — recommended
echo "$a and $b";
?>Desde o PHP 7.1, rand() é internamente um alias de mt_rand(), então eles se comportam da
mesma forma no PHP moderno. Prefira mt_rand() em código novo para maior clareza. Seu
complemento mt_getrandmax() informa o maior valor que ele pode
retornar.
Semeadura
Você pode semear o gerador com srand() (ou mt_srand() para mt_rand()). Semear com um
valor fixo torna a sequência reproduzível — útil para testes:
<?php
srand(42);
echo rand(1, 100), "\n"; // same output every run for seed 42
?>Desde o PHP 4.2, você quase nunca precisa chamar srand() manualmente — o PHP semeia o gerador
automaticamente no primeiro uso.
Quando Não Usar rand()
rand() e mt_rand() não são criptograficamente seguros. Sua saída é previsível, portanto
nunca os use para senhas, tokens, IDs de sessão, links de redefinição de senha ou qualquer coisa
sensível à segurança. Para esses casos, use um CSPRNG:
<?php
$secureInt = random_int(1, 100); // cryptographically secure integer
$secureBytes = random_bytes(16); // 16 random bytes
echo $secureInt, ' ', bin2hex($secureBytes);
?>random_int() tem a mesma assinatura (min, max) que rand(), portanto normalmente é um
substituto direto quando a segurança importa.
Resumo
rand($min, $max)retorna um número inteiro pseudoaleatório em um intervalo inclusivo; sem argumentos, abrange de0agetrandmax().- Prefira
mt_rand()para uso geral — é mais rápido e melhor distribuído (erand()é um alias para ele desde o PHP 7.1). - Use
random_int()/random_bytes()sempre que o valor precisar ser imprevisível.
Para mais informações sobre valores numéricos e auxiliares matemáticos, consulte PHP Numbers e PHP Math.