Skip to content

Is Wheel of Names Rigged? Fairness Lab & Audit

Run up to 500,000 simulated spins with the exact same picker the wheel uses. Verify true mathematical randomness with live Chi-Square (χ²) goodness-of-fit testing.

Spins per run
Test runs
Statistical Verdict
Looks fair

The spread of winners is consistent with a fair wheel. Small differences between slices are just normal chance.

Chi-squaredf = 7

5.32

p-value: 0.621 (≥ 0.05 is uniform)

Same winner twice in a row

12.47%

Expected: 12.50% (independence check)

Slice Distribution vs Expected Frequency

Observed winner counts mapped directly against the 95% confidence interval bounds.

ObservedExpected95% Confidence Band

Detailed Slice Statistics

Exact count distribution, theoretical expectations, and binomial error ranges per slice.

SliceObservedExpected95% Confidence BandPercentage Share
Alex1,2821,2501,185–1,31512.82%
Maya1,2431,2501,185–1,31512.43%
Jordan1,2161,2501,185–1,31512.16%
Priya1,2781,2501,185–1,31512.78%
Liam1,2761,2501,185–1,31512.76%
Sofia1,2551,2501,185–1,31512.55%
Noah1,2541,2501,185–1,31512.54%
Zara1,1961,2501,185–1,31511.96%

Architecture

How our provably fair random engine works

Winner selection is never an animation trick or flawed pseudo-randomness. Here is how our client-side cryptographic architecture guarantees true mathematical fairness on every spin.

CSPRNG Cryptographic Entropy

Instead of predictable Math.random(), the engine calls the browser's native Web Crypto API (crypto.getRandomValues). This captures physical operating system entropy from thermal and timing noise, ensuring outcomes cannot be predicted or reproduced.

Zero-Modulo Rejection Sampling

Naive pickers use `random % slices`, which disproportionately favors lower slices because 2^32 isn't evenly divisible. Our rejection sampler defines the highest exact multiple of your slice count below 2^32, discarding out-of-bounds numbers to guarantee strictly uniform odds.

Chi-Square (χ²) Goodness-of-Fit

The Fairness Lab aggregates thousands of simulated spins into a Pearson Chi-Square test with (k - 1) degrees of freedom. By calculating the upper-tail p-value via regularized incomplete gamma functions, it mathematically verifies that observed deviations match random variance.

Serial Independence & Memory Check

A fair picker must have zero memory. The lab tracks consecutive spins to measure Markov repeat frequencies. For 8 slices, each slice has an exact 12.5% chance of repeating; any deviation beyond binomial confidence would signal hidden momentum or stuck states.

Statistical Proof & Real Guarantee

Statistical testing demonstrates that thousands of simulated outcomes align with mathematical uniformity. The fundamental guarantee is the execution: rejection-sampled CSPRNG generated 100% client-side before any visual rotation begins.

Privacy-First Utilities

Free, private tools for your daily workflow.

If you need simple tools for daily work, check out Tooltri. We built it with 30+ free tools to merge PDFs, compress photos, generate QR codes, and do quick calculations. You don't have to create any account or pay anything. Everything works directly in your browser, so your files stay on your device and are never saved on any server.

100% In-Browser · Files and data never touch a remote server
Zero Sign-Ups · Instant access to everyday utilities

FAQ

Frequently asked questions

Everything you need to know about the randomness engine, chi-square hypothesis testing, and proof of fairness.

How does the wheel's randomness engine decide a winner?

Before the wheel begins rotating, the winning slice index is picked instantaneously in memory using crypto.getRandomValues coupled with uniform rejection sampling. The subsequent spin animation is purely a visual depiction calibrated to decelerate and settle smoothly on that exact, provably fair slice.

Why does Spin Names Now use crypto.getRandomValues instead of Math.random()?

Standard JavaScript Math.random() is a pseudo-random number generator (PRNG) that is not cryptographically secure, can suffer from state prediction, and varies across browser engines. In contrast, crypto.getRandomValues taps into operating system hardware entropy (such as thermal and CPU timing noise), ensuring truly unpredictable, cryptographically secure uniform random bytes.

What is modulo bias and how does rejection sampling prevent it?

Naive random implementations take a 32-bit random integer and compute `randomInt % numSlices`. Because 2^32 (4,294,967,296) is rarely an exact multiple of your slice count, the lower numbers get picked slightly more often. We eliminate this bias completely using rejection sampling: we determine the largest exact multiple of your slice count below 2^32, and if an integer lands outside this zone, we discard and redraw. Every name has an identical probability down to the exact bit.

What does the Chi-square (df 7) test in the Fairness Lab verify?

The Chi-square goodness-of-fit test evaluates whether the observed distribution of winners matches theoretical expectations (for 8 slices, each slice should win 12.5% of the time). The degrees of freedom (df) is the number of slices minus one (8 - 1 = 7). It aggregates the squared deviations between observed and expected frequencies to test the null hypothesis that the wheel is completely fair.

How should I interpret the p-value result?

A p-value measures the probability of obtaining test results at least as extreme as the observed results under the assumption of a fair wheel. A p-value >= 0.05 confirms that the distribution is consistent with a fair, unbiased process. If the p-value is above 0.05, there is zero evidence of bias.

Why does the p-value occasionally dip below 0.05 on a fair wheel?

In genuine statistical randomness, a p-value below 0.05 is expected to happen by normal chance in approximately 1 out of every 20 test runs (5% of the time). True randomness clusters naturally. What proves fairness is that unusual results do not systematically repeat in a given slice when running multiple tests.

What do the shaded 95% confidence bands in the chart show?

For each slice, the expected frequency follows a binomial distribution with standard deviation σ = √(N · p · (1 - p)). The shaded error bars illustrate the ±1.96σ range. On a fair wheel, approximately 95% of all slice outcomes will land within this shaded band over repeated simulations.

What does the 'Same winner twice in a row' metric measure?

This is a serial independence check. For 8 equally weighted slices, the theoretical probability of consecutive spins picking the exact same winner is 1/8 (12.50%). If a wheel had hidden memory, momentum bias, or stuck states, this percentage would spike. Matching ~12.50% confirms that every spin is an independent trial.

Can the wheel be rigged, manipulated, or intercepted by a server?

No. All slice selections and physics calculations run 100% locally in your client browser. There are no server round-trips during a spin, no hidden remote seeds, and no third-party APIs that can influence the outcome.

Does the wheel's visual spin duration or friction affect the outcome?

No. Because the winning slice is determined cryptographically before the animation starts, the visual duration, deceleration curve, and tick sounds are visual presentation details calculated to land cleanly at the center of the pre-selected winning segment.