带模式字符串支持的随机密码生成器






4.04/5 (11投票s)
一个基于 JavaScript 的随机密码生成器,支持模式字符串。
引言
最近,我的一个项目需要一个功能,即在系统中注册新用户时,必须自动生成该用户的密码。该需求还规定,密码生成过程应支持以下功能:
- 密码的最小长度应该是可配置的。
- 密码的最大长度应该是可配置的。
- 大写/小写字母出现的数量应该是可配置的。
- 密码应至少包含 x 个数字和/或符号。
- 密码应该全部是大写或全部是小写或两者都有。
在经过一些谷歌搜索后,我找到了一个非常好的 密码生成器。不幸的是,这是用 PERL 编写的。由于我的项目是使用 MS 技术(VB/ASP)开发的,所以我需要一个使用这些技术的解决方案,这就是我最终创建这个 JavaScript 函数的原因。
脚本输入
该脚本接受以下四个输入参数
模式
- 这基本上定义了密码的字符组成。(默认值为autogenerated
。)MinLength
- 密码的最小长度。(默认值为 8 个字符。)MaxLength
- 密码的最大长度。(默认值为 15 个字符。)AllowDuplicate
- 确定是否可以随后出现已经使用的字符。(默认值为False
。)
所有这些参数都是可选的。如果没有传递任何值,脚本将使用默认值。如果密码的最大长度大于模式字符串的长度,脚本会自动生成一个新的模式字符串。实际上,这种行为可以被更改为只生成 (maxlength - pattern.length)
个模式字符。
模式字符串
这个小脚本的核心是模式字符串。此字符串基本上包含以下内容
- L - 表示在此位置需要一个小写英文字母。
- U - 表示在此位置需要一个大写英文字母。
- 9 - 表示在此位置需要一个 0-9 之间的数字。
- S - 表示在此位置需要一个符号字符。
如果未指定模式字符串,脚本会自动生成一个。为此,我使用了 JavaScript 中可用的 Math.random
函数。genPattern
函数基本上生成一个 1-4 之间的随机数,并根据它决定使用哪个模式字符。这个过程会一直重复,直到达到密码的最大长度
function genPattern(pintLen)
{
var strRet = "";
var iCntr = 0;
var rndNo = 0;
for (iCntr = 0; iCntr < pintLen; iCntr++)
{
rndNo = Math.floor((4 - 1 + 1) * Math.random() + 1)
switch (rndNo)
{
case 1:
strRet += "9";
break;
case 2:
strRet += "U";
break;
case 3:
strRet += "S";
break;
case 4:
strRet += "L";
break;
}
}
return strRet;
}
密码生成
实际的密码是通过为模式字符串中的每个模式字符调用 getRandomChar(strCharSet, strProcessed, blnAllowDup)
函数生成的,直到达到密码的最大长度。
结论
总的来说,这是一个非常简单的脚本,与 GeodSoft 的密码生成器相比,提供的选项/灵活性有限。但是它确实满足了正常的需求。我使用 GeodSoft 的 密码评估器 检查了生成的密码,发现此脚本生成的密码相当强大。
发布历史
- 2005 年 10 月 4 日 - 首次发布。
- 2006 年 1 月 28 日 - 修复了错误。(感谢 Mike 指出了这些错误。)