Random Picker — pick a name, number, or weighted choice
Paste a list and pull a fair random pick — names for a raffle, a number in a range, or a weighted draw where some entries are more likely than others. Crypto-fair, reproducible with a seed, runs entirely in your browser.
How it works
A “random picker” sounds trivial — and most online ones use Math.random() with a sloppy modulo step that quietly skews the result. This page does the boring parts properly so you can use it for actual prize draws, school raffles, or decision-making where fairness matters.
The random source
By default, every pick draws fresh 32-bit integers from crypto.getRandomValues — the Web Crypto API, the same primitive browsers use to seed TLS keys and JWT signatures. It is cryptographically strong and unpredictable, which is overkill for a raffle but means the result cannot be reverse-engineered or biased by a clever attacker.
When you turn on Seed, the picker switches to mulberry32, a public-domain deterministic PRNG: same seed + same inputs ⇒ same output, every time. Announce the seed before the draw, run the pick on stage, and anyone in the room can replay it on their own phone. That is how transparent raffles are run online.
Unbiased integers in a range
To pick a uniform integer in [min, max]from a 32-bit source, you cannot just take the result modulo the range size — when the range does not evenly divide 2³², the lower values come out slightly more often. The standard fix is rejection sampling: compute the largest exact multiple of the range below 2³², draw repeatedly, and discard any value above that cutoff. Within this site's allowed range size, the rejection probability stays under 50%, so the loop almost always finishes on the first try.
Weighted picks
For weighted lists, each entry contributes its weight to a running total. A pick draws a uniform real number in [0, total) and returns the first item whose cumulative weight covers that draw. With weights A:1, B:3, total = 4, so A wins on draws in [0, 1) (25%) and B wins on [1, 4) (75%).
The picker also runs a self-test on demand: 10,000 deterministic weighted picks versus the expected frequencies, scored by χ² goodness-of-fit at α = 0.05. If the test passes you can credibly say “observed frequencies match the configured weights to within statistical noise.” If it fails repeatedly, something is off with your weights — usually a typo putting an enormous number on one line.
Without replacement
When you turn off “Allow duplicates” in the list mode, picks use a pure Fisher–Yates shuffle (Knuth's algorithm P, TAOCP Vol 2 §3.4.2): walk the array from the end, swap each element with a random earlier position, then take the first k entries of the shuffled copy. Every permutation has equal probability — the textbook fair way to draw k winners from a hat.
Worked examples
Frequently asked questions
Sources & references
- MDN — Crypto.getRandomValues (Web Crypto API)
- W3C / WHATWG — Web Cryptography API specification
- Fisher–Yates shuffle (Knuth's algorithm P)
- Kudelski Security — The definitive guide to modulo bias
- NIST/SEMATECH — χ² critical values table
- mulberry32 PRNG (Tommy Ettinger, public domain)
Algorithms and tables on this page were last cross-checked on 2026-05-11. The methodology is reviewed when a relevant browser spec changes — none expected in the near term.
Related tools
Comments & feedback
Spotted a bug or want an improvement? Tell us — our team reviews every comment, and good ideas get built. Comments are public and anonymous.
Found a bug, edge case, or want to suggest an improvement?
Email me at [email protected] — most fixes ship within 24 hours.