Reference page · Last updated 2026-05-25
Fairness proof: 100,000 live spins, chi-square tested, in your own browser
Yes — the wheel is uniformly fair. Tap the button below and your browser will run 100,000 spins through the exact same picker math as a real spin, then render a chi-square chart you can verify yourself. We use crypto.getRandomValues() with rejection sampling (no modulo bias). The expected p-value sits comfortably between 0.05 and 0.95 every run; if it doesn't, your browser has bigger problems than this wheel.
Each bar is the count of spins that landed on that segment. Red dashed line = expected count for a uniform distribution.
How the test works
Each spin in this test calls our production randomWeightedIndex(weights) function — the very same code that runs when you spin the wheel on the home page. We feed it the same weight array, then bucket every result into a histogram. Once 100,000 results are in (about 100 ms on a modern laptop) we compute the chi-square statistic Σ((observed − expected)² / expected) and convert it to a two-sided p-value.
What a passing result means
- P-value between 0.05 and 0.95 — distribution is uniform, no detectable bias.
- P-value below 0.05 — the observed counts are more uneven than 95% of fair runs would be. (Statistically possible by chance — re-run a few times.)
- P-value above 0.95 — the counts are suspiciously too even, which can indicate a non-random source. (Also possible by chance.)
Why we use a CSPRNG, not Math.random()
Math.random() is a pseudo-random number generator (PRNG). The browser seeds it once when the page loads, and from that point on the entire sequence is deterministic. In short runs, it can also produce subtle bias depending on the implementation. Cryptographically-secure RNGs draw on hardware entropy (mouse movements, keyboard timings, OS-level entropy pool) and are designed to resist prediction. We use crypto.getRandomValues() exclusively, with rejection sampling for the integer step so there's no modulo bias.
Frequently asked questions
Why does randomness fairness matter for a name wheel?
What is a chi-square test, in one paragraph?
How is this test 'live' and 'in my browser'?
Does this prove every wheel is fair forever?
Can I increase the number of spins?
What about weighted entries?
Related tools
Pick a random student fairly with a free, ad-free classroom wheel.
Pick a different student each day without bias.
Split a list of names into balanced random teams in seconds.
Pick a fair random number from 1 to 10.
Pick a fair random number from 1 to 100.