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 相关文章推荐
如何在标题栏显示框架内页面的标题
Feb 03 Javascript
juqery 学习之四 筛选过滤
Nov 30 Javascript
JS截取字符串常用方法详细整理
Oct 28 Javascript
解析页面加载与js函数的执行 onload or ready
Dec 12 Javascript
jQuery选择器源码解读(七):elementMatcher函数
Mar 31 Javascript
JS获取IMG图片高宽的简单实例
May 17 Javascript
非常实用的js验证框架实现源码 附原理方法
Jun 08 Javascript
javascript工厂模式和构造函数模式创建对象方法解析
Dec 30 Javascript
详解vue.js的devtools安装
May 26 Javascript
详解vue-cli 构建Vue项目遇到的坑
Aug 30 Javascript
Vue路由切换时的左滑和右滑效果示例
May 29 Javascript
vue动画—通过钩子函数实现半场动画操作
Aug 09 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 和 COM
2006/10/09 PHP
回帖脱衣服的图片实现代码
2014/02/15 PHP
zf框架的session会话周期及次数限制使用示例
2014/03/13 PHP
PHP实现服务器状态监控的方法
2014/12/09 PHP
php中使用url传递数组的方法
2015/02/11 PHP
php实现递归抓取网页类实例
2015/04/03 PHP
YII2框架中excel表格导出的方法详解
2017/07/21 PHP
Yii2 中实现单点登录的方法
2018/03/09 PHP
HTML DOM的nodeType值介绍
2011/03/31 Javascript
JQuery入门—JQuery程序的代码风格详细介绍
2013/01/03 Javascript
$.getJSON在IE下失效的原因分析及解决方法
2013/06/16 Javascript
JS继承用法实例分析
2015/02/05 Javascript
JS实现仿中关村论坛评分后弹出提示效果的方法
2015/02/23 Javascript
js电话号码验证方法
2015/09/28 Javascript
javascript实现下拉提示选择框
2015/12/29 Javascript
JS如何生成一个不重复的ID的函数
2016/12/25 Javascript
AngularJS使用带属性值的ng-app指令实现自定义模块自动加载的方法
2017/01/04 Javascript
Angular在一个页面中使用两个ng-app的方法
2017/02/20 Javascript
Node.js Mongodb 密码特殊字符 @的解决方法
2017/04/11 Javascript
使用原生js写ajax实例(推荐)
2017/05/31 Javascript
JSON获取属性值方法代码实例
2020/06/30 Javascript
vue实现购物车列表
2020/06/30 Javascript
Tensorflow实现神经网络拟合线性回归
2019/07/19 Python
python tornado修改log输出方式
2019/11/18 Python
Python Lambda函数使用总结详解
2019/12/11 Python
PyTorch实现AlexNet示例
2020/01/14 Python
matplotlib教程——强大的python作图工具库
2020/10/15 Python
乐高瑞士官方商店:LEGO CH
2020/08/16 全球购物
端午节粽子促销活动方案
2014/02/02 职场文书
《两只鸟蛋》教学反思
2014/02/10 职场文书
国培远程培训感言
2014/03/08 职场文书
小学师德标兵先进事迹材料
2014/05/25 职场文书
信仰心得体会
2014/09/05 职场文书
作风整顿剖析材料
2014/09/30 职场文书
兼职安全员岗位职责
2015/02/15 职场文书
python 常用的异步框架汇总整理
2021/06/18 Python