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 相关文章推荐
jQuery使用动态渲染表单功能完成ajax文件下载
Jan 15 Javascript
js中replace的用法总结
Dec 27 Javascript
动态添加删除表格行的js实现代码
Feb 28 Javascript
jQuery中Ajax的load方法详解
Jan 14 Javascript
javascript中动态函数用法实例分析
May 14 Javascript
浅谈jQuery页面的滚动位置scrollTop、scrollLeft
May 19 Javascript
Bootstrap教程JS插件滚动监听学习笔记分享
May 18 Javascript
jQuery 利用$.ajax 时获取原生XMLHttpRequest 对象的方法
Aug 25 Javascript
基于Layer+jQuery的自定义弹框
May 26 Javascript
JS获取本地地址及天气的方法实例小结
May 10 Javascript
在JavaScript中使用严格模式(Strict Mode)
Jun 13 Javascript
中级前端工程师必须要掌握的27个JavaScript 技巧(干货总结)
Sep 23 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面向对象全攻略 (四)构造方法与析构方法
2009/09/30 PHP
7个超级实用的PHP代码片段
2011/07/11 PHP
PHP以及MYSQL日期比较方法
2012/11/29 PHP
基于PHPExcel的常用方法总结
2013/06/13 PHP
getimagesize获取图片尺寸实例
2014/11/15 PHP
PHP实现一维数组转二维数组的方法
2015/02/25 PHP
php返回当前日期或者指定日期是周几
2015/05/21 PHP
PHP的PDO常用类库实例分析
2016/04/07 PHP
YII2框架中excel表格导出的方法详解
2017/07/21 PHP
为JavaScript添加重载函数的辅助方法
2010/07/04 Javascript
可兼容IE的获取及设置cookie的jquery.cookie函数方法
2013/09/02 Javascript
js实现全国省份城市级联下拉菜单效果代码
2015/09/07 Javascript
JS面向对象(3)之Object类,静态属性,闭包,私有属性, call和apply的使用,继承的三种实现方法
2016/02/25 Javascript
Javascript之BOM(window对象)详解
2016/05/25 Javascript
Bootstrap页面布局基础知识全面解析
2016/06/13 Javascript
老生常谈 关于JavaScript的类的继承
2016/06/24 Javascript
ui组件之input多选下拉实现方法(带有搜索功能)
2016/07/14 Javascript
如何实现星星评价(jquery.raty.js插件)
2016/12/21 Javascript
使用jQuery监听扫码枪输入并禁止手动输入的实现方法(推荐)
2017/03/21 jQuery
Vue 前端实现登陆拦截及axios 拦截器的使用
2019/07/17 Javascript
[01:23:59]2018DOTA2亚洲邀请赛 4.1 小组赛 B组 VP vs Secret
2018/04/03 DOTA
[53:38]OG vs LGD 2018国际邀请赛淘汰赛BO3 第三场 8.26
2018/08/30 DOTA
简单了解Python中的几种函数
2017/11/03 Python
python实现黑客字幕雨效果
2018/06/21 Python
Python使用pyshp库读取shapefile信息的方法
2018/12/29 Python
Python opencv实现人眼/人脸识别以及实时打码处理
2019/04/29 Python
Python跑循环时内存泄露的解决方法
2020/01/13 Python
Python单元测试模块doctest的具体使用
2020/02/10 Python
Python图片处理模块PIL操作方法(pillow)
2020/04/07 Python
Python ckeditor富文本编辑器代码实例解析
2020/06/22 Python
解决virtualenv -p python3 venv报错的问题
2021/02/05 Python
sklearn中的交叉验证的实现(Cross-Validation)
2021/02/22 Python
C语言开发工程师测试题
2016/12/20 面试题
公司成本主管岗位责任制
2014/02/21 职场文书
SpringCloud Alibaba项目实战之nacos-server服务搭建过程
2021/06/21 Java/Android
Java循环队列与非循环队列的区别总结
2021/06/22 Java/Android