How the wheel picks a winner
The wheel draws the winner first, in one random draw, and the spin animation only shows that result. Every spin on Wheel Spinning follows the same 5 steps:
- The wheel turns every visible entry into a slice with its weight. Hidden entries and entries knocked out in Elimination mode get no slice.
- Your browser's
crypto.getRandomValuessupplies 2 random 32-bit numbers, which become a fraction between 0 and 1 with 53 bits of precision. - The fraction is scaled to the total weight, and the slice it falls in wins. A slice with weight 2 covers twice as much of that range as a slice with weight 1.
- A second random fraction picks the landing spot inside the winning slice.
- The wheel turns for the spin time you set, from 1 to 60 seconds, and stops on that spot. With reduced motion turned on in your device settings, the spin is shorter.
Nothing during the animation can change the winner. Spin time, slow spin, the wheel's starting position and the Stop button only change how the result is shown.
What crypto.getRandomValues is
crypto.getRandomValues is the cryptographic random number generator built into modern browsers. The W3C Web Cryptography API Recommendation describes it as a cryptographically strong pseudo-random number generator seeded with truly random values. Browsers also offer Math.random, but MDN's reference warns that it does not give cryptographically secure numbers.
| Source | Built for | Used on Wheel Spinning for |
|---|---|---|
crypto.getRandomValues | Security code, where numbers must be impossible to guess | Every pick, every shuffle and every landing spot |
Math.random | General use, with no security promise | Confetti and sound effects only, never a result |
Is the wheel truly random?
Yes, in the way that matters for a fair draw: nobody can predict or choose the result, even though a browser does not measure physical randomness. A cryptographically secure pseudo-random number generator (CSPRNG) is an algorithm that stretches a small, unguessable starting value into a long stream of random numbers. That starting value, the seed, comes from unpredictable data your device collects, known as entropy.
A "true" random number generator measures a physical process, such as electrical noise. The IETF guide RFC 4086, Randomness Requirements for Security, covers both kinds. It explains that a good generator can stretch one strong seed into many cryptographically strong random values while its workings stay hidden. For a wheel, unpredictability is the test that counts, and it holds for this website too: no server sees or picks the next result.
How the wheel avoids rounding bias
The wheel removes the small biases that simple code introduces, using rejection sampling for whole numbers and a 53-bit fraction for weighted picks. A random 32-bit number has 4,294,967,296 possible values. Split among 3 entries with a plain remainder, 1 value is left over, so the first entry gets 1 more possible value than the other 2.
Rejection sampling throws away any draw that lands in that leftover block and draws again. Every entry then gets exactly the same number of possible values.
| Technique | Used for | What it prevents |
|---|---|---|
| Rejection sampling | Whole-number draws, such as shuffling the list | Modulo bias, where some results get an extra chance in a few billion |
| 53-bit fraction | Weighted picks and the landing spot | Rounding error: each slice's chance matches its weight to far better than one part in a trillion |
| Fisher–Yates shuffle | The Shuffle button | Some list orders coming up more often than others |
Where the wheel stops inside the winning slice
The pointer always stops inside the winning slice, at least 12% of the slice's width away from either edge. The exact spot is random within the middle 76% of the slice. With 8 equal slices, each slice is 45 degrees wide, so the landing zone is the middle 34.2 degrees.
The margin keeps every result clear on a screen, a projector or a stream. It has no effect on the odds, because the winner is already drawn when the landing spot is chosen.
Does pressing Stop change the result?
No. Pressing Stop only brakes the animation, and the wheel still lands on the winner drawn when the spin began. The wheel slows down from its current speed and turns just far enough to reach the same landing spot. If the spin is almost over, Stop lets it finish.
Clicking the wheel, or pressing Space during a spin, works the same way as Stop. None of these actions draws a new number.
Can anyone rig a random wheel?
No. A random wheel on Wheel Spinning has no hidden setting that forces a winner, and weights are the only way to change the odds. 4 design choices keep the wheel fair and open to checking:
- Visible weights. Each entry's chance appears as a percentage in the "Weights, colors & images" table. Weights run from 0.01 to 1,000.
- Hidden means out. A hidden entry has no slice and no chance, so hiding never favors anyone in secret.
- Open duplicate rules. A name typed twice gets 2 slices by default. Turning off "Count duplicates separately" gives repeated lines 1 shared slice.
- No server in the draw. The pick runs in your browser, so the website has no way to steer a result.
For a giveaway, publish the entry list and any weights before the draw. Anyone can then load the same list into the main wheel and check every chance. The prize wheel shows each prize's odds as a percentage.
Why the same name can come up again
Every spin is independent, so the last winner keeps exactly the same chance on the next spin. The wheel has no memory of earlier results. Repeats feel suspicious, but with equal weights they arrive sooner than most people expect.
| Entries on the wheel | Chance of a repeat within 3 spins | Spins before a repeat is more likely than not |
|---|---|---|
| 4 | 62.5% | 3 |
| 8 | 34.4% | 4 |
| 10 | 28.0% | 5 |
| 20 | 14.5% | 6 |
| 30 | 9.8% | 7 |
| 50 | 5.9% | 9 |
| 100 | 3.0% | 13 |
Streaks are normal too. On a yes or no wheel with 2 equal slices, 10 spins contain a run of 3 or more identical answers 82.6% of the time. To stop a name winning twice, remove each winner or turn on Elimination mode. For a class list, the random name picker is built for calling on students.
How to read the 10,000-spin test
To read the 10,000-spin test, compare each entry's actual wins with its expected wins, then check the p-value for how unusual the gaps are. The test sends your list through the same weightedIndex() function the wheel uses. The expected count is the entry's chance multiplied by the number of picks. Kenji, with weight 4 out of a total weight of 8, should win 5,000 of 10,000 picks.
The test skips the animation and calls the pick function directly. Watching 10,000 five-second spins would take nearly 14 hours. Your entries stay in your browser the whole time.
Actual counts always differ a little from expected counts. With 2 equal entries and 10,000 picks, each entry lands between 4,900 and 5,100 wins 95.6% of the time.
The chi-square statistic adds up those gaps, each scaled by its expected count, into one number. The p-value says how often a perfectly fair draw gives gaps that large or larger:
| p-value | Reading | What it means |
|---|---|---|
| 0.05 or more | Typical | Gaps this size are common with a fair wheel. Nothing points to bias. |
| 0.01 to 0.05 | A little unusual | About 1 fair run in 25 (4%) lands here by chance. Run the test again. |
| Under 0.01 | Rare | About 1 fair run in 100 lands here. A real bias shows up again and again across repeated runs. |
A p-value is not the chance that the wheel is fair. A fair generator gives p-values spread roughly evenly between 0 and 1, so an occasional low value is expected. When an entry expects fewer than 5 wins, the reading is rough; choose more picks.
Passing the test has a limit as well. RFC 4086 points out that passing statistical tests does not show whether numbers are unpredictable. Unpredictability comes from the generator itself, which is why every pick uses crypto.getRandomValues.
Questions about wheel fairness
Does hiding an entry change the odds for the others?
Yes. A hidden entry has no slice, so the entries left on the wheel split its share in proportion to their weights. With 5 equal entries, each has a 20% chance. Hide 1, and each of the other 4 has 25%.
Is a random wheel fair for a giveaway?
Yes, when the rules and the full entry list are public before the draw. Record the screen while you spin so entrants can watch the result. The guide on running a fair online giveaway covers each step.
Can the website see or change my result?
No. The pick happens in your browser. Your entries and results are not sent to Wheel Spinning, and the site has no accounts.
Does a longer spin make the result more random?
No. The winner is drawn before the wheel moves, so a 1-second spin and a 60-second spin are equally random.
Does the wheel's starting position matter?
No. The wheel works out the turn needed to reach the drawn landing spot from wherever it rests.
Why does one name seem to win more often?
Short runs swing a lot. With 4 equal names and 20 spins, each name expects 5 wins, yet any count from 2 to 8 happens 93.5% of the time. Over 10,000 picks, the shares settle close to the odds.
Do all wheels on the site use the same randomness?
Yes. Every wheel on Wheel Spinning, from the name picker to the team generator, draws from the same crypto-backed random module.
Sources: W3C Web Cryptography API Recommendation (January 2017), section 10; IETF RFC 4086, Randomness Requirements for Security (June 2005), sections 2 and 6; MDN Web Docs on Math.random. Checked October 2026.