JavaScript 生成随机字符

27 浏览
0 Comments

JavaScript 生成随机字符

这个问题已经有了答案:

在 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变量中的某个字符中存在问题。也许我没有正确表达变量。

admin 更改状态以发布 2023年5月23日
0
0 Comments

我认为你的代码没有任何问题。我稍微修改了一下,直接从数组中取出索引,而不是使用 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);

0