javascript 密码强度规则、打分、验证(给出前端代码,后端代码可根据强度规则翻译) (转自http://www.cnblogs.com/bruceli)
2011-04-07 16:03
931 查看
感觉不错粘过来收藏。http://www.cnblogs.com/bruceli
javascript 密码强度规则、打分、验证(给出前端代码,后端代码可根据强度规则翻译)
前言:
密码强度是一个很普遍的功能,比较简单,主要是怎么制定这个强度规则。现在需要升级密码强度的验证,以前的验证比较简单,现在已经不能满足需求了,现在需要可灵活变化并有多级别可配置选择的一个密码强度验证,所以就设计了下面这个东东。在设计前也参考了下比较成熟的强度规则,大同小异,不外乎都采取了打分的机制来控制密码强度规则,这样可配置性高,灵活。本来想直接拿来用的,但是发现都比较旧,有些不太适宜公司开发的需求,可能这个东西比较简单吧,所以也没什么人去更新和写新的代码,所以还是自己动手设计了规则和写了代码。
实现:
原理:
采用打分的机制,打分分为3类(基础分、加分、减分),先求出基础分,在计算加分的部分,最后减去要扣除的分数就为最终总分。
规则:
密码可输入类型(字符,字母大写,字母小写,特殊字符)。
基础分为,密码长度,一个长度为一分,大于18个字符都为18分;密码里面包含一种可输入类型,基础分加4分。
加分为,一种密码可输入类型的总数量大于等于2个,加分2分,如果总数量大于等于5,加分4分。
减分为,如果有连续重复的单个种类字符,则重复一次减1分。
总分50分。
0~10分:不合格(弱)
11~20分:一般
21~30分:中
31~40分:强
41~50分:安全
*分数范围可以自由调整和搭配,其实整个打分规则都可以根据需要修改
code:
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;
}
打分例子:
1111=7分
1@dA=20分
111111=9分
abcdef1=19分
abcd12=18分
abc123=18分
ab123A=22分
aA12j@=26分
aasdfkjjsjjj=16分
111111111dsfskjjkjeh=25分
1111dsfskjjkjeh=25分
1231kb#4ktSF!T@s^j#hkWH=50分
skhk3293ks=24分
sfh#4hHdk=29分
bure12#sk=27分
a@s@dk23=26分
bruceLi@09kt=34分
ce@Li1=24分
END
到这里就结束了,欢迎大家一起来讨论这个打分的规则,大家也可以直接给出自己写好的规则和代码,这样方便大家研究和交流,代码是需要不断维护和更新的,这样我们才能站在前人的脚本上面继续前进。
javascript 密码强度规则、打分、验证(给出前端代码,后端代码可根据强度规则翻译)
前言:
密码强度是一个很普遍的功能,比较简单,主要是怎么制定这个强度规则。现在需要升级密码强度的验证,以前的验证比较简单,现在已经不能满足需求了,现在需要可灵活变化并有多级别可配置选择的一个密码强度验证,所以就设计了下面这个东东。在设计前也参考了下比较成熟的强度规则,大同小异,不外乎都采取了打分的机制来控制密码强度规则,这样可配置性高,灵活。本来想直接拿来用的,但是发现都比较旧,有些不太适宜公司开发的需求,可能这个东西比较简单吧,所以也没什么人去更新和写新的代码,所以还是自己动手设计了规则和写了代码。
实现:
原理:
采用打分的机制,打分分为3类(基础分、加分、减分),先求出基础分,在计算加分的部分,最后减去要扣除的分数就为最终总分。
规则:
密码可输入类型(字符,字母大写,字母小写,特殊字符)。
基础分为,密码长度,一个长度为一分,大于18个字符都为18分;密码里面包含一种可输入类型,基础分加4分。
加分为,一种密码可输入类型的总数量大于等于2个,加分2分,如果总数量大于等于5,加分4分。
减分为,如果有连续重复的单个种类字符,则重复一次减1分。
总分50分。
0~10分:不合格(弱)
11~20分:一般
21~30分:中
31~40分:强
41~50分:安全
*分数范围可以自由调整和搭配,其实整个打分规则都可以根据需要修改
code:
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;
}
打分例子:
1111=7分
1@dA=20分
111111=9分
abcdef1=19分
abcd12=18分
abc123=18分
ab123A=22分
aA12j@=26分
aasdfkjjsjjj=16分
111111111dsfskjjkjeh=25分
1111dsfskjjkjeh=25分
1231kb#4ktSF!T@s^j#hkWH=50分
skhk3293ks=24分
sfh#4hHdk=29分
bure12#sk=27分
a@s@dk23=26分
bruceLi@09kt=34分
ce@Li1=24分
END
到这里就结束了,欢迎大家一起来讨论这个打分的规则,大家也可以直接给出自己写好的规则和代码,这样方便大家研究和交流,代码是需要不断维护和更新的,这样我们才能站在前人的脚本上面继续前进。
相关文章推荐
- javascript 密码强度验证规则、打分、验证(给出前端代码,后端代码可根据强度规则翻译)
- javascript 密码强度规则、打分、验证(给出前端代码,后端代码可根据强度规则翻译)
- javascript 密码强度规则、打分、验证(给出前端代码,后端代码可根据强度规则翻译)
- javascript 密码强度验证规则、打分、验证(给出前端代码,后端代码可根据强度规则翻译)
- js 密码强度验证规则、打分、验证代码
- JavaScript逻辑操作符 转载自博客园 http://www.cnblogs.com/pigtail/archive/2012/03/09/2387486.html
- 深入理解JavaScript系列(20):《你真懂JavaScript吗?》答案详解(http://www.cnblogs.com/TomXu/archive/2012/02/10/2342098.)
- C# winform 登录窗体 记住密码的实现 --来源http://www.cnblogs.com/ou444/archive/2011/09/13/2174911.html
- JavaScript 图片滑动展示效果 转载自http://www.cnblogs.com/cloudgamer/
- javascript小技巧(转自DooIT)http://www.cnblogs.com/ttyp/archive/2004/11/15/63900.html
- http://www.cnblogs.com/lihuiyy/archive/2013/03/28/2987531.html
- JS间隔性滚动代码[修正增加了部分功能] 【转:http://www.cnblogs.com/robot/archive/2008/04/09/1144568.html】
- 用Javascript进行简单的Table点击排序. 【转:http://www.cnblogs.com/robot/archive/2008/08/21/1161801.html】
- 代码生成数据库及更新数据库:Entity Framework first code(http://www.cnblogs.com/haogj/archive/2012/02/17/2356537.ht
- C++析构函数为什么要为虚函数 http://www.cnblogs.com/lixiaohui-ambition/archive/2012/07/13/2589716.html
- HTML实体符号代码速查表__http://www.cnblogs.com/kiter/archive/2011/08/05/2128309.html
- 来自Google的密码强度Javascript验证代码
- solr 打分公式(转载地址:http://www.cnblogs.com/rcfeng/)
- JS间隔性滚动代码[修正增加了部分功能] 【转:http://www.cnblogs.com/robot/archive/2008/04/09/1144568.html】
- C#编码规范和命名规则 http://www.cnblogs.com/linn/archive/2007/06/05/771630.html