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是否可实现多线程  深入理解JavaScript定时机制
Dec 22 Javascript
Javascript base64编码实现代码
Dec 02 Javascript
javascript使用中为什么10..toString()正常而10.toString()出错呢
Jan 11 Javascript
回车直接实现点击某按钮的效果即触发单击事件
Feb 27 Javascript
jQuery使用$.ajax进行异步刷新的方法(附demo下载)
Dec 04 Javascript
Jquery on绑定的事件 触发多次实例代码
Dec 08 Javascript
JavaScript常用正则验证函数实例小结【年龄,数字,Email,手机,URL,日期等】
Jan 23 Javascript
jquery仿苹果的时间/日期选择效果
Mar 08 Javascript
BootStrap的两种模态框方式
May 10 Javascript
angular2路由之routerLinkActive指令【推荐】
May 30 Javascript
vue-cli 3.x配置跨域代理的实现方法
Apr 12 Javascript
了解在JavaScript中将值转换为字符串的5种方法
Jun 06 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 时间time与日期date之间的使用详解及区别
2016/11/07 PHP
Laravel 5.5 的自定义验证对象/类示例代码详解
2017/08/29 PHP
PHP5.5基于mysqli连接MySQL数据库和读取数据操作实例详解
2019/02/16 PHP
laravel 实现向公共模板中传值 (view composer)
2019/10/22 PHP
URL编码转换,escape() encodeURI() encodeURIComponent()
2006/12/27 Javascript
JavaScript 实现??打印?理
2007/04/28 Javascript
Javascript 对象的解释
2008/11/24 Javascript
JavaScript中的闭包原理分析
2010/03/08 Javascript
关于 文本框默认值 的操作js代码
2012/01/12 Javascript
用函数模板,写一个简单高效的 JSON 查询器的方法介绍
2013/04/17 Javascript
JS定时器实例
2013/04/17 Javascript
jquery自定义类似$.ajax()的方法实现代码
2013/08/13 Javascript
HTML Color Picker(js拾色器效果)
2013/08/27 Javascript
js图片自动轮播代码分享(js图片轮播)
2014/05/06 Javascript
限制上传文件大小和格式的jQuery插件实例
2015/01/24 Javascript
JavaScript实现将数组中所有元素连接成一个字符串的方法
2015/04/06 Javascript
ANGULARJS中使用JQUERY分页控件
2015/09/16 Javascript
JS判断指定dom元素是否在屏幕内的方法实例
2017/01/23 Javascript
JS将unicode码转中文方法
2017/05/08 Javascript
Django使用多数据库的方法
2017/09/06 Javascript
浅谈如何通过node.js对数据进行MD5加密
2018/05/16 Javascript
RxJS的入门指引和初步应用
2019/06/15 Javascript
[04:46]2018年度玩家喜爱的电竞媒体-完美盛典
2018/12/16 DOTA
[06:07]DOTA2-DPC中国联赛3月5日Recap集锦
2021/03/11 DOTA
Python使用urllib模块的urlopen超时问题解决方法
2014/11/08 Python
python3.6 +tkinter GUI编程 实现界面化的文本处理工具(推荐)
2017/12/20 Python
PyQt5每天必学之像素图控件QPixmap
2018/04/19 Python
python实现Windows电脑定时关机
2018/06/20 Python
python 拼接文件路径的方法
2018/10/23 Python
Python 实现域名解析为ip的方法
2019/02/14 Python
python求绝对值的三种方法小结
2019/12/04 Python
销售助理岗位职责
2015/02/11 职场文书
小学大队长竞选稿
2015/11/20 职场文书
2016年3月份红领巾广播稿
2015/12/21 职场文书
Java 超详细讲解IO操作字节流与字符流
2022/03/25 Java/Android
使用Bandicam录制鼠标指针并附带点击声音,还可以添加点击动画效果
2022/04/11 数码科技