javascript生成随机字符[重复]

Posted

技术标签:

【中文标题】javascript生成随机字符[重复]【英文标题】:javascript generating random characters [duplicate] 【发布时间】:2017-04-11 16:33:26 【问题描述】:

我正在尝试编写密码生成器。但是,我发现我的代码不可靠。我希望我的函数的每次运行都返回 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 变量中的某个字符是否存在中断而导致问题。也许我没有正确表达变量。

【问题讨论】:

什么意思?你确定这行不通吗? 你的标准是什么? “有时我得到的结果低于我的标准(例如:2 个字符串,无等)” - 嗯?显示的代码生成一个字符串,那么“2 个字符串”、无等是什么意思?您能否请edit 您的问题添加一些错误结果的示例? 意思是“字符”。 【参考方案1】:

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

【讨论】:

以上是关于javascript生成随机字符[重复]的主要内容,如果未能解决你的问题,请参考以下文章

java随机生成6位不重复的字符串

java随机生成6位不重复的字符串

java 生成不重复字符串

java 生成UUID重复

在java中生成随机字符串[重复]

我想用JavaScript生成1到100之间的100个不能重复的随机数,不需要排序,只生成100个不