Math.random和字母混合abcd等

时间:2016-03-15 11:32:52

标签: javascript random

我正在使用以下代码生成随机数:

Math.floor((Math.random() * 9999) * 7);

我得到的一些结果:

45130,
2611,
34509,
36658

我如何得到这样的结果(包括2个字母):

TT45130,
PO2611,
KL34509,
GH36658

附带问题:

Math.random()携带的数字范围是多少?我可以设置特定的值范围吗?没有必要回答,但只是好奇。

6 个答案:

答案 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 = 36Number#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。