在JavaScript中生成随机的字母和数字组合字符串?

13 浏览
0 Comments

在JavaScript中生成随机的字母和数字组合字符串?

在JavaScript中,生成随机的字母数字字符串(包括大写字母、小写字母和数字),作为可能唯一的标识符,最短的合理方法是什么?

admin 更改状态以发布 2023年5月24日
0
0 Comments

如果你只想允许特定的字符,你也可以像这样实现:

function randomString(length, chars) {
    var result = '';
    for (var i = length; i > 0; --i) result += chars[Math.floor(Math.random() * chars.length)];
    return result;
}
var rString = randomString(32, '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ');

这里有一个jsfiddle来演示:http://jsfiddle.net/wSQBx/

另一种方法是使用一个特殊的字符串来告诉函数使用哪些类型的字符。你可以这样做:

function randomString(length, chars) {
    var mask = '';
    if (chars.indexOf('a') > -1) mask += 'abcdefghijklmnopqrstuvwxyz';
    if (chars.indexOf('A') > -1) mask += 'ABCDEFGHIJKLMNOPQRSTUVWXYZ';
    if (chars.indexOf('#') > -1) mask += '0123456789';
    if (chars.indexOf('!') > -1) mask += '~`!@#$%^&*()_+-={}[]:";\'<>?,./|\\';
    var result = '';
    for (var i = length; i > 0; --i) result += mask[Math.floor(Math.random() * mask.length)];
    return result;
}
console.log(randomString(16, 'aA'));
console.log(randomString(32, '#aA'));
console.log(randomString(64, '#A!'));

示例: http://jsfiddle.net/wSQBx/2/

或者,你可以像下面描述的那样使用base36方法来实现:

function randomString(length) {
    return Math.round((Math.pow(36, length + 1) - Math.random() * Math.pow(36, length))).toString(36).slice(1);
}

0
0 Comments

我刚学到一个非常好的、优雅的解决方案:

Math.random().toString(36).slice(2)

对这个实现的注记:

  • 生成的字符串长度在零到12个字符之间,通常是11个字符,因为浮点字符串化会删除尾部的零。
  • 它不会产生大写字母,只有小写字母和数字。
  • 因为随机性来自于Math.random(),所以输出可能是可预测的,因而不一定是唯一的。
  • 即使假设理想的实现,输出的熵最多只有52位,这意味着在生成大约7000万个字符串之后,您可以预期有重复。
0