Gerador de números aleatórios

Gere um número aleatório, uma lista ou vários conjuntos de números em qualquer intervalo — tudo diretamente no seu navegador, com aleatoriedade criptograficamente segura, nunca num servidor.

Prima «Gerar» para sortear
Opções

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?

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.

FAQ

A aleatoriedade é criptograficamente segura?

Sim. Usa a Web Crypto API do seu navegador (crypto.getRandomValues), que obtém aleatoriedade da fonte criptograficamente segura do seu sistema operativo. Ao contrário de funções pseudoaleatórias simples, a sua saída foi concebida para ser imprevisível na prática, e o rejection sampling mantém cada número do intervalo igualmente provável, em vez de favorecer os valores mais baixos.

Como gero um número aleatório num intervalo específico?

Escreva o menor valor possível no campo «Mín» e o maior no campo «Máx», depois prima «Gerar». Os dois limites são incluídos no resultado, pelo que um intervalo de 1 a 10 pode gerar tanto o 1 como o 10.

Posso gerar vários números aleatórios de uma vez?

Sim. Defina o campo «Quantidade» com a quantidade que precisa (até 1000), e o gerador produz a lista inteira com um clique. Depois pode copiar todos os resultados para a área de transferência com o botão de copiar, ou guardá-los num ficheiro.

Posso gerar vários conjuntos de números de uma vez?

Sim. Mude o «Formato de saída» de «Quebra de linha» para «Separado por espaços» ou «Separado por vírgulas» para revelar o campo «Número de conjuntos». Defina quantos sorteios independentes precisa — por exemplo, vinte conjuntos de 3 números para vinte rondas de sorteio — e escolha se as repetições podem ocorrer entre conjuntos diferentes.

Posso ordenar os números gerados?

Sim. Use a opção «Ordem de classificação» para organizar cada lista em ordem crescente ou decrescente, ou deixe em «Nenhum» para manter os números na ordem em que foram sorteados.

Como evito números repetidos?

Ative o interrutor «Sem repetições». Com ele ativado, cada número gerado na lista é diferente — ideal para rifas de escola ou de coletividade, sorteios de prémios ou divisão de pessoas em grupos. Repare que a quantidade não pode ultrapassar o tamanho do intervalo: não é possível sortear 20 números únicos entre 1 e 10.

Por que é que os mesmos números continuam a repetir-se?

Porque sorteios independentes repetem-se, e é exatamente assim que a aleatoriedade se comporta. Cada sorteio ignora por completo todos os sorteios anteriores, pelo que, num intervalo de 1 a 10, a hipótese de o mesmo número sair duas vezes seguidas é de 1 em 10 — sempre, todas as vezes —, o que é comum, não um defeito. Se precisar de uma lista sem repetições, ative «Sem repetições»; isso limita o sorteio de propósito, não corrige erro nenhum.

Por que é que uma sequência aleatória não parece aleatória?

Porque a aleatoriedade verdadeira é imprevisível, não uniformemente distribuída. As pessoas esperam que um resultado aleatório se espalhe de forma organizada, pelo que aglomerados, repetições e sequências curtas como 7, 7, 8 parecem erros, mesmo sendo exatamente o que o acaso produz. Uma sequência que parece organizada aos olhos de uma pessoa geralmente não foi aleatória.

Posso confiar na aleatoriedade gerada num navegador?

Sim, quando vem da Web Crypto API, como é o caso aqui. O crypto.getRandomValues fornece valores aleatórios criptograficamente fortes a partir de uma fonte de aleatoriedade fornecida pelo sistema operativo, em vez de usar um PRNG em JavaScript como o Math.random(). É o Math.random() que deve evitar quando algo realmente importa: é determinístico e nunca foi projetado para ser imprevisível.

Os números aleatórios podem ser previstos ou influenciados?

Não aqui. Os valores vêm do gerador criptograficamente seguro do seu sistema operativo, pelo que os resultados anteriores não revelam nada sobre o seguinte, e o sorteio acontece inteiramente no seu dispositivo — não há servidor para adulterar nem pedido para alguém intercetar. Também não podemos influenciar os seus resultados, porque nunca os vemos.

É adequado para escolher vencedores de passatempos ou rifas?

Sim. Atribua um número a cada participante, gere um resultado nesse intervalo, e o participante correspondente ganha. Como a fonte é criptograficamente segura e o sorteio acontece inteiramente no seu dispositivo, o processo é fácil de explicar e documentar se um participante questionar o resultado. Se estiver a escolher números para uma aposta no Totoloto ou no Euromilhões, a ferramenta funciona como recurso de seleção aleatória, não como previsão: os sorteios oficiais são completamente independentes disto.

Recarregar a página muda a aleatoriedade?

Não, e nem sequer é preciso. Cada sorteio já pede valores aleatórios novos ao sistema operativo, pelo que os resultados são independentes quer prima «Gerar» dez vezes quer recarregue a página entre cada vez. Não existe ciclo nenhum para reiniciar nem estado que fique desatualizado — recarregar só limpa os resultados exibidos no ecrã.

O gerador é gratuito, e guardam os meus números?

A ferramenta é totalmente gratuita e não exige registo. Todos os números são gerados localmente no seu navegador e nunca saem do seu dispositivo, pelo que não poderíamos guardar nem ver os seus resultados mesmo que quiséssemos.