W3docs

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

php— editable, runs on the server

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 o limite superior — não há como alterá-lo. Para restringir a saída, passe min e max para mt_rand().
  • Não recebe argumentos. Passar qualquer argumento gerará um ArgumentCountError no 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, use random_int() ou random_bytes().
  • Evite o truque do módulo para intervalos. mt_rand() % $n introduz viés em direção a valores menores. Prefira mt_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.

Prática

Prática
O que a função mt_getrandmax() do PHP faz?
O que a função mt_getrandmax() do PHP faz?
Was this page helpful?