The 1–99 range
One to ninety-nine is every number you can write with two digits and no more. It is the range for squad numbers, hotel doors on a single floor, and any list that stops short of three figures.
Dropping the hundred changes almost nothing: 1.01 percent per number instead of a round 1 percent. It changes one thing that does matter, which is that every result fits in two characters.
Raise the count for up to ten numbers at once, sorted and with no duplicates.
- 1 to 99, both included
- 99 whole numbers
- 1.01%, exactly 1 in 99
- 1 to 10 numbers per draw
- None inside a multi-number draw
- Every draw gets a link that replays it
What a 1–99 draw is for
- Assigning a squad or jersey number in a two-digit league
- Picking a room on a floor numbered 1 to 99
- Drawing a two-digit code for a locker or a tag
- Choosing an entry from a 99-ticket raffle
- Filling a two-digit placeholder in test data
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 99 numbers in this range.
Folding it down with a plain remainder is where most generators go wrong, an error known as modulo bias. 99 does not divide 4,294,967,296 evenly: 4 values are left over at the top, and wrapping them around would make the first 4 numbers in the range fractionally likelier than the rest. This tool throws away any raw value at or above the last exact multiple of 99 and draws a fresh one instead. That is rejection sampling. It fires about 1 in 1,073,741,824 draws, and it is the difference between 1.01% exactly and 1.01% 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.
1–99 and 1–100 behave almost identically, which is worth stating plainly: the extra number shifts each value's share from 1.01 percent to 1 percent and shifts nothing else. Where the two ranges differ is in what people do with them. Asked to pick from 1–100, people avoid 100 and pile onto 37 and 73. Asked to pick from 1–99, they do the same thing with one option fewer. The draw is indifferent either way.
- crypto.getRandomValues, the browser's cryptographic generator
- One unsigned 32-bit value, sometimes more
- Rejection sampling onto 99 slots
- 4 of 4,294,967,296 raw values, redrawn
- No. These tools are never seeded
- Your browser. No server ever sees a draw
1–99 — frequently asked
One number. Each value is worth 1.01 percent instead of 1 percent, which rounds away in almost any use. Pick 1–99 when the answer has to fit in two digits, 1–100 when you want the percentage to be exact.
Set the From field to 10 and the To field to 99 on the main number picker. That excludes the single digits, which 1–99 still allows through.
Raise the count to the size of the squad, up to ten at a time, and the numbers come back distinct. Beyond ten, run a second draw and skip anything already taken.