Como sortear ganhadores de um sorteio de forma justa e mostrar como foi feito
Para escolher um ganhador de forma justa, use um gerador feito para segurança, dê a mesma chance a cada participante e deixe que as pessoas conferam o resultado depois. A maior parte da injustiça em um sorteador simples vem de uma de duas causas: uma fonte fraca de aleatoriedade ou um pequeno deslize aritmético chamado viés do módulo. Ambos têm solução. Uma lista pública de participantes e um registro do sorteio são a melhor prova de que ninguém escolheu o ganhador.
Sorteador aleatórioEscolher um vencedor com justiçaUse de graçaAleatoriedade verdadeira e pseudoaleatoriedade
Uma fonte de aleatoriedade verdadeira tira sua imprevisibilidade de um processo físico, como o ruído eletrônico. Um gerador pseudoaleatório é uma fórmula. Ele parte de uma semente, aplica passos determinísticos e produz uma sequência que parece aleatória. A sequência é totalmente determinada pela semente, então quem conhece a semente e a fórmula consegue prever cada número.
A maioria dos softwares usa geradores pseudoaleatórios, e isso serve para embaralhar uma playlist ou sortear a fase de um jogo. Em um sorteio com prêmio em jogo, a pergunta é se alguém poderia prever ou influenciar o resultado. Um gerador rápido, mas previsível, é a ferramenta errada.
Use o gerador criptográfico do navegador
Em JavaScript, Math.random() é um gerador pseudoaleatório rápido. A documentação dele diz que ele não é adequado para criptografia, e um sorteio com prêmio é uma escolha sensível à segurança. A função crypto.getRandomValues(), da Web Crypto API, preenche um array com valores tirados da fonte criptográfica de aleatoriedade do sistema operacional. É essa que você deve usar. O sorteador aleatório usa essa função em todos os sorteios, inclusive nos lançamentos de moeda e de dados. Uma ferramenta que não informa o que usa é mais difícil de confiar, então pergunte antes de depender dela.
Viés do módulo, com um exemplo
Suponha que sua fonte gere um byte aleatório, um número inteiro de 0 a 255, e que você queira escolher uma entre três participações. O caminho mais simples é pegar o resto da divisão por 3. Parece justo, mas 256 não se divide igualmente em grupos de três.
- Os valores 0, 3, 6 e assim por diante, até 255, deixam resto 0. São 86 valores.
- Os valores que deixam resto 1 somam 85, e os que deixam resto 2 também somam 85.
Assim, a participação 0 sai 86 vezes em 256, cerca de 33,6%, enquanto as participações 1 e 2 saem 85 vezes cada, cerca de 33,2%. A diferença é pequena, mas é real, e cresce quando o número de participações fica grande em relação ao intervalo da fonte.
A solução é a amostragem por rejeição. Sorteie um valor e, se ele cair na parte sobrante e desigual, sorteie de novo. No exemplo do byte, você rejeita o 255 e aceita apenas os valores de 0 a 254, que se dividem igualmente por três. Com um número aleatório de 32 bits, a sobra é de cerca de um valor em 4,3 bilhões, então o viés é desprezível para um sorteio. Ainda assim, um sorteador cuidadoso trata isso, porque o mesmo deslize piora conforme o intervalo diminui.
Sorteios sem repetição
Se você precisa de vários ganhadores, sortear um índice aleatório três vezes pode escolher a mesma participação duas vezes. Dois métodos limpos evitam isso:
- Remova cada ganhador da lista e sorteie de novo entre os restantes.
- Embaralhe a lista inteira uma única vez com o método de Fisher–Yates e depois pegue os ganhadores do topo.
O Fisher–Yates percorre a lista do fim para o início, troca cada posição por outra escolhida ao acaso entre ela e o começo, e gera todas as ordens possíveis com a mesma probabilidade, desde que as escolhas aleatórias sejam justas. É curto, bem conhecido e fácil de explicar aos participantes. As opções Remover ganhadores e Sem repetições do sorteador cobrem os dois métodos.
Deixe o sorteio verificável
Um sorteio justo é aquele que qualquer pessoa pode verificar. Antes do sorteio:
- Publique as participações como uma lista numerada, junto com as regras de quem podia participar.
- Publique a impressão digital SHA-256 dessa lista. Qualquer ferramenta de SHA-256 consegue gerá-la, como o gerador de hash. A impressão digital muda por completo se uma única participação mudar, então a lista não pode ser editada discretamente depois. A mesma verificação confirma downloads; como conferir o checksum SHA-256 de um download mostra os passos.
Durante e depois do sorteio:
- Grave a tela desde o momento em que você inicia o sorteador até o resultado exibido.
- Publique a lista final com o número vencedor, para que as pessoas possam recalcular a impressão digital e confirmar que nada mudou.
- Diga como o ganhador foi escolhido, por exemplo: "escolhido com um sorteador no navegador que usa a fonte criptográfica de aleatoriedade do sistema operacional".
As regras de sorteios variam de plataforma para plataforma, e as promoções com prêmio podem ter exigências legais que dependem de onde você mora. Confira as regras de promoção da plataforma e a legislação local antes de fazer um sorteio. Este é um guia geral, não uma consultoria jurídica. Quando estiver pronto, sorteie um ganhador com o sorteador aleatório.
Como fazer com o fixmint
- Escolha Nomes e depois cole as participações em Nomes, um por linha.
- Defina Ganhadores com o número de prêmios. Marque Remover ganhadores da lista para que ninguém ganhe duas vezes.
- Para um sorteio numerado, escolha Número, defina Menor e Maior e marque Sem repetições se cada número puder ganhar apenas uma vez.
- Clique em Sortear ganhadores, com a gravação da tela já em andamento desde o início.
- Publique as participações numeradas, a impressão digital SHA-256, a participação vencedora e como o sorteador foi usado.
Respostas rápidas
O Math.random() serve para um sorteio?
Serve para jogos e embaralhamentos, mas não para um sorteio que as pessoas vão conferir, porque o resultado dele pode ser previsto. Use uma fonte criptográfica.
Por que não pegar um número aleatório e o resto da divisão pelo número de participações?
Quando o intervalo não se divide igualmente, o resto fica desigual, então algumas participações ficam um pouco mais prováveis. A amostragem por rejeição elimina esse viés.
Posso escolher vários ganhadores em um mesmo sorteio?
Sim. Remova cada ganhador antes do próximo sorteio ou embaralhe uma vez e pegue as primeiras participações. De qualquer forma, nenhuma participação pode ganhar duas vezes.
Traduzido do Original em inglês com auxílio de IA.
Comentários
Ainda não há comentários. Seja o primeiro.


