A lot of “random” tools online quietly aren't — sorting a list with a naive Math.random() - 0.5 comparator, for instance, produces a measurably biased shuffle. This guide covers why Random Picker uses the browser's cryptographic random source instead, how picking with and without repeats differs, and why running entirely client-side matters for anything from office raffles to more sensitive selections.

Why crypto.getRandomValues instead of Math.random

Math.random() is not specified to be cryptographically secure or uniformly distributed across browsers and engines, and naive modulo-based index selection (Math.floor(Math.random() * n)) can introduce small but real bias toward lower indices. crypto.getRandomValues combined with rejection sampling — discarding out-of-range draws instead of using modulo directly — guarantees an unbiased result. This is the same class of randomness browsers use to generate encryption keys.

Picking with vs. without replacement

The Pick and Multiple tabs select a subset of your list. With the No repeats toggle on, each picked entry is removed from the pool before the next pick, so nobody or nothing is chosen twice. If you ask for more unique picks than there are entries, the tool shows a validation error instead of silently drawing repeats — lower the pick count, add more entries, or turn No repeats off.

Fisher–Yates shuffling explained

The Shuffle tab — and the internal logic behind a no-repeats multi-pick — uses the Fisher–Yates algorithm: starting from the last position, swap it with a random earlier-or-equal position, then move one position left and repeat. This produces every one of the N! possible orderings with equal probability, unlike naive “sort by random comparator” approaches, which are known to skew certain orderings.

When to use each mode

Use Pick for a single winner — a raffle grand prize or deciding who goes first. Use Multiple for several winners or a shortlist, with No repeats on whenever the same person or item shouldn't win twice. Use Shuffle when you need to randomize an entire sequence, such as a speaking order, team assignment order, or playlist order, rather than pick a subset.