Enter names, then pick locally.
Updates automatically as you type.
Calculated in your browser; your inputs are not sent to us. Privacy
Calculation details
Planning estimate only, not financial, tax, or legal advice. Verify assumptions and current rules before making decisions.
This tool runs in your browser. Your calculator inputs and results are never transmitted to us or to ad/affiliate partners. Ads and sponsored links may set third-party cookies to serve and measure them, but they never receive your calculation values. If you explicitly save a scenario, its permitted fields stay in local browser storage until you clear them. See our Privacy Policy.
Use this result
Share the current inputs or ask ChatGPT to explain the calculation in context.
More options
What does this calculator estimate?
Random name picker: paste a list of names and pick one at random for giveaways, classroom draws, or team selection. Free, runs in your browser, no signup.
How this calculator works
Frequently asked questions
How does a random name picker work?
It uses a built-in randomization algorithm to shuffle your entered names and select one (or more) winners , all processed instantly in your browser.
Do I need to sign up or create an account to use it?
No, this random name picker requires no signup, no login, and no personal information , it works entirely in your browser with zero registration.
Is my data stored or shared anywhere?
No. All names you enter are processed locally in your browser and are never saved, stored on a server, or shared with any third party.
Cite this tool
BoringToolsKit. “Random Name Picker.” boringtoolskit.com/random-name-picker/. Free to reference in articles, syllabi, and answer posts with a link.
Privacy: Inputs and results stay in this browser. Any future sponsored recommendation or advertisement will be clearly labeled and kept separate from the calculation.
A worked draw: what the modulo actually does
Suppose you paste 5 names: Ada, Bo, Cy, Dee, Eli. parseNames() splits on newlines, trims each line, drops blanks, and dedupes in order, so you get an array of length 5 with indexes 0 through 4. The draw generates one unsigned 32-bit integer from crypto.getRandomValues, a whole number between 0 and 4,294,967,295, then takes that number modulo 5.
Because 4,294,967,296 is not evenly divisible by 5, the residues are not perfectly equal: 5 goes into 2^32 exactly 858,993,459 times with a remainder of 1. That leftover remainder means index 0 (Ada) is hit by 858,993,460 of the possible values while indexes 1 through 4 (Bo, Cy, Dee, Eli) are hit by 858,993,459 each. Ada's edge over each other name is 1 in about 8.6 billion extra probability, roughly 0.0000000116 percentage points. For a classroom or raffle that is invisible; if you ever needed provable uniformity at scale, the fix is rejection sampling, redraw when the raw value reaches 4,294,967,295, the one unusable tail value for a 5-name list.
The visible reveal runs 15 frames at 45 milliseconds each, about 675 milliseconds of cycling, and only the final frame is the crypto-selected name. The 14 intermediate frames use Math.random for show; they never influence the outcome.
Boundary cases: where the picker stops being a fair draw
The cap is 80 characters per line: an 81-character entry is silently filtered out rather than truncated, so a long legal name disappears from the pool with no warning. Duplicates are removed, so listing 'Sam' three times does not give Sam three tickets; each distinct name is exactly one ticket. If you want weighted odds, this tool cannot do it.
At one name the draw is trivially that name every time, and the grammar switches to '1 name'. At the other end there is no hard maximum; you could paste thousands of lines, but the 8-row history only remembers your last 8 draws and older results are gone on page reload, since nothing is stored.
Two things are not random sources here. The spin animation's flicker uses Math.random, which is not cryptographically strong, though it never picks the winner. And a browser without crypto.getRandomValues falls back to Math.random entirely, still uniform per draw but weaker for adversarial use. Finally, entries are treated as exact strings: 'Sam ' and 'Sam' collapse after trimming, but 'SAM' and 'Sam' stay separate, so case differences can split one person into two tickets.