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?

Por trás dos números está o Math.random() do JavaScript, que devolve valores pseudo-aleatórios distribuídos de forma uniforme. Se você marcar a opção "sem repetição", entra em cena o embaralhamento de Fisher-Yates, que garante que cada número saia uma única vez.

Tudo é calculado dentro do próprio 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.

Gere números aleatórios do seu jeito

Tem mil situações em que você só quer um número, ou vários, tirados ao acaso dentro de uma faixa, seja num sorteio rápido ou num experimento que pede uma amostra imparcial. A ferramenta faz isso a partir do mínimo, do máximo e da quantidade que você definir de uma vez.

Tem uma opção que muda bastante na prática: gerar sem repetição. Num 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 sai diferente. Já em casos como simular rolagens de dado ou criar dados de teste, repetir costuma ser o que você quer.

O sorteio usa a fonte de aleatoriedade do próprio navegador e roda localmente. Nada fica registrado, então cada conjunto de números some no instante em que você fecha a página.

Ferramentas Relacionadas