Random Number Generator
Pick random numbers between any min and max. Integer or decimal output, with or without duplicates. Browser-only, uses cryptographically-strong randomness.
min=1, max=100 → 47
Pick random numbers between any min and max. Integer or decimal output, with or without duplicates. Browser-only, uses cryptographically-strong randomness.
min=1, max=100 → 47
Generates random numbers between a minimum and maximum value, using the browser's crypto.getRandomValues for cryptographically-strong randomness — not predictable like Math.random.
Default behaviour returns 10 integers between 1 and 100. Useful for rolls, draws, sampling, and anywhere you need a defensible "truly random" pick.
Pick a winner number from your participant list (1 to N). Cryptographically random; defensible if anyone questions the pick.
Roll one or many dice of any face count. 1–6 for d6, 1–20 for d20, 1–100 for percentile.
Pick N random rows from a list of M for a quick-look spot check or QA pass.
Random-event triggers, damage rolls, loot drops — any game logic that needs a roll.
Generate random IDs, prices, or quantities for QA test data — much faster than typing fake numbers by hand.
The tool uses the Web Crypto API's crypto.getRandomValues() to generate cryptographically strong random values. Under the hood, it draws 32-bit unsigned integers from the operating system's CSPRNG (e.g., /dev/urandom on Unix). For integer output, it maps the raw 32-bit value to the requested range via modulo reduction, rejecting out-of-range values to eliminate bias. For decimal output, it divides by 2^32 to produce a uniform float in [0,1), then scales to the desired interval. This avoids the predictable linear congruential generator used by Math.random().
The tool never seeds; every call pulls fresh entropy. Duplicate prevention is enforced client-side by storing generated numbers in a Set and discarding collisions until the requested count is met (practically limited by the range size). All computation occurs in the browser; no data is sent over the network.
How does this browser-based generator stack up against common programmatic alternatives?
| This tool | Python random module | Spreadsheet (RAND) | |
|---|---|---|---|
| Randomness source | cryptographic (crypto.getRandomValues) | Mersenne Twister (predictable) | Spreadsheet-specific PRNG (often linear congruential) |
| Integer / decimal | Both, with configurable decimal places | randint() for integers, uniform() for decimals | RAND() only returns decimals; RANDBETWEEN() for integers |
| Duplicate handling | Optional enforced uniqueness client-side | Manual coding (sample() or while loops) | No built-in; requires drag and manual check |
| Privacy & offline | Fully offline, no network calls | Script runs locally, but code must be trusted | Online spreadsheet sends data to server |
The concept of generating random numbers mechanically dates to dice in antiquity (3000 BCE). In computing, John von Neumann proposed the Middle-Square method in 1946, but modern cryptographically secure pseudo-random number generators (CSPRNGs) emerged in the 1990s with algorithms like Yarrow (1999) and Fortuna. The Web Crypto API was standardized in 2014, giving browser applications direct access to the operating system’s entropy pool — replacing the weaker Math.random() which, on most engines, uses a non-cryptographic PRNG like xorshift128+.
It uses crypto.getRandomValues — the browser's cryptographically-secure source. Suitable for raffles and other high-stakes draws.
By default, yes — each draw is independent, so duplicates are possible. To pick unique numbers from a range, generate more than you need and dedupe with Remove Duplicate Lines.
The default is integer-only. For decimals, multiply your bounds and divide the output (e.g. min=0, max=10000, then divide by 100 in your head).
Indistinguishable for any practical purpose. The cryptographic randomness is at least as fair as any physical die or coin you could roll.