Spin Yes No

Random Number Wheel

Pick a min and max, spin for a whole number in that range, and optionally exclude numbers already drawn for bingo-style calling.

Press Draw a number.

How a number is drawn

Every whole number in range has exactly an equal chance: with a range of size R (max − min + 1), each number's probability is exactly 1/R. When numbers already drawn are excluded, R shrinks by one after every draw, and the same unbiased draw runs again over whatever remains.

result = candidates[randomInt(0, candidates.length − 1)]

Worked example

A default 1-20 range (20 numbers, 5.00% chance each to start), drawing 5 numbers with repeats excluded, using a fixed illustrative seed (your real draws above use live randomness):

Draw #NumberOdds at that draw
1141 in 20
211 in 19
341 in 18
431 in 17
5171 in 16

Frequently Asked Questions

Why does the range switch from a wheel to a plain number above a certain size?

Above 24 numbers, a wheel's slices get too thin to letter clearly, so the tool draws straight from the range with the same unbiased engine and shows the result as a big number instead -- nothing about the fairness changes, only the visual.

What does "don't redraw a number already called" do?

It removes each drawn number from the pool of candidates for the next draw, so the range shrinks by one with every call -- exactly how bingo-style number calling or a raffle with several distinct prizes needs to work. Turn it off if you want every draw fully independent, repeats included.

Can the range include negative numbers?

Yes -- min and max just need to be whole numbers with max greater than min; a range like -10 to 10 works the same as 1 to 100.

Is this the same as JavaScript's Math.random() * (max - min) + min?

No, deliberately not -- that pattern has floating-point rounding quirks and, when floored to an integer, the same kind of subtle bias a naive modulo has. This tool draws an unbiased integer directly with rejection sampling over crypto.getRandomValues instead.

What happens when the whole range has been drawn?

With repeats excluded, the Draw button disables once every number in the range has been called -- press Reset to bring the full range back into play.

Every result here is drawn live in your browser with cryptographically-secure randomness -- nothing is predetermined, saved, or replayable. See the Terms.

Every tool