我有一个有点奇怪的要求,我需要生成用户给出的长度的随机数。用户可以给出Minimum Length
和Maximum Length
,我需要生成由此范围之间的字符长度组成的随机数。
例如,如果Minimum Length
是6
并且Maximum Length
是10
那么我需要生成随机数,其字符数必须在范围6
和10
之间。对于此示例,可以是随机生成器:
123456,
7654321,
12345678,
987654321,
5432109876, etc.
像这样,随机生成器必须包含提供的输入之间的长度。
我知道如何在范围之间创建随机数并基于固定字符长度,但我不知道如何基于可变长度创建。我试图找到答案,但其中大多数都是基于固定长度和固定范围,找不到我正在寻找的确切匹配。
如果有人能帮助我解决这个问题,那就太好了。
您可以生成一个数组(Array.from()
minLen
和maxLen
范围内的随机选择长度(,并用 1 到 9 范围内的随机数字填充它,然后将数组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))
您可以生成范围并从该范围获取随机值。
例如
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 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);
这将有所帮助。
非常感谢大家的回答。这是我使用的方法。
如果需要仅包含数字的随机数:
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-._~()'!*:@,;";