LuckPicker

Tool

Weighted Random Picker

Give each entry its own odds — and see the exact probability table before you draw.

Weighted Random Picker

A line with no number is weight 1. A weight of 0 means the entry can never be drawn.

Exact draw probability for each entry
EntryWeightChance
Alex110.0%
Becky330.0%
Chris110.0%
Deepa550.0%

Give each entry a number and the draw respects it. Three tickets beats one ticket, a 5 beats a 1, and the exact percentage each entry holds is printed above the button before you commit to anything.

This is the tool most people actually want when they reach for a name picker and then start pasting somebody's name in three times. Duplication works for whole numbers and falls apart the moment you want 2.5, or a 40/35/25 split, or a hundred entries where four of them are worth 1.5 tickets.

The odds table is not decoration. Unequal odds are perfectly legitimate; unequal odds that nobody announced are the problem, and the table makes announcing them the default rather than an extra step.

How the Weighted Random Picker works — and why it's fair

Weights are normalised rather than counted. The tool sums every positive weight, draws a single random float scaled to that total using crypto.getRandomValues, and walks the entries subtracting each weight until the running total goes negative — whichever entry crossed the line is the winner. That is a cumulative-sum walk, and it is why a weight of 2.5 works exactly as well as a weight of 3.

The naive alternative is to build a flat array with each entry repeated `weight` times and draw uniformly from it. That is correct for whole numbers and wrong for everything else: it cannot express 2.5 tickets at all, and for a hundred entries weighted in the thousands it builds an array of hundreds of thousands of strings to make one draw. The cumulative walk uses one float and no extra memory regardless of the weights.

Because weights are normalised, only their ratios matter. Entries weighted 2, 3 and 5 behave identically to entries weighted 20, 30 and 50, and identically to 0.2, 0.3 and 0.5. This is worth knowing before you try to make a weight "bigger" by adding zeros to everything.

A weight of zero means the entry can never be drawn. That is a genuine setting rather than an error — it is how you park an entry without deleting it — and the odds table shows it honestly as 0.0%. Negative weights are treated the same way rather than throwing, because a slider dragged past zero should not break the draw.

A line with no parseable number after its last comma is treated as weight 1, not as an error and not as zero. That choice is deliberate: silently dropping an entry because of a typo is the single worst failure a fairness tool can have, because nobody notices an absent name.

The draw is a single event, not a simulation. It does not run a thousand trials and take the modal answer, which would be slower and no more correct — the exact probability of each outcome is already the number in the table.

When the Weighted Random Picker is fair — and when it is not

What it does guarantee

  • Each entry's long-run share of wins converges on exactly the percentage shown in the table.
  • Fractional and very large weights are handled exactly, with no rounding and no array expansion.
  • Only ratios matter, so scaling every weight by the same factor changes nothing.

What it does not

  • It is not an equal-chance draw and does not claim to be. Anyone affected by the result should see the table.
  • One draw tells you nothing about whether the weights are right. A 5% entry winning is entirely ordinary.
  • A mistyped weight is indistinguishable from an intended one. The table is the only check, which is why it is always visible.

Two worked examples

Four entries weighted 1, 3, 1, 5

  • Total weight is 10, so the shares are 10%, 30%, 10% and 50%.
  • The float draw lands somewhere in [0, 10) and the walk finds which band it fell in.
  • Deepa at weight 5 wins half the time — but losing four draws in a row still happens about 6% of the time.

A raffle where three people bought 2.5 books of tickets

  • Weights of 2.5 are impossible to express by duplicating lines; the cumulative walk handles them directly.
  • With 40 entrants totalling 62.5 weight, a 2.5-weight entrant holds exactly 4.0%.
  • Scaling everything by 2 to avoid decimals would produce identical odds — only ratios matter.

Where unequal odds are the honest answer

Raffles with multiple ticket purchases are the canonical case, and the one where equal odds would actually be unfair: somebody who bought five tickets and somebody who bought one should not have the same chance, and pretending otherwise is a different kind of rigging.

Chore assignment runs the same mechanic in reverse — weighting by how undesirable a job is, or by how little someone has done recently, so the draw corrects a running imbalance instead of ignoring it. That is a deliberate thumb on the scale, and it works precisely because everybody can see the numbers.

Community and volunteer allocation uses it for seniority or contribution weighting, where the important property is not that the weights are correct but that they are visible. A published table invites argument about the weights themselves, which is the argument worth having.

If every entry genuinely deserves the same chance, the plain name picker is simpler and says so. If what you need is a fixed-size sample rather than one winner, the random sample tool draws exactly n without replacement.

Frequently asked questions

Why not just paste a name in three times?

That works for whole numbers and nothing else. It cannot express 2.5 tickets, it makes the entry list unreadable, and for large weights it builds an enormous list to make one draw.

Do the weights have to add up to 100?

No. They are normalised, so only ratios matter — 2/3/5 and 20/30/50 and 0.2/0.3/0.5 all behave identically.

What happens to an entry with weight 0?

It can never be drawn, and the table shows it as 0.0%. That is a legitimate way to park an entry rather than delete it.

What if I forget the weight on a line?

It is treated as weight 1. Dropping the entry silently would be far worse — an absent name is the one error nobody notices.

Can I use decimals?

Yes, any positive number works. That is the main practical advantage of the cumulative-sum approach over duplicating entries.

Does the tool verify my weights are sensible?

No. A mistyped 50 where you meant 5 produces a perfectly valid draw with wrong odds, which is exactly why the percentage table is always on screen.

Can I draw several distinct winners by weight?

This page draws one. Drawing several by weight without replacement is a different operation, because removing a winner changes everyone else's share.

Is a weighted draw still random?

Completely. Random means unpredictable, not equal — a weighted draw is unpredictable within known, published odds.

Why show percentages before the draw rather than after?

Because odds nobody saw in advance are indistinguishable from odds invented afterwards. The table before the button is the whole point.

← Back to all tools