The 1–1000 range
A thousand entries is where a giveaway becomes a logistics problem and the draw itself becomes the easy part. One tap, 0.1 percent per number, done.
It is also a good range for seeing what randomness looks like at scale. Draw a thousand times from 1–1000 and you will land on about 632 different numbers, not a thousand.
Number your entrants in a fixed order first and publish that order, then draw. The result link replays the exact numbers, so nobody has to take your word for it.
- 1 to 1000, both included
- 1,000 whole numbers
- 0.1%, exactly 1 in 1,000
- 1 to 10 numbers per draw
- None inside a multi-number draw
- Every draw gets a link that replays it
What a 1–1000 draw is for
- Drawing a winner from up to a thousand entries
- Picking a random row from a thousand-line list
- Choosing a page in a thousand-page reference
- Generating a test value in the hundreds
- Assigning a ticket number at a large event
How the randomness works
Every tap calls crypto.getRandomValues, the browser's cryptographic generator, and asks it for one unsigned 32-bit value. That lands somewhere between 0 and 4,294,967,295, and it then has to be folded down to the 1,000 numbers in this range.
Folding it down with a plain remainder is where most generators go wrong, an error known as modulo bias. 1,000 does not divide 4,294,967,296 evenly: 296 values are left over at the top, and wrapping them around would make the first 296 numbers in the range fractionally likelier than the rest. This tool throws away any raw value at or above the last exact multiple of 1,000 and draws a fresh one instead. That is rejection sampling. It fires about 1 in 14,510,025 draws, and it is the difference between 0.1% exactly and 0.1% approximately.
Ask for more than one number and the tool keeps drawing until it holds that many distinct values, then sorts them ascending. Nothing is seeded, nothing is sent anywhere, and each draw is independent of the one before it. The roll history under the tool lives in your browser's local storage, where the clear button empties it. The daily lucky numbers elsewhere on this site work the opposite way on purpose: they use a seeded generator so the same date always returns the same set. How random is random sets the two side by side.
Every number is worth one tenth of one percent, and that flatness is the whole guarantee. The counterintuitive part is repetition. A thousand independent draws cover only about 632 of the thousand numbers, because each draw ignores what came before; roughly 368 numbers never appear at all and some appear three or four times. That is not the generator failing to spread out. It is what spreading out actually looks like.
- crypto.getRandomValues, the browser's cryptographic generator
- One unsigned 32-bit value, sometimes more
- Rejection sampling onto 1,000 slots
- 296 of 4,294,967,296 raw values, redrawn
- No. These tools are never seeded
- Your browser. No server ever sees a draw
1–1000 — frequently asked
Tap Generate; the range is already set. Each number carries 0.1 percent, and the draw happens on your device rather than on a server.
Freeze the entry list, number it in an order anyone can reproduce, such as the order comments were posted, then draw once and copy the result link. Publishing the numbering before the draw is what makes the outcome checkable rather than trustworthy-sounding.
Because independent draws have no memory. Any two taps match one time in a thousand, and across a long session those matches accumulate. A generator that refused to repeat would be tracking history, which is the definition of not random.