Draw by participant numbers
Participants are numbered — comments under a post, entries, tickets. The page is created in advance, the link goes to participants, and the results are drawn once and never redone.
Create the draw page
Fill in the range and the rules, share the link with participants, and draw the results when the time comes.
How it works
Three steps and no arguments
Step 1. The page is created before the draw. You set the number range and the rules, get a permanent link and publish it in the contest post. At that moment nobody knows the winner, including you.
Step 2. Results are drawn once. The button works only from your private link and fires a single time. You can schedule a time — then the result is determined on the first visit after it.
Step 3. Anyone can recompute. After the draw a random seed and the formula are published. With the same seed and the same range anyone repeats the calculation and gets the same numbers.
Why no list
Numbers instead of names
Contest participants are almost always numbered already: comments run in order, entries sit as rows in a spreadsheet, tickets have numbers. So no list of names is needed on the server at all.
In terms of personal data this is the best case possible: we store no names, no profile links and no contacts. Only the range, the rules, the time and the result. The numbers cannot be swapped because they were known in advance.
If participants are not numbered and you do have a list, use the winner picker: there the list is committed by its fingerprint and publishing it is optional.
Just need a random number without publishing it — use the random number generator.
Questions
Frequently asked questions
How is this better than a plain number generator?
A plain generator gives you a number and nothing else: there is no way to prove you did not spin it twenty times. Here the page with the range and the rules is created before the draw and gets a permanent address, and the results are drawn exactly once. The link is published in the contest post in advance, so participants can see the result appeared afterwards rather than being chosen retroactively.
What participant data reaches the server?
None. Only the number range, the conditions, the time and the result are stored. There is no list of names at all: participants are already numbered and the numbers cannot be swapped. It is the cleanest way to run a contest as far as personal data goes.
What does the scheduled draw do?
You can set a date and time, and the result is determined on the first visit after that moment. Handy when a contest ends at night or you simply do not want to be at the computer. No scheduler on the hosting is required.
How does a participant verify the numbers?
After the draw a random seed is published. For counter i we compute HMAC-SHA256(i, seed); the first eight characters give a number, values from the incomplete tail of the range are discarded, and the remainder modulo the range size gives the result. Repeating the computation with the same seed gives anyone the same numbers.
Why discard part of the values?
Otherwise the results would be biased. A range almost never divides 2³² evenly, and without rejection the lower numbers would get slightly better odds. In a contest with fifteen hundred participants that is already a noticeable skew, so we drop the tail and take the next value.
How long does the page live?
One year from creation. The range, the seed, the time and the winners stay unchanged the whole time, so the link can sit in the post without turning into a dead one.
Next