← Back to the wheel

Randomness audit

Test up to 100,000 wheel spins

Run a local simulation and inspect how often every entry is selected. The test uses your browser's cryptographically secure random-number generator and does not save or send your entries.

Audit settings

8 valid entries · maximum 100

Results

Ready when you are

Run the audit to compare actual selections with the expected even distribution.

How the test works

Every simulated spin gives each entry the same chance. Random values that would create modulo bias are discarded and sampled again. The audit runs entirely on this device and does not modify a saved wheel.

Why can the same entry win repeatedly?

Each spin is independent, so the previous result does not make that entry less likely next time. If you need a draw without replacement, enable Remove winner after each spin on the wheel instead.

Technical transparency

The code this audit actually runs

This is the readable source of the function used for every simulated selection above. Values outside the largest evenly divisible range are sampled again, preventing modulo bias.

View unbiased selection code
function randomIndex(entryCount, pool, position) {
  const limit = Math.floor(0x100000000 / entryCount) * entryCount;
  let cursor = position;

  while (true) {
    if (cursor.value >= pool.value.length) {
      pool.value = new Uint32Array(4096);
      crypto.getRandomValues(pool.value);
      cursor.value = 0;
    }

    const sample = pool.value[cursor.value++];
    if (sample < limit) return sample % entryCount;
  }
}

How the production wheel differs

A saved wheel selects its winner on the server. It combines a fresh cryptographic server seed, the client seed, wheel identity, and eligible-entry hash with SHA-256, then maps that value through the configured entry weights. The visual animation follows the server-selected winner; it does not choose the result.