Sorteador de vencedor com semente e pesos
Este sorteador com semente escolhe um nome de uma lista ordenada e entrega o mesmo resultado sempre que a lista, os pesos e a semente não mudarem.
Executar grátis
Dê uma entrada a cada participante ou use quantidades maiores para representar ações extras, pacotes de bilhetes ou outras regras divulgadas. Como o cálculo não consulta o relógio nem uma fonte aleatória oculta, você pode guardar a semente e os dados junto ao resultado, repetir o sorteio depois e demonstrar exatamente como a pessoa vencedora foi selecionada.
Prepare uma lista ordenada com pesos corretos
Comece com uma linha para cada participante e mantenha as linhas em uma ordem intencional e estável. Toda linha precisa de um nome não vazio. O valor opcional entries é um número inteiro positivo: omita-o para conceder uma entrada, use dois para dobrar o peso de seleção e assim por diante. Uma pessoa com cinco entradas ocupa cinco posições no conjunto conceitual de bilhetes, enquanto outra com uma entrada ocupa apenas uma posição. O sorteador não elimina nomes repetidos, pois eles podem representar registros separados legítimos, e agrupá-los sem aviso mudaria as chances divulgadas. Se a origem puder conter duplicidades, decida antes do sorteio se elas devem ser consolidadas e registre essa decisão nas anotações da campanha. Também congele a lista ordenada final antes de anunciar a semente. Ordenar, incluir ou remover uma linha, alterar um nome ou ajustar uma quantidade modifica as faixas ponderadas e pode mudar o vencedor. O cálculo aceita até 10,000 linhas e valida cada peso, sem arredondar frações ou admitir marcadores com peso zero. Assim, toda linha enviada participa e cada quantidade declarada contribui diretamente para sua chance.
Use uma semente para tornar o sorteio reproduzível
A semente pode ser qualquer texto não vazio escolhido para o sorteio, como um identificador de campanha acompanhado de uma indicação da data de encerramento. O sorteador transforma esse texto exato em um valor fixo sem sinal de 32 bits por meio de um hash documentado e depois o mapeia para uma posição dentro da faixa total de entradas ponderadas. Ele percorre os participantes na ordem fornecida e retorna a linha cuja faixa acumulada contém essa posição. A mesma semente, ordem, lista de nomes e contagens sempre produz a mesma saída na API e no navegador. Maiúsculas, espaços e pontuação fazem diferença, portanto guarde a cadeia original exata em vez de digitá-la novamente. Em um processo público, considere definir com antecedência como a semente será obtida, por exemplo a partir de um valor externo claramente identificado e publicado depois do prazo. A ferramenta é determinística, e não criptograficamente aleatória: sua finalidade é permitir seleção repetível e auditoria simples, não gerar um segredo imprevisível. Não divulgue cedo uma semente de livre escolha se participantes ou organizadores ainda puderem ajustar a lista conforme o resultado projetado.
Registre e confira o resultado vencedor
O resultado contém o nome vencedor, o índice da linha começando em zero, a posição ponderada escolhida também a partir de zero, o total de entradas e o hash numérico derivado da semente. Guarde a entrada completa e esses campos no registro do sorteio. Outra pessoa poderá enviar as mesmas linhas ordenadas e a mesma semente, confirmar o total e receber o mesmo vencedor sem precisar confiar em uma captura de tela ou em um botão aleatório sem explicação. O índice da linha também diferencia dois registros com o mesmo nome exibido, enquanto a posição ponderada revela onde a escolha caiu no conjunto conceitual de bilhetes. Se uma nova execução divergir, compare os dados salvos caractere por caractere: até um nome aparado, uma linha reordenada, um peso ajustado ou uma diferença de maiúsculas na semente representa outro sorteio. A versão do navegador é útil para uma seleção manual transparente; a API custa US$ 0,002 por solicitação quando você precisa automatizar o mesmo processo em um sistema de campanhas ou trilha de auditoria. Em ambos os canais, o algoritmo não usa rede, horário atual ou estado mutável, portanto o ambiente e a data da execução não alteram a resposta.
Casos de uso
Sortear um prêmio nas redes sociais
Congele os nomes elegíveis após o prazo, publique ou arquive a semente e escolha um vencedor que possa ser confirmado depois.
Aplicar regras de entradas extras
Atribua quantidades maiores a ações válidas e mantenha a escolha proporcional aos pesos registrados.
Auditar a seleção de uma campanha
Guarde a entrada ordenada e os dados de hash retornados para que outra pessoa reproduza o resultado anunciado.
Perguntas frequentes
Quanto custa cada sorteio?
O preço da API é US$ 0,002 por solicitação. O mesmo cálculo determinístico também pode ser executado gratuitamente no navegador.
O que acontece quando a contagem de entradas é omitida?
O participante recebe uma entrada. Pesos informados precisam ser números inteiros positivos.
A mesma semente sempre seleciona o mesmo vencedor?
Sim, desde que a semente e toda a lista ordenada, incluindo nomes e quantidades, sejam idênticas.
Mudar a ordem dos participantes faz diferença?
Sim. A ordem define a faixa de cada pessoa no conjunto ponderado; por isso, reordenar linhas cria outra entrada de sorteio.
Este sorteio é criptograficamente aleatório?
Não. É um sorteador determinístico e transparente, feito para reprodução. Quando a imprevisibilidade for importante, use uma fonte de semente que ninguém possa manipular.
Por que nomes duplicados permanecem separados?
O sorteador respeita cada linha recebida porque registros repetidos podem ser intencionais. O índice retornado identifica a linha vencedora.
Para desenvolvedores — acesso via API
Tudo nesta página está disponível via API. Esta seção é para equipes que querem integrar a ferramenta aos próprios sistemas; quem não precisa disso pode simplesmente usar a ferramenta acima.
Endpoint
Autenticação por token Bearer. Um único POST coloca a tarefa na fila; o resultado chega por webhook ou link assinado.
Chame do seu código
curl -X POST https://api.kit.forhosting.com/game/giveaway-winner-pick \
-H "Authorization: Bearer $KIT_KEY" \
-H "Content-Type: application/json" \
-d '{"entrants":[{"name":"Avery","entries":1},{"name":"Blake","entries":3},{"name":"Casey"}],"seed":"spring-campaign-2026"}'const res = await fetch("https://api.kit.forhosting.com/game/giveaway-winner-pick", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.KIT_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"entrants": [
{
"name": "Avery",
"entries": 1
},
{
"name": "Blake",
"entries": 3
},
{
"name": "Casey"
}
],
"seed": "spring-campaign-2026"
})
});
const { task_id } = await res.json();import os, requests
res = requests.post(
"https://api.kit.forhosting.com/game/giveaway-winner-pick",
headers={"Authorization": f"Bearer {os.environ['KIT_KEY']}"},
json={
"entrants": [
{
"name": "Avery",
"entries": 1
},
{
"name": "Blake",
"entries": 3
},
{
"name": "Casey"
}
],
"seed": "spring-campaign-2026"
},
)
task_id = res.json()["task_id"]<?php
$res = file_get_contents("https://api.kit.forhosting.com/game/giveaway-winner-pick", false, stream_context_create([
"http" => [
"method" => "POST",
"header" => "Authorization: Bearer " . getenv("KIT_KEY") . "\r\nContent-Type: application/json",
"content" => '{"entrants":[{"name":"Avery","entries":1},{"name":"Blake","entries":3},{"name":"Casey"}],"seed":"spring-campaign-2026"}',
],
]));
$task = json_decode($res, true);body := bytes.NewBufferString(`{"entrants":[{"name":"Avery","entries":1},{"name":"Blake","entries":3},{"name":"Casey"}],"seed":"spring-campaign-2026"}`)
req, _ := http.NewRequest("POST", "https://api.kit.forhosting.com/game/giveaway-winner-pick", body)
req.Header.Set("Authorization", "Bearer "+os.Getenv("KIT_KEY"))
req.Header.Set("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)Exemplo de requisição
{
"entrants": [
{
"name": "Avery",
"entries": 1
},
{
"name": "Blake",
"entries": 3
},
{
"name": "Casey"
}
],
"seed": "spring-campaign-2026"
}Exemplo de resposta
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "game.giveaway_winner_pick",
"status": "queued",
"_links": {
"result": "/tasks/tsk_…/result"
}
}A API é assíncrona: cada chamada devolve um task_id na hora. Se preferir polling, consulte o status a até 1 requisição por segundo.
Preço
Preço publicado, sem tokens nem créditos escondidos. Tarefa que falha não é cobrada.
Limites
max_items | 10000 |
Erros
| HTTP | Código | O que significa |
|---|---|---|
401 | unauthorized | Token ausente ou inválido. Confira o header Authorization. |
402 | insufficient_balance | Saldo insuficiente para esta tarefa. Faça uma recarga e tente de novo. |
404 | unknown_type | Esse tipo de tarefa não existe. Confira o campo type no catálogo. |
429 | rate_limited | Muitas requisições em pouco tempo. Espere um instante e tente de novo. |