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字典探测用户名工具
Oct 05 Javascript
js计数器代码
Nov 04 Javascript
JQuery对class属性的操作实现按钮开关效果
Oct 11 Javascript
javascript操作html控件实例(javascript添加html)
Dec 02 Javascript
JS实现网页右侧带动画效果的伸缩窗口代码
Oct 29 Javascript
设置点击文本框或图片弹出日历控件的实现代码
May 12 Javascript
关于vue.js弹窗组件的知识点总结
Sep 11 Javascript
JS路由跳转的简单实现代码
Sep 21 Javascript
ES6学习教程之模板字符串详解
Oct 09 Javascript
vue.js添加一些触摸事件以及安装fastclick的实例
Aug 28 Javascript
Vue动态创建注册component的实例代码
Jun 14 Javascript
vue中渲染对象中属性时显示未定义的解决
Jul 31 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
一个可以删除字符串中HTML标记的PHP函数
2006/10/09 PHP
PHP 超链接 抓取实现代码
2009/06/29 PHP
深入理解require与require_once与include以及include_once的区别
2013/06/05 PHP
php将金额数字转化为中文大写
2015/07/09 PHP
基于PHP实现数据分页显示功能
2016/05/26 PHP
php opendir()列出目录下所有文件的实例代码
2016/10/02 PHP
php中简单的对称加密算法实现
2017/01/05 PHP
php命令行写shell实例详解
2018/07/19 PHP
PHP微信H5支付开发实例
2018/07/25 PHP
php抽象类和接口知识点整理总结
2019/08/02 PHP
javascript textContent与innerText的异同分析
2010/10/22 Javascript
为EasyUI的Tab标签添加右键菜单的方法
2012/07/14 Javascript
javascript将中国数字格式转换成欧式数字格式的简单实例
2016/08/02 Javascript
详解JavaScript中的属性和特性
2016/12/08 Javascript
JS常见算法详解
2017/02/28 Javascript
Vue学习笔记进阶篇之多元素及多组件过渡
2017/07/19 Javascript
Angular模版驱动表单的使用总结
2018/05/05 Javascript
vue.js轮播图组件使用方法详解
2018/07/03 Javascript
Node.js如何优雅的封装一个实用函数的npm包的方法
2019/04/29 Javascript
javascript中的with语句学习笔记及用法
2020/02/17 Javascript
分享15个最受欢迎的Python开源框架
2014/07/13 Python
Python中分数的相关使用教程
2015/03/30 Python
python selenium UI自动化解决验证码的4种方法
2018/01/05 Python
Django框架表单操作实例分析
2019/11/04 Python
Pycharm pyuic5实现将ui文件转为py文件,让UI界面成功显示
2020/04/08 Python
python tkinter实现连连看游戏
2020/11/16 Python
一款纯css3实现简单的checkbox复选框和radio单选框
2014/11/05 HTML / CSS
html5 touch事件实现触屏页面上下滑动(二)
2016/03/10 HTML / CSS
Nisbets法国:英国最大的厨房和餐饮设备供应商
2019/03/18 全球购物
优秀少先队员主要事迹材料
2014/05/28 职场文书
市场营销策划方案
2014/06/11 职场文书
公安局班子个人对照检查材料思想汇报
2014/10/09 职场文书
劳动模范获奖感言
2015/07/31 职场文书
《雪地里的小画家》教学反思
2016/02/16 职场文书
《大禹治水》教学反思
2016/02/22 职场文书
Log4j.properties配置及其使用
2021/08/02 Java/Android