PHP:
Geração de números aleatórios
Como:
O PHP oferece várias funções para gerar números aleatórios, mas as mais usadas são rand()
, mt_rand()
, e para propósitos criptográficos, random_int()
.
Para gerar um número aleatório simples entre 0 e getrandmax() (o maior valor possível retornado por rand()
), você pode usar:
echo rand();
Para uma faixa mais específica, como entre 1 e 100:
echo rand(1, 100);
No entanto, mt_rand()
é uma melhor escolha para velocidade e aleatoriedade:
echo mt_rand(1, 100);
A saída para ambos pode ser qualquer coisa entre 1 e 100, dependendo da randomização, por exemplo, 42
.
Para contextos criptográficos ou de segurança, onde a imprevisibilidade é crucial, random_int()
é a escolha preferida, pois gera inteiros pseudo-aleatórios criptograficamente seguros:
echo random_int(1, 100);
Novamente, a saída é um número aleatório entre 1 e 100, como 84
, mas com uma garantia mais forte de aleatoriedade.
Aprofundamento
A função rand()
está presente no PHP desde suas versões iniciais, servindo como a abordagem inicial para gerar números aleatórios. No entanto, não é a melhor escolha para aplicações que requerem um alto grau de aleatoriedade devido ao seu algoritmo relativamente previsível.
mt_rand()
, introduzido no PHP 4, é baseado no algoritmo Mersenne Twister - muito superior em termos de velocidade e da aleatoriedade que pode gerar em comparação a rand()
. Rapidamente se tornou a opção preferida para a maioria das necessidades não criptográficas.
Para aplicações sensíveis à segurança, random_int()
foi introduzido no PHP 7 para gerar inteiros pseudo-aleatórios criptograficamente seguros usando bytes aleatórios do gerador de números aleatórios do sistema. É significativamente mais seguro que rand()
ou mt_rand()
, tornando-o a melhor escolha para gerar tokens, chaves ou outros elementos onde a previsibilidade poderia levar a vulnerabilidades de segurança.
Apesar dessas melhorias, é crucial escolher a função certa com base no contexto da aplicação. Para uso geral, mt_rand()
é suficiente, mas para qualquer coisa que possa ser alvo de exploração, random_int()
é o caminho a seguir, fornecendo tanto aleatoriedade quanto segurança.