我正在使用以下代码生成随机数:
Math.floor((Math.random() * 9999) * 7);
我得到的一些结果:
45130,
2611,
34509,
36658
我如何得到这样的结果(包括2个字母):
TT45130,
PO2611,
KL34509,
GH36658
附带问题:
Math.random()
携带的数字范围是多少?我可以设置特定的值范围吗?没有必要回答,但只是好奇。
答案 0 :(得分:5)
您可以使用下面的函数来获取随机大写字符:
function getRandomUppercaseChar() {
var r = Math.floor(Math.random() * 26);
return String.fromCharCode(65 + r);
}
所以要生成一个你用两个字母前缀指定的代码:
function generateCode() {
var prefix = new Array(2).fill().map(() => getRandomUppercaseChar()).join(""),
integer = Math.floor((Math.random() * 9999) * 7);
return prefix + integer;
}
注意:以上generateCode
函数使用现代ES6和ES5 javascript,这在现代环境(例如Node.js或当前浏览器)中完全没问题。但是,如果您想要更高的兼容性(例如,为了确保它在旧浏览器中工作),您可以像这样重写它:
function generateCode() {
var integer = Math.floor((Math.random() * 9999) * 7);
for (var i = 0, prefix = ""; i < 2; ++i)
prefix += getRandomUppercaseChar();
return prefix + integer;
}
答案 1 :(得分:2)
尝试更简单的答案
var randomNumber = function () {
return Math.floor((Math.random() * 9999) * 7);
}
var randomChar = function () {
return String.fromCharCode(64 + Math.floor((Math.random() * 26)+1));
}
console.log(randomChar()+randomChar()+randomNumber());
//Sample outputs
HB10527 DR25496 IJ12394
答案 2 :(得分:2)
或者您可以radix = 36
将Number#toString
用于此目的。
function getRChar() {
return (Math.random() * 26 + 10 | 0).toString(36).toUpperCase();
}
var s = getRChar() + getRChar() + Math.floor((Math.random() * 9999) * 7);
document.write(s);
答案 3 :(得分:1)
如果您需要使用JS生成随机字符串,最常见的方法是定义字母表并从中选择随机索引:
var alphabet = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
var numbers = "0123456789";
var randomString = "";
// Pick two random chars
for (var i = 0; i < 2; i++) {
var rand = Math.floor(Math.random()*alphabet.length);
randomString = randomString + alphabet.charAt(rand);
}
// Pick four random digits
for (var i = 0; i < 4; i++) {
var rand = Math.floor(Math.random()*numbers.length);
randomString = randomString + numbers.charAt(rand);
}
// randomString now contains the string you want
示例字符串:
OJ8225
YL5053
BD7911
ES0159
答案 4 :(得分:1)
字母数组,生成随机数以获取随机字母,重复获取第二个随机字母,然后加入到代码中生成的随机数:
var alphabet=['A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P','Q','R','S','T','U','V','W','X','Y','Z'];
var ranletter1 = alphabet[Math.floor(Math.random() * alphabet.length)];
var ranletter2 = alphabet[Math.floor(Math.random() * alphabet.length)];
var ranNum = Math.floor((Math.random() * 9999) * 7);
var ranCode = ranletter1 + ranletter2+ ranNum;
答案 5 :(得分:1)
你可以使用String.fromCharCode()和65到90之间的随机整数来获得一个大写字母,即
String.fromCharCode(Math.random() * 26 + 65) + String.fromCharCode(Math.random() * 26 + 65) + Math.floor((Math.random() * 9999) * 7);
给出结果:&#34; SH21248&#34;,&#34; BY42401&#34;,&#34; TD35918&#34;。 如果您想保证字符串的长度始终相同,您也可以使用
String.fromCharCode(Math.random() * 26 + 65) + String.fromCharCode(Math.random() * 26 + 65) + Math.floor(Math.random() * 59993 + 10000);
Math.random()始终返回0到1之间的数字,但绝不会返回0或1。