1001Ferramentas
🎲 Geradores

Gerador de Números Aleatórios

Gere números aleatórios entre um mínimo e máximo definidos. Com opção de números únicos (sem repetição) e quantidade configurável.

Como são gerados os números aleatórios?

Os números são gerados usando Math.random() do JavaScript, que produz números pseudo-aleatórios uniformemente distribuídos. Com a opção "sem repetição", cada número é sorteado apenas uma vez usando o algoritmo de Fisher-Yates (shuffle).

A geração acontece inteiramente no seu navegador.

Pseudo-aleatório vs verdadeiramente aleatório: o que o computador faz

Computadores não produzem aleatoriedade verdadeira só com aritmética. O que chamamos de "número aleatório" em software quase sempre vem de um gerador pseudoaleatório (PRNG) — um algoritmo determinístico que, a partir de uma semente inicial, gera uma sequência longa que parece estatisticamente aleatória. O Math.random() do JavaScript é um PRNG: no V8 ele implementa xorshift128+; engines mais antigas usavam Mersenne Twister. A saída passa na maioria dos testes de uniformidade, mas é totalmente reproduzível para quem souber a semente e o algoritmo.

Já um gerador verdadeiramente aleatório (TRNG) coleta entropia de fenômenos físicos: ruído térmico em resistores, tempos de chegada de fótons, decaimento radioativo, ruído atmosférico (a fonte clássica do random.org), ou flutuações quânticas do vácuo. O navegador expõe um híbrido via crypto.getRandomValues() — um PRNG criptograficamente seguro (CSPRNG) reabastecido pela entropy pool do sistema operacional (/dev/urandom no Unix, CryptGenRandom no Windows). Para sorteios, chaves, salts, tokens e qualquer caso em que previsibilidade seja vulnerabilidade, sempre use a Web Crypto API.

Algoritmos famosos de PRNG

  • Linear Congruential Generator (LCG) — o clássico x_{n+1} = (a·x_n + c) mod m; rápido, mas trivial de reverter.
  • Mersenne Twister (MT19937) — período de 2^19937−1, padrão no Python, R e MATLAB por décadas.
  • Xorshift / xoshiro / xoroshiro — família de Marsaglia com bit-shifts; estado pequeno, velocidade excelente.
  • PCG (Permuted Congruential Generator) — LCG moderno com permutação de saída; ótima qualidade estatística com baixo custo.
  • ChaCha20 / Fortuna — geradores criptográficos usados dentro de CSPRNGs.

Distribuições: nem toda aleatoriedade é uniforme

PRNGs nativamente produzem valores uniformes em [0,1). Simulações reais costumam precisar de outros formatos: gaussiana (normal) via transformada de Box-Muller, exponencial via CDF inversa, Poisson para contagens de chegada, binomial para somas de lançamentos de moeda. Para obter um inteiro em [min, max], o idioma padrão é:

Math.floor(Math.random() * (max - min + 1)) + min

A pegadinha do viés de módulo

Um erro frequente ao usar crypto.getRandomValues() é reduzir um inteiro de 32 bits com % n. Se n não divide 2^32 exatamente, algumas saídas ficam ligeiramente mais prováveis — invisível para n=6, catastrófico para faixas criptográficas. A solução é rejection sampling: descartar amostras acima do maior múltiplo de n abaixo de 2^32 e sortear de novo.

Padrões e casos de uso

  • NIST SP 800-90A/B/C — a especificação norte-americana para geradores determinísticos e baseados em entropia.
  • Sorteios públicos — exigem CSPRNG e logs auditáveis (ou fonte externa testemunhada como a API HMAC do random.org).
  • Simulação Monte Carlo — Mersenne Twister ou PCG são padrão para sampling estatístico e simulação científica.
  • JogosMath.random() basta para dados, loot, embaralhar cartas em jogos casuais.
  • Criptografia — nunca use Math.random() para chaves, salts, IVs ou tokens; sempre CSPRNG.

Perguntas frequentes

O gerador é justo para um sorteio público? Ele usa Math.random(), que é estatisticamente uniforme mas determinístico. Para sorteios informais serve; para promoções com valor legal, use CSPRNG e mantenha registro auditável de semente, hora e resultado.

Os resultados são reproduzíveis? Não a partir desta ferramenta — cada chamada usa estado interno fresco. Um Mersenne Twister semeável (via bibliotecas como random-js) permitiria replay da mesma sequência com a semente.

Posso evitar duplicatas? Sim — habilite a opção "únicos". Internamente o gerador embaralha o intervalo e pega N valores, ou rejeita repetidos com Set. Note que unicidade exige quantidade ≤ (max − min + 1).

O que é "ruído atmosférico"? O random.org captura o ruído eletromagnético de fundo via rádios sintonizados. Como vem de fenômeno físico, a saída é não-determinística de um jeito que nenhum algoritmo alcança — mais perto de um TRNG do que de um PRNG.

Ferramentas Relacionadas

Gere números aleatórios do seu jeito

De um sorteio rápido a um experimento que precisa de uma amostra imparcial, há mil situações em que você só quer um número (ou vários) tirado ao acaso dentro de uma faixa. Esta ferramenta faz isso definindo o mínimo e o máximo e a quantidade que você precisa de uma vez.

Tem uma opção que faz diferença na prática: gerar sem repetição. Para um sorteio com vários ganhadores, por exemplo, você não quer o mesmo número saindo duas vezes — ative os valores únicos e cada resultado da lista será distinto. Para outros casos, como simular rolagens ou gerar dados de teste, a repetição costuma ser desejável.

O sorteio usa o gerador de aleatoriedade do próprio navegador e acontece localmente, na hora. Nada é registrado, então cada conjunto de números some assim que você fecha a página.