W3docs

mt_rand()

Saiba como usar a função mt_rand() no PHP para gerar inteiros aleatórios com o algoritmo Mersenne Twister.

A função mt_rand() no PHP gera um inteiro aleatório utilizando o algoritmo Mersenne Twister. Esta página aborda sua sintaxe e parâmetros, como ela difere da antiga rand(), como alimentá-la com uma semente para resultados reproduzíveis e quando você deve optar por uma alternativa criptograficamente segura.

O que a Função mt_rand() Faz

mt_rand() retorna um inteiro pseudo-aleatório. "Pseudo-aleatório" significa que os números provêm de um algoritmo determinístico alimentado por um estado interno — eles parecem aleatórios, mas a mesma semente sempre produz a mesma sequência. O algoritmo Mersenne Twister que ela utiliza gera números de maior qualidade e mais bem distribuídos do que o gerador libc por trás da antiga rand(), e possui um período extremamente longo (não se repetirá por 2^19937 − 1 valores).

Note que mt_rand() não é criptograficamente segura: se o estado interno for conhecido ou recuperável, valores futuros podem ser previstos. Para senhas, tokens, salts ou qualquer coisa sensível à segurança, use random_int() em vez disso.

Sintaxe

mt_rand(): int
mt_rand(int $min, int $max): int
ParâmetroDescrição
$minOpcional. O menor valor que o resultado pode ter (inclusive). Padrão é 0.
$maxOpcional. O maior valor que o resultado pode ter (inclusive). Padrão é mt_getrandmax().

Valor de retorno: um inteiro aleatório entre $min e $max inclusive, ou entre 0 e mt_getrandmax() quando chamada sem argumentos. Se $min for maior que $max, o PHP emite um aviso e retorna false.

Como Usar a Função mt_rand()

Chame-a com dois argumentos para escolher um número de um intervalo inclusivo, ou sem argumentos para obter um valor em todo o intervalo:

php— editable, runs on the server

A primeira chamada restringe a saída ao intervalo 1–100; a segunda abrange o intervalo completo, cujo limite superior você pode verificar com mt_getrandmax() (comumente 2147483647).

Casos de Uso Comuns

Simular o lançamento de um dado:

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

Escolher um elemento aleatório de um array gerando um í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 limite superior é importante: os índices de array são baseados em zero, portanto um array de quatro elementos tem índices válidos de 0 a 3. (Para essa tarefa específica, array_rand() é uma opção mais direta.)

Semeando para Resultados Reproduzíveis

Como o Mersenne Twister é determinístico, semeá-lo com mt_srand() torna a sequência repetível — útil para testes, simulações ou sempre que você precisar que a saída "aleatória" seja a mesma em cada execução:

<?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
?>

Sem uma semente explícita, o PHP semeia automaticamente o gerador, então você obtém saídas diferentes a cada execução.

Alternativa Segura: random_int()

Quando a aleatoriedade não pode ser adivinhada — tokens de sessão, códigos de redefinição de senha, chaves de API — mt_rand() é a ferramenta errada. Use random_int(), que obtém dados da fonte criptograficamente segura do sistema operacional:

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

Ela compartilha a mesma assinatura (int $min, int $max), então substituí-la é simples.

mt_rand() vs. rand()

Desde o PHP 7.1, rand() é um apelido para mt_rand() e usa o mesmo motor Mersenne Twister, portanto se comportam de forma idêntica. Em versões mais antigas, rand() usava o gerador libc mais fraco da plataforma. Prefira mt_rand() quando quiser resultados consistentes e de alta qualidade em diferentes versões do PHP.

Conclusão

mt_rand() é a função principal para inteiros pseudo-aleatórios rápidos e de boa qualidade no PHP. Use-a para jogos, amostragem, embaralhamento e aleatorização geral; semeie-a com mt_srand() quando precisar de sequências reproduzíveis; e mude para random_int() sempre que a segurança for importante.

Prática

Prática
Qual é a finalidade da função mt_rand() no PHP?
Qual é a finalidade da função mt_rand() no PHP?
Was this page helpful?