Random Picker
Pick winners from a list — and, if the result has to convince other people, from a seed you publish first so anyone can re-run the draw.
Blank lines are ignored. Two people with the same name are two entries.
Paste a list above and draw. Nothing is picked until you ask.
Every other picker asks you to be trusted
Think about what actually happens when someone runs a giveaway. They paste the entrants into a page, a wheel spins, a name comes up, and they post a screenshot. Everyone who did not win has exactly one thing to go on: their belief that the organizer posted the first result rather than the fifth.
That is not a slur on organizers, most of whom are honest. It is a description of the artefact. A screenshot of a result is consistent with an honest draw and with twenty re-rolls, and no amount of animation changes that. The tools do not solve it because solving it is not a feature you can add to the end of a draw — it has to change what happens before one.
What a commitment actually is
The fix is old and it is not technical. You commit to something you cannot control before you see the outcome, in a way other people can check afterwards.
Here that is four steps, and the order is the whole guarantee:
- Get a seed. The page makes one from your browser's randomness.
- Publish it — the thread, the group chat, the post where the result will go.
- Publish the list of entries, exactly as you will draw from it.
- Draw.
Now the winners are a function of two things everybody already has. Anyone can re-run the draw and get the same names, and — this is the part that does the work — you could not have shopped for a result, because you handed out the seed before you could see what it would produce.
A seed published after a draw proves nothing whatsoever, and plenty of tools show you one. If you can re-draw, you can draw until you like the winner and then publish the seed that produced it. That is why the seed step on this page comes first and why the draw button waits for it rather than quietly letting you do it backwards.
How someone checks it without trusting this site either
The easy check is to come back here, choose a verifiable draw, paste in the published seed and the published list, and see the same names. That is enough for most situations, and it still leans on this page behaving the same way twice.
The check that does not need us at all is the one the receipt spells out, step by step, because "a partial Fisher–Yates" names a family of algorithms rather than one:
- Bytes: the SHA-256 hash of the seed followed by ":0" — for the seed abc, of the UTF-8 text "abc:0" — then of the seed followed by ":1", and so on, read one byte at a time in that order.
- The list: split into lines, trim each one, drop blank lines, and number what is left from 0, keeping its order.
- For each winner i = 0, 1, 2, …, let r be the number of entries not yet drawn. If r is 1, take the last one without reading any bytes.
- Otherwise let b be the fewest bits that can hold r − 1. Read ceil(b ÷ 8) bytes, the first one most significant, and keep only the low b − 8 × (bytes − 1) bits of that first byte. If the number is r or more, discard it and read again.
- Swap entry i with entry i + that number. Entry i is winner i + 1.
Both halves are standard and every step is written down. Someone can reproduce the bytes with printf and sha256sum in a terminal and the draw in a few lines of any language. A "verifiable" draw that can only be verified by the site that made it is not verifiable in the sense that matters, so this one was built to be checkable somewhere else.
When not to use it
Most of the time. If nobody needs convincing — who makes the coffee, who goes first — the ordinary draw is the better one: unpredictable, with nothing to publish and nothing to manage.
A verifiable draw is, by construction, predictable to whoever holds the seed. That is exactly what makes it checkable and exactly what makes it wrong when the point is that nobody can know the outcome in advance. Reproducibility and unpredictability are opposites. The page asks which one you want rather than pretending one setting delivers both, and the ordinary draw says plainly, next to its own result, that it cannot be checked by anyone — including by you.
The draw underneath is the same one the number generator uses
Both modes pick with a partial Fisher–Yates shuffle over an index drawn without modulo bias, the machinery described on the Random Number Generator. Every entry is equally likely, no entry is picked twice within a draw, and the list is never sorted, filtered or de-duplicated first — two lines with the same name are two entries with two chances, because two people really can share a name.
There is no wheel. An animation makes a result feel witnessed without making it checkable, and those two things get confused exactly when the difference matters.
Nothing is sent
This page is static, with no server behind it, and the draw runs in your browser. That is worth more here than on most pages: an entry list is usually a list of real people's names, often with their email addresses beside them. Nothing you paste is uploaded, stored or logged, and the end-to-end suite fails the build if any request could carry an entry.
Questions
What makes a "verifiable draw" verifiable?
The order of operations, not the technology. The page gives you a seed before your list matters. You publish that seed — in the thread, in the group, wherever the result will be announced — and publish the list too. Only then do you draw. Because the winners are a function of the seed and the list and nothing else, anyone holding both can re-run the draw and get the same names. The reason it proves something is that you committed to the seed before you could see what it would produce.
Why does publishing the seed afterwards not count?
Because you could have drawn twenty times and published the seed from the draw you liked. That is the whole problem with every picker that shows you a seed at the end: the artefact looks like proof and carries none. A commitment is only a commitment if it was made before the thing it commits to was known, which is why the seed step on this page comes first and the draw button waits for it.
How would someone actually check my draw?
The receipt under the result shows the seed and the list exactly as it was drawn from. The simplest check is to open this page, choose a verifiable draw, paste your seed and your list in, and confirm the same names come out. The stronger check does not involve this site at all: the random bytes are SHA-256 of the seed, a colon and a block number — 0, 1, 2 and so on, concatenated — and the draw walks the list with a Fisher–Yates shuffle using them. Anyone can reproduce that in a few lines, or start with printf and sha256sum in a terminal.
Should I use a verifiable draw for everything?
No. If nobody needs convincing — you are picking who makes the coffee — the ordinary draw is better: it is unpredictable and there is nothing to publish. A verifiable draw is by definition predictable to whoever holds the seed, so it is the wrong choice when the point is that nobody can know the outcome in advance. Reproducibility and unpredictability are opposites; the page asks which one you want because you cannot have both.
What happens to duplicate names?
They stay. Two lines reading "Ana" are two entries with two chances, because two people really can share a name and quietly merging them would change somebody’s odds without telling them. If they are the same person entered twice, remove the line yourself — that is a decision about your raffle, not one this page should make for you.
Is the draw itself fair?
It is a partial Fisher–Yates shuffle over an index drawn without modulo bias, which is the same machinery the Random Number Generator uses. Every entry is equally likely and no entry can be picked twice within a draw. What it is not is shuffling by sorting — array.sort(() => Math.random() - 0.5) — which most pickers use and which produces a visibly lopsided order.
Why is there no spinning wheel?
Because an animation is the part of a picker that implies fairness while adding none. A wheel makes a result feel witnessed; it does not make it checkable, and the two get confused precisely when it matters. The effort went into the receipt instead.
How many names can I paste in?
Up to 10,000. Past that the page refuses rather than getting slow, and a list longer than that is a spreadsheet rather than something to paste into a text box.
Do the names I paste go anywhere?
No. This is a static page with no server behind it, and the draw happens in your browser. That matters more here than on most pages, because an entry list is usually a list of real people’s names — and often their email addresses. Nothing is uploaded, stored or logged, and the end-to-end test suite records what the draw asks the network for and fails the build if any of it could carry an entry.
Related WGX tools
- Random Number Generator
Draw a number, or several without repeats, from your browser’s cryptographic randomness rather than a source anyone can anticipate.
- Password Generator
Generate a strong password from your browser’s cryptographic randomness. Nothing is sent anywhere.
- QR Code Generator
Turn text or a link into a QR code that encodes the content itself — no redirect, no expiry — and download it as SVG or PNG.