function passwordGrade(pwd) {
var score = 0;
var regexArr = ['[0-9]', '[a-z]', '[A-Z]', '[\W_]'];
var repeatCount = 0;
var prevChar = '';
//check length
var len = pwd.length;
score += len > 18 ? 18 : len;
//check type
for (var i = 0, num = regexArr.length; i < num; i++) { if (eval('/' + regexArr[i] + '/').test(pwd)) score += 4; }
//bonus point
for (var i = 0, num = regexArr.length; i < num; i++) {
if (pwd.match(eval('/' + regexArr[i] + '/g')) && pwd.match(eval('/' + regexArr[i] + '/g')).length >= 2) score += 2;
if (pwd.match(eval('/' + regexArr[i] + '/g')) && pwd.match(eval('/' + regexArr[i] + '/g')).length >= 5) score += 2;
}
//deduction
for (var i = 0, num = pwd.length; i < num; i++) {
if (pwd.charAt(i) == prevChar) repeatCount++;
else prevChar = pwd.charAt(i);
}
score -= repeatCount * 1;
return score;
}
原理:
采用打分的机制,打分分为3类(基础分、加分、减分),先求出基础分,在计算加分的部分,最后减去要扣除的分数就为最终总分。
规则:
密码可输入类型(字符,字母大写,字母小写,特殊字符)。
基础分为,密码长度,一个长度为一分,大于18个字符都为18分;密码里面包含一种可输入类型,基础分加4分。
加分为,一种密码可输入类型的总数量大于等于2个,加分2分,如果总数量大于等于5,加分4分。
减分为,如果有连续重复的单个种类字符,则重复一次减1分。
总分50分。
0~10分:不合格(弱)
11~20分:一般
21~30分:中
31~40分:强
41~50分:安全
*分数范围可以自由调整和搭配,其实整个打分规则都可以根据需要修改