PickRandom LogoPickRandom

Learn

How to Run a Fair Raffle or Lottery Draw

7 min read

A raffle lives or dies on one thing: whether people believe the draw. The prize can be modest and the stakes low, but the moment a participant suspects the winner was favored — even accidentally — you have a problem no apology fixes. The good news is that fairness is not a vibe; it is a short list of concrete properties you can check off before you draw.

The five properties of a fair draw

  • Uniform selection — every ticket has exactly the same probability of winning; the mechanism must not favor early entries, late entries, or short names
  • One entry per ticket — each ticket appears in the pool exactly once; duplicates silently multiply someone's odds
  • A published method — participants know, before the draw, how the winner will be chosen
  • Independent draws — each draw carries no memory of previous ones, except deliberate rules you announced (like removing past winners)
  • An auditable record — after the fact, anyone can verify who was in the pool and what was drawn

Everything below is just these five properties turned into a procedure.

Step 1 — Freeze and clean the entry list

Close entries at the announced time and export the list once. Working from a live, still-changing list is the most common way draws go wrong: an entry added after the cutoff, or one that exists twice because someone signed up on two devices. Deduplicate against whatever defines “one person” in your rules — an email address, a name, an order number. If your rules intentionally allow multiple tickets per person (say, one per purchase), that’s fine, but it must be the published rule, not an accident of messy data.

Number the final list from 1 to N and share it — or a hash of it — before you draw. That single act converts “trust me” into “check for yourself”: nobody can quietly add or remove a ticket afterward.

Step 2 — Draw with a uniform random source

The draw itself is one uniform random integer between 1 and N. “Uniform” is doing real work in that sentence: a human picking a number is not uniform (we avoid round numbers and edges), and even code can be subtly non-uniform. The classic pitfall is modulo bias — mapping a random byte onto N tickets with a bare % favors low-numbered tickets whenever N doesn’t divide evenly into the byte range:

// Uniform ticket draw, no modulo bias
function drawTicket(n) {
  const max = Math.floor(0x100000000 / n) * n;
  while (true) {
    const x = crypto.getRandomValues(new Uint32Array(1))[0];
    if (x < max) return (x % n) + 1; // ticket number in [1, n]
  }
}

Note the source: crypto.getRandomValues(), the browser’s cryptographically secure generator, seeded from operating-system entropy. A plain Math.random() draw is predictable to anyone who can observe the generator’s earlier outputs — a theoretical concern for a bake-sale raffle, a real one the moment prizes are worth gaming. Every PickRandom tool draws from the secure generator for exactly this reason: the cost is zero, so the predictable option has nothing left going for it.

Physical draws satisfy the same property differently: identical folded tickets, one per entry, mixed thoroughly in an opaque container, drawn without looking. The classic failure modes are physical too — tickets that stick together, insufficient mixing, or a drawer who can feel the difference between paper stocks.

Step 3 — Multiple winners, done in order

Drawing several winners means drawing without replacement: remove each winner’s ticket from the pool before the next draw, so nobody wins twice. Draw the prizes in a pre-announced order — grand prize first or last, but decided beforehand — because re-ordering prizes after you know the winners is a fairness leak, even with honest intentions. Each individual draw remains independent and uniform over the tickets still in the pool; the only “memory” between draws is the removal rule you published.

Step 4 — Leave a record

Auditability is what separates a fair draw from a draw that merely was fair. Keep, and share where appropriate:

  • The frozen, numbered entry list (or its hash, if entries are private)
  • The announced rules — cutoff time, tickets per person, prize order, replacement policy for unreachable winners
  • The draw itself — a screen recording or live stream is the simplest strong evidence
  • The result — which ticket numbers won which prizes, posted where entrants can see it

One last, unglamorous point: real lotteries and prize draws are regulated in most places — permits, age limits, rules about requiring purchase. This guide covers the fairness mechanics, not the law; if money changes hands, check your local rules first.

Run through the five properties, freeze the list, draw uniformly, record everything — and the draw defends itself. Fairness, it turns out, is mostly preparation.

Try it yourself

  • Draw from Box Simulate drawing a random option from a virtual box. Great for raffles, giveaways, or selecting a winner.
  • Wheel Spinner Spin a colorful wheel to randomly select an option from your list. Perfect for classroom activities or making decisions.

← Back to all guides