mt_getrandmax()
Aprenda sobre a função mt_getrandmax() no PHP, usada para obter o valor máximo que pode ser retornado pela função mt_rand().
A função mt_getrandmax() no PHP retorna o maior inteiro possível que mt_rand() pode gerar. Ela não recebe argumentos e retorna um valor constante durante toda a execução do script, sendo usada principalmente como limite superior conhecido ao escalar ou normalizar números aleatórios.
Esta página aborda o que a função retorna, a sintaxe, por que o valor importa, como transformá-lo em um float aleatório, armadilhas comuns e como ela difere da função mais antiga getrandmax().
O que é a Função mt_getrandmax()?
mt_getrandmax() é uma função nativa do PHP que retorna um int — o maior valor que mt_rand() pode produzir. Como mt_rand() utiliza o gerador de números pseudoaleatórios Mersenne Twister, esta função expõe o limite superior do intervalo de saída desse gerador.
O valor depende da plataforma, mas em todas as versões modernas do PHP é 2147483647 (2^31 - 1). Ele não cresce em sistemas de 64 bits — mt_rand() sempre trabalha dentro do intervalo de 32 bits, portanto mt_getrandmax() retorna o mesmo número em qualquer ambiente. Trate-o como uma constante durante a execução do seu script.
Sintaxe
mt_getrandmax(): int- Parâmetros: nenhum.
- Valor de retorno: o inteiro máximo que
mt_rand()pode retornar.
Como Usar a Função mt_getrandmax()
Usar mt_getrandmax() é simples — chame-a sem argumentos. Veja um exemplo básico:
Uso Básico
O código acima obtém o limite superior e armazena-o em uma variável para uso posterior.
Definindo um intervalo explícito
Você pode combinar mt_getrandmax() com mt_rand() para tornar o intervalo de saída completo explícito. As duas chamadas abaixo são equivalentes — chamar mt_rand() sem argumentos já retorna um valor entre 0 e 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
?>Gerando um Float Aleatório Entre 0 e 1
O uso real mais comum de mt_getrandmax() é normalizar um inteiro aleatório em um float no intervalo [0, 1). Divida o inteiro aleatório pelo máximo:
<?php
$ratio = mt_rand() / (mt_getrandmax() + 1);
echo $ratio; // e.g. 0.4173...
?>Adicionar 1 ao divisor mantém o resultado estritamente abaixo de 1. Para escalar para qualquer intervalo [$min, $max], multiplique a proporção pelo alcance:
<?php
$min = 5;
$max = 25;
$value = $min + $ratio * ($max - $min);Armadilhas Comuns
- Não é um setter.
mt_getrandmax()apenas lê o limite superior — não há como alterá-lo. Para restringir a saída, passeminemaxparamt_rand(). - Não recebe argumentos. Passar qualquer argumento gerará um
ArgumentCountErrorno PHP 8+. - Não é criptograficamente seguro. Nem
mt_rand()nem seu intervalo são seguros para senhas, tokens ou chaves. Para aleatoriedade sensível à segurança, userandom_int()ourandom_bytes(). - Evite o truque do módulo para intervalos.
mt_rand() % $nintroduz viés em direção a valores menores. Prefiramt_rand(0, $n - 1).
mt_getrandmax() vs getrandmax()
O PHP oferece um par paralelo de geradores. getrandmax() informa o limite para a função mais antiga rand(), enquanto mt_getrandmax() informa o limite para mt_rand(). Desde o PHP 7.1, rand() e mt_rand() usam internamente o mesmo mecanismo Mersenne Twister, portanto ambas as funções retornam 2147483647 — mas você ainda deve parear cada *getrandmax() com seu gerador correspondente para maior clareza.
Conclusão
mt_getrandmax() retorna o limite superior do gerador Mersenne Twister do PHP (2147483647 em versões modernas). Seu principal valor está como divisor para produzir floats aleatórios normalizados e intervalos escalados. Para aleatoriedade segura, use random_int(), e lembre-se de que a função é somente leitura — use mt_rand($min, $max) para realmente restringir os resultados. Veja também mt_srand() para inicializar o gerador.