生成随机字符的javascript

javascript generating random characters

本问题已经有最佳答案,请猛点这里访问。

我正在尝试编程密码生成器。但是,我发现我的代码不可靠。我希望每次运行函数都返回20个随机字符。这在大多数情况下都有效,但是如果我对函数进行了足够多次的垃圾邮件,那么有时我会得到一个低于我标准的结果(例如:2个字符串、无等)。

1
2
3
4
5
6
var longth = 20,
allc ="!@#$%^&*()_+~`|}{[]\:;?><,./-=0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ",
passgen = '';
  for (var i = 0; i < longth; i++) {
    passgen += allc.charAt(Math.floor(Math.random() * allc.length));
  }

不确定我的代码中的逻辑是否有问题,或者我的allc变量中的某个字符是否有中断,从而导致了问题。也许我没有正确地表达变量。


我看不出你的代码有任何问题。我稍微修改了一下,从数组中取出一个直接索引,而不是使用charAt,但这并不重要。

通过创建1000000个字符串来测试此代码,并记录创建条件失败的数量。它似乎没有失败。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
function makePassword(){
  var longth = 20,
  allc ="!@#$%^&*()_+~`|}{[]\:;?><,./-=0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ",
  passgen = '';
  for (var i = 0; i < longth; i++) {
    passgen += allc[Math.floor(Math.random() * allc.length)];
  }
  return passgen;
}

// Test
var failed = [];
var result ="";
for(var x = 0; x < 1000000; ++x){
  result = makePassword();
  if(result.length !== 20){
    failed.push(result);
  }
}

console.log("Incorrect strings generated:" + failed.length, failed);