Is this random number generator cryptographically secure?
Yes. The tool uses the Web Crypto API — specifically crypto.getRandomValues(new Uint32Array(...)) — which is the browser-native CSPRNG. It is suitable for generating tokens, salts, lottery picks, and security-sensitive draws. It is not Math.random(), which is not cryptographically secure.
What is modulo bias and how does it affect very large ranges?
When you map a 32-bit random value into a smaller range using min + (n % range), some output values can be slightly more likely than others if the range does not divide evenly into 2^32. The bias is statistically negligible for ranges below ~2^24 but matters in cryptographic protocols. For lotteries, simulations, and dev/test work the bias is undetectable.
Can I generate random numbers without duplicates?
Yes — toggle "Allow duplicates" off. The tool keeps drawing fresh random values and discarding repeats until it has the requested count of unique numbers. The count must not exceed the size of the range (max − min + 1), otherwise no solution exists.
How fast is the generator?
Generating 1000 numbers takes well under a millisecond on modern hardware. The Web Crypto CSPRNG is implemented in native browser code and benchmarks at hundreds of millions of bytes per second. The bottleneck is usually rendering the result, not the randomness.
Can I seed the generator for reproducible output?
No. The Web Crypto API is intentionally unseedable — that is what makes it cryptographically secure. If you need reproducible pseudo-random sequences (for tests or simulations) use a seedable PRNG library such as seedrandom, or Math.random() with a custom seeded implementation.
What is the maximum range?
JavaScript safely handles integers up to 2^53 − 1 (Number.MAX_SAFE_INTEGER). The tool internally uses 32-bit unsigned integers for randomness, so ranges up to roughly 4 billion are perfect. For larger ranges, the modulo-bias section above applies and you should use BigInt-based RNG.
Can I generate floating-point numbers?
This tool generates integers only. To produce floats in [min, max), divide a 32-bit random by 2^32 and multiply by (max − min). The Web Crypto API does not expose a getRandomFloat function; use crypto.getRandomValues(new Uint32Array(1))[0] / 2**32 to build one.
How does this compare to Math.random()?
Math.random() is fast but uses an unspecified PRNG (xorshift128+ in V8). It is fine for animations and games but unsuitable for security tokens, lottery picks, or anything that an attacker might try to predict. crypto.getRandomValues is slower per call but unpredictable and the right choice for any non-trivial randomness.