生成一个随机数字序列,然后用JavaScript在该序列后面附加一个大写字母

Generating a random numeric sequence, then appending a capital letter to that sequence in JavaScript?

本文关键字:一个 大写字母 随机数 字序 然后 JavaScript      更新时间:2023-10-16

我正在尝试用JavaScript编写的脚本创建唯一标识符。我对这些标识符应用的约束如下:

  1. 标识符的前九个字符必须是随机的数字序列。我将"数字"定义为{0,1,2,3,4,5,6,7,8,9}上的集合
  2. 每个标识符的最后一个字符必须是一个随机的英文大写字母。我在{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}上定义了这个集合

我知道真正的随机性不是由任何编程语言来表示的。有些编程语言只是有一个模拟"随机性"的库函数,但我不认为任何语言真正实现了真正的随机性。尽管如此,让我们假设JavaScriptMath.random()函数是随机性的最佳实现。

以下是我迄今为止拥有的JavaScript代码:

// the numbers in this array represent the utf-8 codes for the uppercase letters A-Z
var uppercaseLetters = new Array(65,66,67,68,69,70,71,72,73,74,75,76,77,78,
    79,80,81,82,83,84,85,86,87,88,89,90);
// http://stackoverflow.com/questions/16753876/javascript-button-to-pick-random-item-from-array
var randomElement = uppercaseLetters[Math.floor(Math.random() * 
    uppercaseLetters.length)];
document.write(String.fromCharCode(randomElement));
convertedElement = String.fromCharCode(randomElement);
// document.write("<br /> <br />");
// borrowed String.fromCharCode from some part of the Mozilla developer website
// you can also see the utf-8 character set on wikipedia:
// http://en.wikipedia.org/wiki/UTF-8
/* for(var index = 0; index < 26; index++) {
        document.write(String.fromCharCode(uppercaseLetters[index]));
} */
document.write("<br /> <br />");
var result;    
for(var count = 0; count < 9; count++) {
    var randomNumber = Math.ceil((Math.random() * 10) - 1);
    // var randomNumber = Math.ceil((Math.random() * 9)); may also work
    document.write(randomNumber);
} 
result += convertedElement;
document.write(result);
// http://stackoverflow.com/questions/1451009/javascript-infamous-loop-problem
/* function createDigitString() {
for(var count = 0; count < 9; count++) {
        var randomNumber = Math.ceil((Math.random() * 10) - 1);
        // var randomNumber = Math.ceil((Math.random() * 9)); may also work
        document.write(randomNumber);
    } 
} */

这是显示它的HTML:

<!DOCTYPE html>
<html>
<head>
    <base href="file:///C:/Users/sillyname/" /> 
    <script src="random-sequence.js"></script>
</head>
<body>
</body>
</html>

这两个文件显然存储在同一个目录中。因此,这个代码应该显示一个"随机"的9位序列,跳过几行,然后显示一个随机的大写字母。现在,我想通过将字母附加到数字序列上来将两者结合起来。实现这一目标的最佳(或最简单)方法是什么?

编辑:我还应该澄清,我想分别维护这两段"随机模拟"代码。换句话说,我想将最终序列存储在一个变量中,同时保持可分性:

var finalSequence = nineRandomDigits + randomUppercaseLetter

编辑:好吧,我想我有我想要的感谢每一位贡献者。这是最终的解决方案。

function randomUppercaseLetter() {
    var letter = String.fromCharCode(64 + Math.ceil(Math.random() * 26));
    return letter;
}
function randomNumber(len) {
    var randomNumber;
    var n = '';
    for(var count = 0; count < len; count++) {
        randomNumber = Math.ceil((Math.random() * 10) - 1);
        n += randomNumber.toString();
    }
    return n;
}
// Usage:
var finalSequence = randomNumber(9) + randomUppercaseLetter();
document.write(finalSequence);

这个表达式将产生所需的ID:

var id = Array.apply(0, Array(9)).map(function() {
    return String.fromCharCode(48 + Math.floor(10 * Math.random()));
}).join('') + String.fromCharCode(65 + Math.floor(26 * Math.random()));

Array.apply(0, Array(9)).map()是一个技巧(请参阅此处和此处),用于避免生成前9个数字的显式for循环。

要稍微放松肌肉,请使用辅助功能:

function randChar(start, count) {
    return String.fromCharCode(start + Math.floor(count * Math.random()));
}
function generateId() {
    return Array.apply(0, Array(9)).map(function() {
        return randChar(48, 10);
    }).join('') + randChar(65, 26);
}

这是我提出的最后一个JavaScript解决方案,也是我选择坚持使用的解决方案。Alnitak提供了一个令人惊叹的JS答案,它也完成了同样的工作,但以一种更优雅和"神奇"的方式。如果你真的有兴趣掌握JavaScript,我建议你仔细看看他的答案。

function randomUppercaseLetter() {
    var letter = String.fromCharCode(64 + Math.ceil(Math.random() * 26));
    return letter;
}
function randomNumber(len) {
    var randomNumber;
    var n = '';
    for(var count = 0; count < len; count++) {
        randomNumber = Math.floor(Math.random() * 10);
        n += randomNumber.toString();
    }
    return n;
}
// Usage:
var finalSequence = randomNumber(9) + randomUppercaseLetter();
document.write(finalSequence);

为了便于测试和澄清,使用此HTML显示结果:

<!DOCTYPE html>
<html>
<head>
    <base href="file:///C:/Users/aUser/" /> 
    <script src="random-sequence.js"></script>
</head>
<body>
</body>
</html>

我将HTML文件命名为random-sequence.HTML。HTML和JS文件都存储在同一目录中。

您可以在for之前创建一个var,并在末尾添加字母,如下所示:

var result = "";
for(var count = 0; count < 9; count++) {
    var randomNumber = Math.ceil((Math.random() * 10) - 1);
    result+= randomNumber;
} 
result+= randomElement;
document.write(result);

编辑:工作jsfiddle

相关文章: