Written by Sarah Mitchell · Reviewed by Alex Chen · July 20, 2026
Generate random numbers in any range with control over count, duplicates, and sorting.
Click Generate to create random numbers.
The TL3 Random Number Generator picks numbers inside any range you define and performs the whole draw inside this tab. Nothing is uploaded, nothing is stored, and the page keeps working offline once it has loaded. You set the range, decide how many numbers you want, choose whether repeats are allowed, and pick a sort order — the results appear instantly, and a statistics row beneath them reports the count, sum, average, smallest, and largest values of the current draw.
Depending on the mode you select, the page uses one of two different sources of randomness, so the same tool serves casual draws and draws where fairness genuinely matters.
The results regenerate as you type, so every change to the range, count, duplicates, or sort setting updates the output immediately without a Generate button. Use the Copy button to grab the numbers one per line, or read the stats row beneath the output for the sum, average, and extremes of the current draw.
With repeats allowed, the page fills a Uint32Array through crypto.getRandomValues() and folds each 32-bit value into your range. That is the same entropy source the operating system uses for encryption, which makes this mode the right pick for contest drawings, raffles, and anywhere a winner must not be predictable.
With duplicates turned off, the page switches to a partial Fisher-Yates shuffle: it builds an array of every value in your range, then repeatedly pulls a random remaining value without replacement until it has the count you asked for. This guarantees a set of unique numbers. The selection inside that shuffle uses Math.random(), which is not cryptographically seeded, but the shuffle math still gives every unique combination the same chance of appearing — this mode exists for fairness and variety, not for generating secrets.
Leave the default range at 1 to 100 with a count of 5 and you might see 17, 42, 58, 73, 91. The stats row reports five values, a sum of 281, an average of 56.20, and a smallest and largest of 17 and 91. Switch the sort to ascending or descending and the same five numbers reorder; switch duplicates to "no" and you are guaranteed five distinct values, while "yes" gives every draw an independent chance to repeat one.
The relationship between count and range matters: a 1 to 10 range holds only ten possible values, so a unique draw can return at most ten numbers. Ask for eleven and the page refuses with an explanation instead of silently repeating a value.
Three boundaries are worth knowing before a big draw. First, if the minimum is larger than the maximum, the page shows "Minimum must be less than or equal to maximum." and skips the draw. Second, in unique mode a count larger than the range is impossible, so the page replies with the exact arithmetic — for example, "Cannot generate 15 unique numbers in range 1-10 (10 possible values)." Third, the on-screen list is capped at 500 characters, so a very large draw is shown truncated with an ellipsis even though the Copy button still exports every number.
Empty or unreadable fields fall back to the defaults of 1 for the minimum, 100 for the maximum, and a count of 1, so the page always has something sensible to draw.
For security work — API tokens, password salts, session IDs — reach for a dedicated cryptographic generator instead. This tool is built for fair draws, and security-critical randomness deserves a tool with its own explicit guarantees.
Yes. It is filled from crypto.getRandomValues(), a cryptographically secure source backed by operating system entropy. That is a much stronger source than the plain Math.random() that many generators rely on.
The partial Fisher-Yates shuffle only uses randomness to choose which remaining value gets picked next. The math of the shuffle guarantees every unique combination has equal probability regardless of the source, so Math.random() is sufficient for fair variety — and it keeps the page responsive even on very large ranges.
It summarizes the current draw: the number of values returned, their total, their average to two decimals, and the smallest and largest values in the set. It is a fast sanity check when you are comparing several draws.
The on-screen preview stops at 500 characters to keep the layout tidy on huge draws. The Copy button still exports the complete list, one number per line, so nothing is lost.
No. Unique mode needs a pool at least as large as the count, and the page refuses with the exact numbers when that fails. Allow duplicates instead, or widen the range.
No. The draw runs entirely in this tab. Copying to the clipboard is a browser-local action, and nothing is transmitted to any server.