## Generate random number between two numbers in JavaScript

### Question

Is there a way to generate a random number in a specified range (e.g. from 1 to 6: 1, 2, 3, 4, 5, or 6) in JavaScript?

2016/06/02
1
1864
6/2/2016 9:35:18 PM

### Important

The following code works only if the minimum value is `1`. It does not work for minimum values other than `1`.

If you wanted to get a random integer between 1 (and only 1) and 6, you would calculate:

``````Math.floor(Math.random() * 6) + 1
``````

Where:

• 1 is the start number
• 6 is the number of possible results (1 + start (6) - end (1))
2019/06/12
2177
6/12/2019 12:06:18 PM

## Math.random()

Returns an integer random number between min (included) and max (included):

``````function randomInteger(min, max) {
return Math.floor(Math.random() * (max - min + 1)) + min;
}
``````

Or any random number between min (included) and max (not included):

``````function randomNumber(min, max) {
return Math.random() * (max - min) + min;
}
``````

Useful examples (integers):

``````// 0 -> 10
Math.floor(Math.random() * 11);

// 1 -> 10
Math.floor(Math.random() * 10) + 1;

// 5 -> 20
Math.floor(Math.random() * 16) + 5;

// -10 -> (-2)
Math.floor(Math.random() * 9) - 10;
``````

** And always nice to be reminded (Mozilla):

Math.random() does not provide cryptographically secure random numbers. Do not use them for anything related to security. Use the Web Crypto API instead, and more precisely the window.crypto.getRandomValues() method.

2020/06/20

Other solutions:

• `(Math.random() * 6 | 0) + 1`
• `~~(Math.random() * 6) + 1`

Try online

2019/10/03

TL;DR

``````function generateRandomInteger(min, max) {
return Math.floor(min + Math.random()*(max + 1 - min))
}
``````

To get the random number `generateRandomInteger(-20, 20);`

EXPLANATION BELOW

We need to get a random integer, say X between min and max.

Right?

i.e min <= X <= max

If we subtract min from the equation, this is equivalent to

0 <= (X - min) <= (max - min)

Now, lets multiply this with a random number r which is

0 <= (X - min) * r <= (max - min) * r

Now, lets add back min to the equation

min <= min + (X - min) * r <= min + (max - min) * r

Now, lets chose a function which results in r such that it satisfies our equation range as [min,max]. This is only possible if 0<= r <=1

OK. Now, the range of r i.e [0,1] is very similar to Math.random() function result. Isn't it?

The Math.random() function returns a floating-point, pseudo-random number in the range [0, 1); that is, from 0 (inclusive) up to but not including 1 (exclusive)

For example,

## Case r = 0

`min` + 0 * (`max`-`min`) = min

## Case r = 1

`min` + 1 * (`max`-`min`) = max

## Random Case using Math.random 0 <= r < 1

`min` + r * (`max`-`min`) = X, where X has range of min <= X < max

The above result X is a random numeric. However due to Math.random() our left bound is inclusive, and the right bound is exclusive. To include our right bound we increase the right bound by 1 and floor the result.

``````function generateRandomInteger(min, max) {
return Math.floor(min + Math.random()*(max + 1 - min))
}
``````

## To get the random number

`generateRandomInteger(-20, 20)`;

2018/10/01

``````var x = 6; // can be any number
var rand = Math.floor(Math.random()*x) + 1;
``````
2012/12/04

Or, in Underscore

``````_.random(min, max)
``````
2014/10/03