在 JavaScript 中生成随机字符串/字符

2022-08-29 21:53:10

我想要一个由从集合中随机选择的字符组成的5个字符的字符串。[a-zA-Z0-9]

使用 JavaScript 执行此操作的最佳方法是什么?


答案 1

我认为这对你有用:

function makeid(length) {
    var result           = '';
    var characters       = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789';
    var charactersLength = characters.length;
    for ( var i = 0; i < length; i++ ) {
      result += characters.charAt(Math.floor(Math.random() * 
 charactersLength));
   }
   return result;
}

console.log(makeid(5));

答案 2

//Can change 7 to 2 for longer results.
let r = (Math.random() + 1).toString(36).substring(7);
console.log("random", r);

注意:上述算法具有以下缺点:

  • 它将生成 0 到 6 个字符之间的任意值,因为在字符串化浮点时会删除尾随零。
  • 它在很大程度上依赖于用于字符串化浮点数的算法,这非常复杂。(请参阅论文“如何准确打印浮点数”。
  • Math.random()可能会产生可预测的(“随机”外观,但不是真正的随机)输出,具体取决于实现。当您需要保证唯一性或不可预测的时,生成的字符串不合适。
  • 即使它生成了6个均匀随机,不可预测的字符,由于生日悖论,在仅生成大约50,000个字符串后,您也可以看到重复。(sqrt(36^6) = 46656)