Need a quick and fair way to get random numbers — for a Lotto pick, PowerBall numbers, a school fete raffle, a club lucky draw, or a classroom pick? This free random number generator for South Africa picks a number, or a whole list of numbers, in any range you choose — from a simple 1 to 10 range up to the widest range of −1,000,000,000,000 to 1,000,000,000,000 — whole numbers only, zero and negatives included. Set the minimum and maximum values in Min and Max, choose how many numbers you need with Count, and press Generate. Both bounds are included, so a range of 1 to 10 can return both 1 and 10.
Every result is produced directly in your browser using the Web Crypto API (crypto.getRandomValues) — which provides cryptographically strong random values from your browser's underlying system randomness. Your numbers are never sent to our server, so we never see or log them. Generation is instant, private, and keeps working on a slow connection once the page has loaded.
The options cover the ways people actually draw numbers. Turn on No duplicates so that no number appears twice — the setting you want for raffles, lottery-style draws, or splitting people into groups without repeats. Need twenty winners out of 500 entrants? Set Min to 1 and Max to 500, turn on No duplicates, set Count to 20, and press Generate. Sort order arranges the result ascending or descending, and one button copies all the results. Switching the output format from Line break to Space-separated or Comma-separated reveals Number of sets: several independent draws at once — twenty sets of 3 numbers for twenty raffle rounds — with Allow duplicates across sets deciding whether the same number may turn up in more than one of them.
How is the randomness actually generated? Your browser provides cryptographically strong random values through the Web Crypto API rather than through a JavaScript PRNG such as Math.random(). When you press Generate, the page requests random values with crypto.getRandomValues and uses them to produce numbers within the range you selected. The underlying source of randomness is provided by the browser and operating system, so the page does not need to maintain its own seed or pseudo-random sequence.
Mapping a raw value onto your range is where generators quietly go wrong, and it is worth one paragraph of its own. Taking the value modulo the size of the range is the obvious approach and the biased one: unless the range divides evenly into 2^32, the lowest numbers come up slightly more often than the rest. That flaw is called modulo bias, and it is measurable rather than theoretical. This generator instead discards any value beyond the largest exact multiple of the range and draws again — a technique called rejection sampling. It costs a few extra draws and buys an exact guarantee: every number between Min and Max carries the same probability, not almost the same.
What makes a number truly random? A number is random enough when previous results tell you nothing about the next one — and in practice there are three levels of that. An ordinary pseudo-random function such as Math.random() runs a deterministic algorithm: anyone who learns its internal state can reproduce the whole sequence, which makes it fine for shuffling a slideshow and unfit for anything where the result must not be predictable. A cryptographically secure generator — the level this tool uses — is also an algorithm, but it is designed to produce unpredictable values using a secure source of system randomness and built so that watching its output reveals nothing about what comes next. Physical sources, such as atmospheric noise or radioactive decay, are a different kind of randomness rather than a stronger one: for drawing a number in a range, a cryptographically secure generator is just as unpredictable in practice. This is exactly why browsers expose a separate crypto API instead of improving Math.random(): the two solve different problems, and only one of them is safe when the outcome matters to somebody.
A random sequence is not supposed to look random to humans. Draw ten numbers between 1 and 10 and you will regularly see a repeat, a near-pair such as 7, 7, 8, or a short run that all lands high — and every one of those is ordinary. Randomness evens out only in the long run, never in a handful of draws: with repeats allowed, each draw is independent, earlier numbers have no influence whatsoever on later ones, and no number ever becomes "due". The instinct that insists otherwise is the gambler's fallacy, and it is the same instinct that makes people poor random number generators themselves — asked to invent a random sequence, we avoid repeats and spread the values far more evenly than chance ever does. Output that looks suspiciously tidy is more likely to have been made up by a person than drawn by chance; random draws produce clumps.
Why choose this random number generator?
- Browser-only generation: numbers are drawn on your device and never sent to our server
- Web Crypto API randomness: cryptographically secure, not Math.random()
- No modulo bias: rejection sampling keeps every number in the range equally likely
- Wide ranges: any whole numbers from −1,000,000,000,000 to 1,000,000,000,000, both bounds included
- No duplicates mode: draw a list with no repeats for raffles and group splits
- Multiple sets: several independent draws in a single click
- Sorting and output formats: ascending or descending, line break, spaces or commas
- History and save to file: keep a copy of every draw
- Unlimited and free: no sign-up, no usage limits, nothing on our servers
Random numbers come in handy every day across South Africa. Teachers call on learners without playing favourites. Schools draw raffle prizes at a fete, churches and clubs pull lucky draw tickets in front of the people who bought them, and sports clubs use random draws to decide tournament or fixture order. Researchers pick a random sample so their findings generalise, and developers generate test data and identifiers during QA. The common thread is a random selection process that can be explained afterwards: the draw uses cryptographic randomness and happens entirely on your device. On its own, though, a random number does not prove a contest was fair: that also takes rules and a list of entries fixed before the draw, and a single draw rather than the best of several.
A few honest limits are worth knowing. No duplicates mode cannot draw more numbers than the range contains: twenty unique values between 1 and 10 do not exist. With duplicates allowed, draws are independent and earlier results do not affect later ones, so refreshing the page does not reset a cycle — there is no cycle to be in. And although the numbers are cryptographically strong, a draw here is a fair pick rather than a prediction: set Max to 52 and Count to 6 for a Lotto line, or Max to 50 and Count to 5 for the main PowerBall numbers. The separate PowerBall number must be selected from 1 to 16. Official lottery draws use their own systems, and nothing generated in your browser is connected to them. Inside those limits the guarantee is a strong one — on every draw, every number still available in your range has exactly the same chance.