Precisa de uma forma rápida e justa de obter um número aleatório? Este é o gerador de números aleatórios para Portugal: gratuito, online, e pronto a sortear um número — ou uma lista inteira de números — num intervalo à sua escolha, seja um simples 1 a 10, o 1 a 49 do Totoloto ou o 1 a 50 do Euromilhões, até valores na casa dos biliões. Defina o valor mínimo e máximo em «Mín» e «Máx», escolha quantos números precisa em «Quantidade» e prima «Gerar». Os dois limites são incluídos, pelo que um intervalo de 1 a 10 pode devolver tanto o 1 como o 10.
Cada resultado é produzido diretamente no seu navegador usando a Web Crypto API (crypto.getRandomValues) — que fornece valores aleatórios criptograficamente fortes a partir de uma fonte de aleatoriedade fornecida pelo sistema operativo. Nada é enviado a um servidor, nada é registado, e nós nunca vemos os seus números. A geração é instantânea, privada, e continua a funcionar mesmo numa ligação lenta depois de a página carregar.
As opções foram feitas para as situações em que as pessoas realmente precisam de números aleatórios. Ative «Sem repetições» para que nenhum número apareça duas vezes — exatamente o que precisa para rifas, sorteios e divisão de pessoas em grupos sem repetição. Precisa de vinte vencedores entre 500 participantes? Defina «Mín» como 1 e «Máx» como 500, ative «Sem repetições», defina «Quantidade» como 20 e prima «Gerar». «Ordem de classificação» organiza o resultado em ordem crescente ou decrescente, e um botão copia todos os resultados. Ao mudar o «Formato de saída» de «Quebra de linha» para «Separado por espaços» ou «Separado por vírgulas», aparece «Número de conjuntos»: vários sorteios independentes de uma vez — por exemplo, vinte conjuntos de 3 números para vinte rondas de sorteio — com «Permitir duplicados entre conjuntos» a decidir se o mesmo número pode aparecer em mais do que um deles.
Como é que a aleatoriedade é realmente gerada? O seu navegador fornece valores aleatórios criptograficamente fortes através da Web Crypto API, em vez de um PRNG em JavaScript como o Math.random(). Ao premir «Gerar», a página solicita valores aleatórios com crypto.getRandomValues e usa-os para produzir números dentro do intervalo escolhido. A fonte subjacente de aleatoriedade é fornecida pelo sistema operativo, pelo que a página não precisa de manter a sua própria semente fixa ou sequência pseudoaleatória.
Converter um valor bruto para o seu intervalo é exatamente onde os geradores erram silenciosamente, e isso merece um parágrafo só seu. Pegar no valor módulo o tamanho do intervalo é o método óbvio — e o enviesado: a menos que o intervalo divida 2^32 de forma exata, os números mais baixos aparecem um pouco mais do que os restantes. Essa falha chama-se modulo bias, e é mensurável, não apenas teórica. Este gerador, em vez disso, descarta qualquer valor além do maior múltiplo exato do intervalo e sorteia de novo — uma técnica chamada rejection sampling. Isto custa alguns sorteios extra, mas garante que cada número entre «Mín» e «Máx» tenha exatamente a mesma probabilidade, não apenas quase a mesma.
O que torna um número verdadeiramente aleatório? Um número é aleatório o suficiente quando os resultados anteriores não revelam nada sobre o seguinte — e, na prática, existem três níveis disto. Uma função pseudoaleatória comum, como o Math.random(), corre um algoritmo determinístico: quem conhece o seu estado interno consegue reproduzir toda a sequência, o que é ótimo para baralhar uma apresentação, mas inadequado para qualquer coisa em que o resultado não possa ser previsível. Um gerador criptograficamente seguro (CSPRNG) — o nível que esta ferramenta usa — também é um algoritmo, mas está projetado para produzir valores imprevisíveis a partir de uma fonte segura de aleatoriedade do sistema, e construído de forma que observar a sua saída não revele nada sobre o que vem a seguir. A aleatoriedade física, de fontes como o ruído atmosférico ou o decaimento radioativo, é diferente das duas, embora a diferença prática desapareça quando se trata de sortear um número dentro de um intervalo. É exatamente por isso que os navegadores oferecem uma API de criptografia separada em vez de simplesmente melhorar o Math.random(): as duas resolvem problemas diferentes, e só uma delas é segura quando o resultado importa para alguém.
Uma sequência aleatória não precisa de parecer aleatória para os humanos. Sorteie dez números entre 1 e 10 e vai regularmente ver uma repetição, uma quase repetição como 7, 7, 8, ou uma sequência curta que cai toda em números altos — e cada uma dessas situações é perfeitamente normal. A aleatoriedade verdadeira é imprevisível, não uniformemente distribuída: cada sorteio é independente, números anteriores não têm absolutamente nenhuma influência sobre os seguintes, e nenhum número fica alguma vez «a dever» uma aparição. O instinto que insiste no contrário é a falácia do jogador, e é o mesmo instinto que faz das pessoas geradores de números aleatórios fracos — quando nos pedem para inventar uma sequência aleatória, evitamos repetições e distribuímos os valores de forma muito mais uniforme do que o acaso jamais faria. Um resultado que parece suspeitosamente arrumado é a marca de um ser humano; a aleatoriedade genuína produz aglomerados.
Porquê escolher este gerador de números aleatórios?
- Geração só no navegador: os números são sorteados no seu dispositivo e nunca são enviados a lado nenhum
- Aleatoriedade da Web Crypto API: criptograficamente segura, não Math.random()
- Sem modulo bias: rejection sampling mantém cada número do intervalo igualmente provável
- Qualquer intervalo: de 1 a 10 até valores na casa dos biliões, com os dois limites incluídos
- Modo «Sem repetições»: sorteie uma lista sem repetição para rifas e divisão de grupos
- Vários conjuntos: vários sorteios independentes num único clique
- Ordenação e formatos de saída: crescente ou decrescente, quebra de linha, espaços ou vírgulas
- Histórico e gravação em ficheiro: mantenha um registo de um sorteio que talvez precise de justificar
- Ilimitado e gratuito: sem registo, sem limites de uso, nada guardado nos nossos servidores
Os números aleatórios surgem em mais situações do que a maioria imagina. Em Portugal, servem, por exemplo, para simular uma jogada no Totoloto ou no Euromilhões sem qualquer ligação aos sorteios oficiais, ou para conduzir a rifa de uma escola ou de uma coletividade de forma que todos confiem no resultado. Os professores chamam alunos sem favorecer ninguém. Criadores de conteúdo e equipas de marketing sorteiam vencedores de passatempos e rifas perante um público que precisa de acreditar no resultado. Os jogadores substituem um dado perdido ou decidem quem começa, e os torneios sorteiam a ordem de entrada. Os investigadores escolhem uma amostra aleatória para que as suas conclusões se generalizem além das pessoas que participaram. Os programadores geram dados de teste, inicializam simulações e escolhem identificadores durante o controlo de qualidade. O fio condutor é um processo de seleção aleatória que pode ser explicado depois: como o sorteio usa aleatoriedade criptográfica e acontece inteiramente no dispositivo, é possível mostrar como o resultado surgiu se alguém o questionar.
Este gerador tem algumas limitações honestas que vale a pena conhecer. O modo «Sem repetições» não consegue sortear mais números do que aqueles que o intervalo contém: vinte valores únicos entre 1 e 10 simplesmente não existem. Os sorteios são independentes e os resultados anteriores não afetam os seguintes, pelo que recarregar a página não reinicia nenhum ciclo — não existe ciclo nenhum em que se possa estar. E, embora os números sejam criptograficamente fortes, um sorteio aqui é uma escolha justa, não uma previsão: os sorteios oficiais de lotaria, cá em Portugal ou em qualquer outro país, usam o seu próprio equipamento físico ou certificado, e nada calculado no seu navegador tem qualquer ligação com eles. Dentro destes limites, a garantia é ainda mais forte: cada número do seu intervalo tem exatamente a mesma probabilidade, em cada sorteio.