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的语言特性分析
Apr 11 Javascript
JavaScript实现瀑布流布局
Jun 28 Javascript
JQuery实现列表中复选框全选反选功能封装(推荐)
Nov 24 Javascript
angular-cli修改端口号【angular2】
Apr 19 Javascript
EasyUI的TreeGrid的过滤功能的解决思路
Aug 08 Javascript
深入浅出了解Node.js Streams
May 27 Javascript
vue集成kindeditor富文本的实现示例代码
Jun 07 Javascript
小程序中canvas的drawImage方法参数使用详解
Jul 04 Javascript
bootstrap table插件动态加载表头
Jul 19 Javascript
JS面向对象编程基础篇(二) 封装操作实例详解
Mar 03 Javascript
jQuery使用ajax传递json对象到服务端及contentType的用法示例
Mar 12 jQuery
聊聊vue 中的v-on参数问题
Jan 29 Vue.js
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
如何在PHP中使用正则表达式进行查找替换
2013/06/13 PHP
PHP封装CURL扩展类实例
2015/07/28 PHP
php函数连续调用实例分析
2015/07/30 PHP
php获取当前页面完整URL地址
2015/12/30 PHP
js文字滚动停顿效果代码
2008/06/28 Javascript
JavaScript获取多个数组的交集简单实例
2013/11/11 Javascript
JS 操作Array数组的方法及属性实例解析
2014/01/08 Javascript
jquery单行文字向上滚动效果的实现代码
2014/09/05 Javascript
实用jquery操作表单元素的简单代码
2016/07/04 Javascript
微信小程序上传图片功能(附后端代码)
2020/06/19 Javascript
Vue中使用vux配置代码详解
2018/09/16 Javascript
Vuex的初探与实战小结
2018/11/26 Javascript
vue中引入第三方字体文件的方法示例
2018/12/17 Javascript
js实现网页同时进行多个倒计时功能
2019/02/25 Javascript
[02:05:03]完美世界DOTA2联赛循环赛 LBZS VS Matador BO2 10.28
2020/10/28 DOTA
使用Python编写爬虫的基本模块及框架使用指南
2016/01/20 Python
Python中的异常处理相关语句基础学习笔记
2016/07/11 Python
Python3实现发送QQ邮件功能(附件)
2020/12/23 Python
用tensorflow构建线性回归模型的示例代码
2018/03/05 Python
Python写一个基于MD5的文件监听程序
2019/03/11 Python
pyinstaller打包多个py文件和去除cmd黑框的方法
2019/06/21 Python
numpy.random.shuffle打乱顺序函数的实现
2019/09/10 Python
python中property和setter装饰器用法
2019/12/19 Python
python如何快速拼接字符串
2020/10/28 Python
python实现文件分片上传的接口自动化
2020/11/19 Python
美国知名男士服饰品牌:Brooks Brothers(布克兄弟)
2016/08/25 全球购物
财务会计人员求职的自我评价
2014/01/13 职场文书
电气个人求职信范文
2014/02/04 职场文书
财务会计自荐信范文
2014/02/21 职场文书
愚人节活动策划方案
2014/03/11 职场文书
阳光体育活动实施方案
2014/05/25 职场文书
农村优秀教师事迹材料
2014/08/27 职场文书
倡议书怎么写?
2019/04/11 职场文书
Python图片检索之以图搜图
2021/05/31 Python
在项目中使用redis做缓存的一些思路
2021/09/14 Redis
Python进程间的通信之语法学习
2022/04/11 Python