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获取光标位置和设置文本框光标位置示例代码
Jan 09 Javascript
JS Array创建及concat()split()slice()的使用方法
Jun 03 Javascript
JS简单实现无缝滚动效果实例
Aug 24 Javascript
JavaScript中ES6字符串扩展方法
Aug 26 Javascript
jQuery实现导航回弹效果
Feb 27 Javascript
JavaScript实现三级级联特效
Nov 05 Javascript
详解Angular6学习笔记之主从组件
Sep 05 Javascript
微信小程序上传多图到服务器并获取返回的路径
May 05 Javascript
微信小程序实现元素渐入渐出动画效果封装方法
May 18 Javascript
js单线程的本质 Event Loop解析
Oct 29 Javascript
JavaScript 实现HTML DOM增删改查操作的常见方法详解
Jan 04 Javascript
浅谈JavaScript中this的指向问题
Jul 28 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数组函数序列之each() - 获取数组当前内部指针所指向元素的键名和键值,并将指针移到下一位
2011/10/31 PHP
如何使用Gitblog和Markdown建自己的博客
2015/07/31 PHP
Nginx实现反向代理
2017/09/20 Servers
JS 表单验证大全
2011/11/23 Javascript
jQuery中的siblings用法实例分析
2015/12/24 Javascript
初步使用bootstrap快速创建页面
2016/03/03 Javascript
使用jQuery给input标签设置默认值
2016/06/20 Javascript
bootstrap表单按回车会自动刷新页面的解决办法
2017/03/08 Javascript
vue组件中点击按钮后修改输入框的状态实例代码
2017/04/14 Javascript
在React中如何优雅的处理事件响应详解
2017/07/24 Javascript
javaScript字符串工具类StringUtils详解
2017/12/08 Javascript
JS中的防抖与节流及作用详解
2019/04/01 Javascript
vue 全局封装loading加载教程(全局监听)
2020/11/05 Javascript
详解vue中使用transition和animation的实例代码
2020/12/12 Vue.js
[33:23]Secret vs Serenity 2018国际邀请赛小组赛BO2 第二场 8.16
2018/08/17 DOTA
linux系统使用python获取内存使用信息脚本分享
2014/01/15 Python
python基于urllib实现按照百度音乐分类下载mp3的方法
2015/05/25 Python
Python循环语句中else的用法总结
2016/09/11 Python
python基础教程项目二之画幅好画
2018/04/02 Python
python 用正则表达式筛选文本信息的实例
2018/06/05 Python
实例讲解Python脚本成为Windows中运行的exe文件
2019/01/24 Python
Python数组并集交集补集代码实例
2020/02/18 Python
如何查看浏览器对html5的支持情况
2020/12/15 HTML / CSS
一套C++笔试题面试题
2012/06/06 面试题
高中三年学习生活的自我评价
2013/10/10 职场文书
计算机系毕业生推荐信
2013/11/06 职场文书
成功经营餐厅的创业计划书范文
2013/12/26 职场文书
服务员态度差检讨书
2014/10/28 职场文书
计算机考试作弊检讨书1000字
2015/01/01 职场文书
留学推荐信怎么写
2015/03/26 职场文书
书法社团活动总结
2015/05/07 职场文书
单方投资意向书
2015/05/11 职场文书
python生成随机数、随机字符、随机字符串
2021/04/06 Python
Python使用random模块实现掷骰子游戏的示例代码
2021/04/29 Python
TV动画《神废柴☆偶像》公布先导PV
2022/03/20 日漫
MySQL数据库如何使用Shell进行连接
2022/04/12 MySQL