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

新手上路,请多包涵

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

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

原文由 Tom Lehman 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 762
2 个回答

我认为这对你有用:

 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));

原文由 csharptest.net 发布,翻译遵循 CC BY-SA 4.0 许可协议

 //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 个字符串后看到重复的字符。 (平方(36^6) = 46656)

原文由 doubletap 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题