JavaScript中的随机字母数字字符串?

新手上路,请多包涵

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

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

阅读 719
2 个回答

如果您只想允许特定字符,您也可以这样做:

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

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

我刚刚发现这是一个非常好的和优雅的解决方案:

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

此实现的注意事项:

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

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

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