PlayTools

Random Number Generator

Generate random integers or decimals within any range. Supports multiple numbers and no-duplicate mode.

Runs in your browser — nothing you enter is uploaded

Random draws: fairness, uniqueness, and cryptographic vs PRNG

Use crypto-backed draws when assigning prizes or secrets. PRNG modes are fine for simulations. “Unique numbers only” prevents duplicate raffle tickets within one batch.

Audit compliance may require external attestation—this page is a convenience utility.

How the numbers are generated

Each number comes from your browser’s cryptographically secure generator (crypto.getRandomValues), the same source used to create encryption keys. It is unpredictable even to someone who has seen every earlier result, and it is never seeded from the clock.

Turning random bits into a number in your range is where many generators go subtly wrong. Taking a 32-bit random value modulo the range size makes low numbers slightly more likely whenever the range does not divide 2³² evenly. This tool uses rejection sampling instead: draws that would fall into that uneven tail are discarded and redrawn, so every integer between your minimum and maximum has exactly the same probability. Ranges wider than 2³² combine two draws into a 53-bit value, the largest whole number JavaScript represents exactly.

Results are whole numbers. If you type decimal bounds they are rounded inward — a range of 1.5 to 9.9 draws from 2 to 9 — so the result can never fall outside what you entered.

Duplicates allowed vs unique numbers only

With duplicates allowed, every draw is independent, like rolling a die several times — repeats are expected and are not a sign of a broken generator. Repeats arrive sooner than most people expect: drawing 10 numbers from 1–100 has a 37% chance of at least one repeat, and drawing 23 numbers from 1–365 crosses 50% (the classic “birthday problem”).

With “unique numbers only” ticked, the tool draws without replacement, like pulling tickets from a hat. For ranges up to 100,000 it shuffles the whole range with a Fisher–Yates shuffle and takes the first N values; for larger ranges it draws and skips any value it has already picked. Either way, the order of the results is itself random.

Worked examples

  • Dice: 1 to 6 for a standard die, 1 to 20 for a d20. Set “how many” to the number of dice and leave duplicates allowed — two dice can show the same face.
  • Raffle with 250 numbered tickets and 3 prizes: minimum 1, maximum 250, generate 3, unique only. Draw all prizes in one click so no ticket can win twice.
  • Lottery-style pick (6 from 49): minimum 1, maximum 49, generate 6, unique only, then sort the numbers yourself if you want them in order.
  • Random spreadsheet row: if your data starts on row 2 and ends on row 1,001, use 2 to 1,001 so the header row can never be chosen.
  • Splitting 30 people into teams: number everyone 1–30, generate 30 unique numbers, and assign the first 10 results to team A, the next 10 to team B, and so on.

Running a fair public draw

The generator is fair, but a draw also has to be seen to be fair. Agree the range and the number of winners before drawing, run the draw once on screen or on a recorded call, and do not redraw because of an unwelcome result. Publish the settings (range, count, unique or not) alongside the winning numbers.

The tool keeps no log and stores nothing, which protects privacy but means it cannot later prove what was drawn. Sweepstakes and promotions governed by law in some countries require an independently audited draw; use a regulated provider for those.

Limits

  • Up to 1,000 numbers per click.
  • Bounds can be any whole numbers within about ±9 quadrillion (±2⁵³ − 1).
  • In unique mode, “how many” cannot exceed the size of the range — you cannot pick 11 distinct numbers from 1–10.

These free tools pair well with this page — open them in a new tab to finish your workflow.

Frequently Asked Questions

Is this truly random?

This tool uses window.crypto.getRandomValues(), the browser's cryptographically secure random number generator. It is suitable for security-sensitive applications such as generating lottery numbers, random keys, or nonces. Unlike Math.random(), it cannot be predicted from earlier outputs.

What is the difference between PRNG and CSPRNG?

A PRNG (pseudo-random number generator) uses a deterministic algorithm seeded with a value; given the same seed, it produces the same sequence. A CSPRNG (cryptographically secure PRNG) is unpredictable even if you know prior outputs. This tool uses a CSPRNG.

Can I generate the same number twice?

Yes. Each number is drawn independently with equal probability. There is no guarantee of uniqueness unless you specifically need unique numbers and check for duplicates. For a truly unique set, generate in bulk and remove duplicates, or use a shuffle/permutation approach.

What is the maximum range I can use?

This tool supports integers within the safe JavaScript integer range (up to 2^53 - 1). Every value in the range is equally likely: draws are rejection-sampled to avoid modulo bias, and ranges wider than 2^32 combine two 32-bit draws.

How do I simulate a dice roll?

Set the range to 1–6 for a standard six-sided die. For other dice: 1–4 for a d4, 1–8 for a d8, 1–10 for a d10, 1–12 for a d12, and 1–20 for a d20 (common in tabletop RPGs).