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 相关文章推荐
php,js,css字符串截取的办法集锦
Sep 26 Javascript
使用JS获取当前地理位置方法汇总
Dec 18 Javascript
PHP实现的各种中文编码转换类分享
Jan 23 Javascript
详解JavaScript中的客户端消息框架设计原理
Jun 24 Javascript
Bootstrap实现带暂停功能的轮播组件(推荐)
Nov 25 Javascript
javascript图片预览和上传(兼容IE)
Mar 15 Javascript
SpringMVC+bootstrap table实例详解
Jun 02 Javascript
Node.js连接mongodb实例代码
Jun 06 Javascript
AngularJS日程表案例详解
Aug 15 Javascript
让网站自动生成章节目录索引的多个js代码
Jan 07 Javascript
vue实现倒计时获取验证码效果
Apr 17 Javascript
Element Cascader 级联选择器的使用示例
Jul 27 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的面试题集
2006/11/19 PHP
apache中为php 设置虚拟目录
2014/12/17 PHP
微信支付开发订单查询实例
2016/07/12 PHP
PHP中Static(静态)关键字功能与用法实例分析
2019/04/05 PHP
jQuery与ExtJS之选择实例分析
2010/08/19 Javascript
jQuery中delegate和on的用法与区别详细解析
2014/01/26 Javascript
jquery中获得元素尺寸和坐标的方法整理
2014/05/18 Javascript
angular简介和其特点介绍
2015/01/29 Javascript
javascript结合fileReader 实现上传图片
2015/01/30 Javascript
JS控制FileUpload的上传文件类型实例代码
2016/10/07 Javascript
在vue中实现简单页面逆传值的方法
2017/11/27 Javascript
详解react-refetch的使用小例子
2019/02/15 Javascript
[59:35]DOTA2上海特级锦标赛主赛事日 - 3 败者组第三轮#1COL VS Alliance第二局
2016/03/04 DOTA
python threading模块操作多线程介绍
2015/04/08 Python
浅谈django开发者模式中的autoreload是如何实现的
2017/08/18 Python
python取代netcat过程分析
2018/02/10 Python
python实现动态创建类的方法分析
2019/06/25 Python
Python定时任务APScheduler原理及实例解析
2020/05/30 Python
解决django migrate报错ORA-02000: missing ALWAYS keyword
2020/07/02 Python
Python 多进程原理及实现
2020/12/21 Python
KIKO比利时官网:意大利彩妆品牌
2017/07/23 全球购物
匡威意大利官方商店 :Converse意大利
2018/11/27 全球购物
面向对象编程的优势是什么
2015/12/17 面试题
经理秘书岗位职责
2013/11/14 职场文书
服装厂厂长岗位职责
2013/12/27 职场文书
房地产还款计划书
2014/01/10 职场文书
公司前台辞职报告
2014/01/19 职场文书
文明餐桌活动方案
2014/02/11 职场文书
送温暖献爱心活动总结
2014/07/08 职场文书
党员“四风”问题批评与自我批评思想汇报
2014/10/06 职场文书
2014年班务工作总结
2014/12/02 职场文书
投资意向协议书
2015/01/29 职场文书
南京导游词
2015/02/03 职场文书
导游词之阳朔遇龙河
2019/12/16 职场文书
MySQL Server 层四个日志
2022/03/31 MySQL
Linux下使用C语言代码搭建一个简单的HTTP服务器
2022/04/13 Servers