如何根据提供的范围最小和最大字符在 Javascript 中生成随机数

How to Generate Random numbers in Javascript based on the provided range Minimum and Maximum characters

我有一个有点奇怪的要求,我需要生成用户给定长度的随机数。用户可以给出 Minimum LengthMaximum Length,我需要生成由该范围内的字符长度组成的随机数。

例如,如果 Minimum Length6 并且 Maximum Length10 那么我需要生成随机数,其字符数必须在范围内610。对于此示例,以下可以是随机生成器:

123456,
7654321,
12345678,
987654321,
5432109876, etc.

像这样,随机生成器必须包含提供的输入之间的长度。

我知道如何在一个范围内和基于固定字符长度创建随机数,但我不知道如何基于可变长度创建。我试图找到答案,但大多数答案都是基于固定长度和固定范围,找不到我要找的精确匹配。

如果有人能帮助我,那就太好了。

您可以生成一个数组(Array.from() of randomly chosen length in the range of minLen and maxLen) and populate that with random digits in the range 1 through 9, then Array.prototype.join() 将数组转换为字符串并转换为数字:

const randomNum = (minLen, maxLen) => 
                    +Array
                      .from(
                        {length: 0|Math.random()*(maxLen-minLen+1)+minLen},
                        () => 0|Math.random()*9+1
                      )
                      .join('')
                      
console.log(randomNum(3,7))

试试这个:

var minLength = 6;
var maxLength = 10;
var generatedNumbers = [];
for(var i=minLength ; i<=maxLength; i++){
   var num = "";    
   for(var j=1;j<=i;j++){
       num = num + Math.floor(Math.random(10) * 10);   
   }
   generatedNumbers.push(num);
}
console.log(generatedNumbers);

编辑

var minLength = 1;
var maxLength = randomNumber;
var generatedNumbers = [];
for(var i=minLength ; i<=maxLength; i++){
   var num = "";    
   for(var j=1;j<=i;j++){
       num = num + Math.floor(Math.random(10) * 10);   
   }
   generatedNumbers.push(num);
}
console.log(generatedNumbers);

这会有所帮助。

您可以生成范围并从该范围中获取随机值。

例如

min = 2
max = 4

rangeMin = 10
rangeMax = 10000

const
    getRandom = (min, max) => Math.floor(Math.random() * (max - min)) + min,
    getRandomX = (min, max) => getRandom(10 ** (min - 1), 10 ** max);

let min = Infinity,
    max = -Infinity;

for (let i = 0; i < 1e6; i++) {
    let r = getRandomX(6, 10);
    if (min > r) min = r;
    if (max < r) max = r;
}

console.log(min, max);
.as-console-wrapper { max-height: 100% !important; top: 0; }

其他解决方案为每个数字生成随机数并将它们连接在一起形成一个数字。这是不必要的。我们知道至少有 m 位的数字至少是 10m - 1。同理,至多n位数表示小于10n.

const randomWithinRange = (min, max) => Math.floor(Math.random() * (max - min) + min);
const randomWithMagnitude = (min, max) => randomWithinRange(Math.pow(10, min - 1), Math.pow(10, max));

const arr = Array(100000).fill().map(() => randomWithMagnitude(6, 10)).sort((a, b) => a - b);
console.log(arr.slice(0, 100).join(", "));
console.log(arr.slice(99900, 100000).join(", "));

注意:我对 100.000 大小的数组进行排序只是为了向您显示生成的最小和最大数字。

非常感谢大家的解答。这是我使用的方法。

如果只需要数字的随机数:

var charset         = "0123456789";
var max_Length      = 5;
var min_Length      = 10;
var charPicker      = Math.floor(Math.random() * (max_Length - min_Length + 1) + min_Length);
var randomId;
for (var i = 0; i < charPicker; i++)
{
    randomId += charset.charAt(Math.floor(Math.random() * charset.length));
}
console.log(randomId);

使用 URL 个特定字符更改字母数字和字母数字的字符集,如下所示:

var charset         = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789";
var charset         = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-._~()'!*:@,;";