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 10 Javascript
简述JavaScript的正则表达式中test()方法的使用
Jun 16 Javascript
jQuery实现类似标签风格的导航菜单效果代码
Aug 25 Javascript
jquery mobile开发常见问题分析
Jan 21 Javascript
第二篇Bootstrap起步
Jun 21 Javascript
AngularJS入门教程之Cookies读写操作示例
Nov 02 Javascript
基于zepto.js实现手机相册功能
Jul 11 Javascript
3种vue路由传参的基本模式
Feb 22 Javascript
Vue.js计算机属性computed和methods方法详解
Oct 12 Javascript
jquery实现直播弹幕效果
Nov 28 jQuery
vue实现图片上传预览功能
Dec 23 Javascript
分享几个JavaScript运算符的使用技巧
Apr 24 Javascript
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中调用JAVA
2006/10/09 PHP
PHP安全编程之加密功能
2006/10/09 PHP
PHP中遍历stdclass object的实现代码
2011/06/09 PHP
邮箱正则表达式实现代码(针对php)
2013/06/21 PHP
php图片处理函数获取类型及扩展名实例
2014/11/19 PHP
PHP进阶学习之垃圾回收机制详解
2019/06/18 PHP
JQuery与iframe交互实现代码
2009/12/24 Javascript
ASP 过滤数组重复数据函数(加强版)
2010/05/31 Javascript
Extjs grid添加一个图片状态或者按钮的方法
2014/04/03 Javascript
jQuery添加删除DOM元素方法详解
2016/01/18 Javascript
JavaScript实现页面跳转的方式汇总
2016/05/16 Javascript
ionic js 复选框 与普通的 HTML 复选框到底有没区别
2016/06/06 Javascript
AngularJS指令详解及示例代码
2016/08/16 Javascript
使用openSpeDiv方法实现Ecshop登录弹窗框效果
2017/03/13 Javascript
React Native之ListView实现九宫格效果的示例
2017/08/02 Javascript
使用jQuery实现两个div中按钮互换位置的实例代码
2017/09/21 jQuery
bootstrap中selectpicker下拉框使用方法实例
2018/03/22 Javascript
微信小程序实现打卡日历功能
2020/09/21 Javascript
vue缓存之keep-alive的理解和应用详解
2020/11/02 Javascript
vue 基于abstract 路由模式 实现页面内嵌的示例代码
2020/12/14 Vue.js
Vue 实现可视化拖拽页面编辑器
2021/02/01 Vue.js
[07:55]2014DOTA2 TI正赛第三日 VG上演推进荣耀DKEG告别
2014/07/21 DOTA
[44:09]DOTA2上海特级锦标赛A组小组赛#1 EHOME VS MVP.Phx第二局
2016/02/25 DOTA
python局域网ip扫描示例分享
2014/04/03 Python
python将字符串转换成数组的方法
2015/04/29 Python
python简单实现基于SSL的IRC bot实例
2015/06/15 Python
Django自关联实现多级联动查询实例
2020/05/19 Python
什么是python的必选参数
2020/06/21 Python
Python 获取异常(Exception)信息的几种方法
2020/12/29 Python
selenium设置浏览器为headless无头模式(Chrome和Firefox)
2021/01/08 Python
屈臣氏乌克兰:Watsons UA
2019/10/29 全球购物
公关关系专员的自我评价分享
2013/11/20 职场文书
医学生职业规划范文
2014/01/05 职场文书
舞蹈专业大学生职业规划范文
2014/03/12 职场文书
高中同学会致辞
2015/08/01 职场文书
golang 比较浮点数的大小方式
2021/05/02 Golang