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.
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:
- Math.random() (pseudorandom, not cryptographic): a fast, deterministic algorithm (JavaScript engines typically use a variant called xorshift128+) that produces a sequence which looks random but is fully determined by an internal seed. It is not designed to resist prediction, and naive range-mapping code built on it can introduce a subtle statistical bias. Fine for a game animation or a UI flourish; not something to trust for anything where fairness needs to be provable.
- Web Crypto API / crypto.getRandomValues() (cryptographically secure pseudorandom, this tool): a CSPRNG the browser exposes specifically because ordinary PRNGs like Math.random() are unsuitable for security-sensitive use. It draws from an unpredictable internal state that is far harder to reconstruct or predict than a plain PRNG's, and this generator additionally uses rejection sampling so mapping the output into your chosen Min-Max range introduces no bias at all. This is what every draw on this site actually uses.
- Hardware entropy sources (true random in the strict sense): physical, non-deterministic processes such as atmospheric radio noise (RANDOM.ORG's method), radioactive decay timing, or dedicated hardware noise generators. These aren't "pretending" to be unpredictable; the underlying physical process itself has no deterministic pattern to exploit, even in principle. This is the strongest tier, and this site does not claim to use it: we use the Web Crypto API (tier two) and say so plainly, rather than borrowing RANDOM.ORG's "true random" branding for a method that isn't the same thing.
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?
Is crypto.getRandomValues() good enough for picking a genuine winner fairly?
What is modulo bias, in plain terms?
Can I check that this tool isn't sending my data anywhere?
Want a spinning-wheel pick instead?
Same unbiased Web Crypto API engine, with a visual spin.
Try the random number wheelFree. No account needed.