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 相关文章推荐
JS中批量给元素绑定事件过程中的相关问题使用闭包解决
Apr 15 Javascript
js获取dom的高度和宽度(可见区域及部分等等)
Jun 13 Javascript
三种动态加载js的jquery实例代码另附去除js方法
Apr 30 Javascript
jQuery寻找n以内完全数的方法
Jun 24 Javascript
详解JavaScript的变量和数据类型
Nov 27 Javascript
Javascript 普通函数和构造函数的区别
Nov 05 Javascript
jQuery实现动态控制页面元素的方法分析
Dec 20 jQuery
vue路由插件之vue-route
Jun 13 Javascript
three.js利用gpu选取物体并计算交点位置的方法示例
Nov 25 Javascript
判断JavaScript中的两个变量是否相等的操作符
Dec 21 Javascript
vue 路由守卫(导航守卫)及其具体使用
Feb 25 Javascript
javascript设计模式 ? 迭代器模式原理与用法实例分析
Apr 17 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.ini中文版(2)
2006/10/09 PHP
PHP完整的日历类(CLASS)
2006/11/27 PHP
PHP5 面向对象程序设计
2008/02/13 PHP
PHP命令行执行整合pathinfo模拟定时任务实例
2016/08/12 PHP
PHP符合PSR编程规范的实例分享
2016/12/21 PHP
PHP迭代与递归实现无限级分类
2017/08/28 PHP
PHP多个图片压缩成ZIP的方法
2020/08/18 PHP
浅谈PHP无限极分类原理
2019/03/14 PHP
Gambit vs CL BO3 第二场 2.13
2021/03/10 DOTA
DIV菜单层实现代码
2010/11/19 Javascript
5分钟理解JavaScript中this用法分享
2013/11/09 Javascript
jQuery给多个不同元素添加class样式的方法
2015/03/26 Javascript
Javascript小技能总结(推荐)
2016/06/02 Javascript
js自调用匿名函数的三种写法(推荐)
2016/08/19 Javascript
JS实现的适合做faq或menu滑动效果示例
2016/11/17 Javascript
jq checkbox 的全选并ajax传参的实例
2017/04/01 Javascript
微信小程序实现swiper切换卡内嵌滚动条不显示的方法示例
2018/12/20 Javascript
webpack4.x下babel的安装、配置及使用详解
2019/03/07 Javascript
微信小程序个人中心的列表控件实现代码
2020/04/26 Javascript
vue实现路由懒加载的3种方法示例
2020/09/01 Javascript
python按照多个字符对字符串进行分割的方法
2015/03/17 Python
Python数据库的连接实现方法与注意事项
2016/02/27 Python
深入理解python中函数传递参数是值传递还是引用传递
2017/11/07 Python
Python中__slots__属性介绍与基本使用方法
2018/09/05 Python
Python绘制堆叠柱状图的实例
2019/07/09 Python
Python测试Kafka集群(pykafka)实例
2019/12/23 Python
Python使用itcaht库实现微信自动收发消息功能
2020/07/13 Python
vue.js刷新当前页面的实例讲解
2020/12/29 Python
Web Service面试题:如何搭建Axis2的开发环境
2012/06/20 面试题
致长跑运动员广播稿
2014/01/31 职场文书
企业挂职心得体会
2014/09/10 职场文书
宾馆前台接待岗位职责
2015/04/02 职场文书
电影雨中的树观后感
2015/06/15 职场文书
2015年度优秀员工获奖感言
2015/07/31 职场文书
Python自动化爬取天眼查数据的实现
2021/06/15 Python
关于JavaScript回调函数的深入理解
2021/06/27 Javascript