javascript 密码强度验证规则、打分、验证(给出前端代码,后端代码可根据强度规则翻译)


Posted in Javascript onMay 18, 2010

前言:

密码强度是一个很普遍的功能,比较简单,主要是怎么制定这个强度规则。现在需要升级密码强度的验证,以前的验证比较简单,现在已经不能满足需求了,现在需要可灵活变化并有多级别可配置选择的一个密码强度验证,所以就设计了下面这个东东。在设计前也参考了下比较成熟的强度规则,大同小异,不外乎都采取了打分的机制来控制密码强度规则,这样可配置性高,灵活。本来想直接拿来用的,但是发现都比较旧,有些不太适宜公司开发的需求,可能这个东西比较简单吧,所以也没什么人去更新和写新的代码,所以还是自己动手设计了规则和写了代码。

实现:

原理:

采用打分的机制,打分分为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 学习历程和心得分享
Dec 12 Javascript
Jquery中的层次选择器与find()的区别示例介绍
Feb 20 Javascript
js密码强度校验
Nov 10 Javascript
手机端js和html5刮刮卡效果
Sep 29 Javascript
JavaScript 动态三角函数实例详解
Jan 08 Javascript
JavaScript实现翻页功能(附效果图)
Feb 16 Javascript
Vue中使用vux的配置详解
May 05 Javascript
vue小白入门教程
Apr 02 Javascript
jQuery实现参数自定义的文字跑马灯效果
Aug 15 jQuery
ES10 特性的完整指南小结
Mar 04 Javascript
element日历calendar组件上月、今天、下月、日历块点击事件及模板源码
Jul 27 Javascript
jQuery实现全选按钮
Jan 01 jQuery
JS request函数 用来获取url参数
May 17 #Javascript
asp.net+js 实现无刷新上传解析csv文件的代码
May 17 #Javascript
JQuery中的ready函数冲突的解决方法
May 17 #Javascript
jQuery 学习第七课 扩展jQuery的功能 插件开发
May 17 #Javascript
jQuery 学习第六课 实现一个Ajax的TreeView
May 17 #Javascript
jQuery 学习第五课 Ajax 使用说明
May 17 #Javascript
jQuery实现的立体文字渐变效果
May 17 #Javascript
You might like
用mysql内存表来代替php session的类
2009/02/01 PHP
不要轻信 PHP_SELF的安全问题
2009/09/05 PHP
Windows下安装PHP单元测试环境PHPUnit图文教程
2014/10/24 PHP
ThinkPHP模板之变量输出、自定义函数与判断语句用法
2014/11/01 PHP
深入讲解PHP的Yii框架中的属性(Property)
2016/03/18 PHP
一个简单安全的PHP验证码类、PHP验证码
2016/09/24 PHP
php 广告点击统计代码(php+mysql)
2018/02/21 PHP
用函数式编程技术编写优美的 JavaScript
2006/11/25 Javascript
JavaScript页面刷新与弹出窗口问题的解决方法
2010/03/02 Javascript
最好用的省市二级联动 原生js实现你值得拥有
2013/09/22 Javascript
jQuery滚动监听实现商城楼梯式导航效果
2017/03/06 Javascript
javascript实现滑动解锁功能
2017/03/22 Javascript
Angular4集成ng2-file-upload的上传组件
2018/03/14 Javascript
vue-cli或vue项目利用HBuilder打包成移动端app操作
2020/07/29 Javascript
python list转dict示例分享
2014/01/28 Python
在Django中编写模版节点及注册标签的方法
2015/07/20 Python
在Python中的Django框架中进行字符串翻译
2015/07/27 Python
深入解析Python的Tornado框架中内置的模板引擎
2016/07/11 Python
python for循环输入一个矩阵的实例
2018/11/14 Python
Python使用pydub库对mp3与wav格式进行互转的方法
2019/01/10 Python
python实现串口自动触发工作的示例
2019/07/02 Python
卡西欧G-SHOCK英国官网: 防水防震手表
2018/01/08 全球购物
美国购买肉、鸭、家禽、鹅肝和熟食网站:D’Artagnan
2018/11/13 全球购物
Linux常见面试题
2013/03/18 面试题
高中同学聚会邀请函
2014/01/11 职场文书
家长对老师的感言
2014/03/11 职场文书
农民工讨薪标语
2014/06/26 职场文书
乡镇干部个人对照检查材料(群众路线)
2014/09/26 职场文书
群众路线教师自我剖析材料
2014/09/29 职场文书
群众路线自我剖析及整改措施
2014/11/04 职场文书
护士2014年终工作总结
2014/11/11 职场文书
年度考核表个人总结
2015/03/06 职场文书
起诉书范文
2015/05/20 职场文书
正规借条模板
2015/05/26 职场文书
基于Python的EasyGUI学习实践
2021/05/07 Python
MySQL中datetime时间字段的四舍五入操作
2021/10/05 MySQL