我想要一个5个字符的字符串,由从集合[a-zA-Z0-9]中随机选取的字符组成。
用JavaScript实现这一点的最佳方法是什么?
我想要一个5个字符的字符串,由从集合[a-zA-Z0-9]中随机选取的字符组成。
用JavaScript实现这一点的最佳方法是什么?
当前回答
为了从一个数组中生成一个散列作为一个盐,[0,1,2,3]在这个例子中,通过这种方式,我们可以稍后检索散列来填充一个条件。
只需输入一个随机数组,或作为数组的额外安全和快速指纹。
/*该方法非常快速,适用于密集循环*//*返回大小写混合字符*//*这将始终输出相同的哈希,因为salt数组是相同的*/控制台日志(btoa(String.fromCharCode(…新Uint8Array([0,1,2,3])))/*始终输出此处的随机十六进制哈希:30个字符*/控制台日志(btoa(String.fromCharCode(…new Uint8Array(Array(30).fill().map(()=>Math.round(Math.random()*30)))))
使用加密API中的HMAC,了解更多信息:https://stackoverflow.com/a/56416039/2494754
其他回答
带有es6排列运算符的更新版本:
[…数组(30)].map(()=>Math.random().toString(36)[2]).join(“”)
30是一个任意数字,您可以选择所需的任何令牌长度36是可以传递给numeric.toString()的最大基数,表示所有数字和a-z小写字母2用于从如下所示的随机字符串中选择第三个索引:“0.mfbiohx64i”,我们可以取0之后的任何索引。
我想这会对你有用:
函数makeid(长度){let result=“”;const characters=‘EFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvxyz0123456789’;常量字符长度=字符长度;让计数器=0;while(计数器<长度){result+=characters.charAt(Math.floor(Math.random()*charactersLength));计数器+=1;}返回结果;}console.log(makeid(5));
//可以将7更改为2以获得更长的结果。让r=(Math.random()+1).toString(36).substring(7);console.log(“随机”,r);
注:上述算法有以下缺点:
它将生成0到6个字符之间的任何字符,这是因为字符串化浮点时会删除尾随零。这在很大程度上取决于用于字符串化浮点数的算法,这非常复杂。(请参阅论文“如何准确打印浮点数字”。)根据实现的不同,Math.random()可能会产生可预测的(“看起来随机”但不是真正随机的)输出。当需要保证唯一性或不可预测性时,生成的字符串不适合。即使它产生了6个统一的随机、不可预测的字符,由于生日悖论,在只产生了大约50000个字符串之后,你也可以看到重复的字符。(平方英尺(36^6)=4656)
同样基于doubletap的答案,该方法处理任意长度的随机所需字符(仅限小写),并不断生成随机数,直到收集到足够的字符。
function randomChars(len) {
var chars = '';
while (chars.length < len) {
chars += Math.random().toString(36).substring(2);
}
// Remove unnecessary additional characters.
return chars.substring(0, len);
}
npm模块anyid提供了灵活的API来生成各种字符串ID/代码。
const id = anyid().encode('Aa0').length(5).random().id();