javascript生成随机字符

时间:2016-11-28 01:50:37

标签: javascript

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

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

不确定我的代码中是否存在逻辑问题,或者我的allc变量中的某个字符是否导致出现问题。也许我没有正确表达变量。

1 个答案:

答案 0 :(得分:0)

我发现您的代码没有任何问题。我稍微修改了它以从数组中取出直接索引,而不是使用charAt,但这不重要。

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

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