Skip to content

Free tool

True Random Number Generator

"True random" gets used loosely online, so here's the honest, verifiable version: there are three genuinely different ways a computer produces a "random" number, and they are not interchangeable. This generator uses the middle tier, the Web Crypto API's cryptographically secure pseudorandom number generator (CSPRNG), which is a real, significant step up from the plain Math.random() function most free number generators quietly use, and it's what powers the numbers below. It is not the same thing as a hardware entropy source like atmospheric radio noise, which sites such as RANDOM.ORG use for their own true random number service; the comparison table below explains exactly where each method sits and why it matters.

Number type

Generated with the Web Crypto API (cryptographically secure, unbiased) in your own browser: nothing you enter is ever sent to a server.

Three tiers of "random", compared honestly

Every random number a computer produces falls into one of three tiers, from weakest to strongest:

Why this still matters for an everyday random number

For picking a raffle winner, rolling a virtual die, or drawing a classroom sample, the practical difference between tier two (Web Crypto API) and tier three (hardware entropy) is not something anyone would ever notice: both are unpredictable and unbiased for that kind of everyday use. The difference that does matter day to day is between tier one (Math.random()) and tier two: a naive Math.random()-based generator can have a real, measurable bias toward certain numbers in a range, especially when the range size doesn't divide evenly into the generator's output space, while a properly implemented CSPRNG draw with rejection sampling does not. That's the gap this tool closes, verifiably, using a standard browser API rather than a marketing claim.

How to verify this yourself

Open your browser's developer console on this page and type crypto.getRandomValues(new Uint32Array(1)): this is the exact standard, MDN-documented Web Crypto API function this generator's engine calls internally, not a hidden or proprietary implementation. Anyone with basic JavaScript knowledge can inspect the network tab while generating numbers here and confirm nothing is sent to a server at all, since the entire draw, from your Min/Max input to the final number, happens in a single synchronous block of client-side code.

What "unbiased" actually means, with an example

Say you want a random number from 1 to 3, and your underlying random source only produces the numbers 0 through 9 (10 possible outputs). A naive approach, output % 3, gives 0, 1, 2, 0, 1, 2, 0, 1, 2, 0 for source values 0 through 9: the value 0 comes up 4 times out of 10, while 1 and 2 each come up only 3 times. That's modulo bias: a small, real skew that makes some numbers in your target range measurably more likely than others. This generator avoids that entirely with rejection sampling: any draw from the source that would fall in that leftover, unevenly-sized region is thrown away and redrawn, so every one of your 3 target numbers ends up with an exactly equal chance, no matter what range size you ask for.

Generate a number with this tool

The generator on this page is the exact same tool as the main random number generator: set a Min and Max, choose how many numbers and whether they should be unique, and generate. For a spinning-wheel style single pick instead, see the random number wheel; for a version with quick-start presets and no setup, see number generator.

Frequently asked questions

Is this generator "true random" in the strict, hardware-entropy sense?
No, and this page deliberately does not claim that. It uses the Web Crypto API's cryptographically secure pseudorandom generator (CSPRNG), a real and verifiable step above a plain Math.random() implementation, but not the same as a hardware entropy source like atmospheric noise. See the three-tier comparison above for the honest distinction.
Is crypto.getRandomValues() good enough for picking a genuine winner fairly?
Yes. For everyday use (raffles, samples, games, decisions), a CSPRNG with rejection sampling is unpredictable and statistically unbiased; the practical difference from hardware entropy sources is not something that affects fairness for these use cases.
What is modulo bias, in plain terms?
It's a small but real skew that happens when a random source's output range doesn't divide evenly into your target range, using a naive modulo (%) operation: some numbers end up statistically more likely than others. Rejection sampling, used by this generator, removes that bias entirely by discarding and redrawing values that would cause it.
Can I check that this tool isn't sending my data anywhere?
Yes. Open your browser's network tab while generating numbers: no request is made. The entire draw runs synchronously in client-side JavaScript using the standard crypto.getRandomValues() API.

Want a spinning-wheel pick instead?

Same unbiased Web Crypto API engine, with a visual spin.

Try the random number wheel

Free. No account needed.