javascript 密码强度验证规则、打分、验证

时间:2010-05-18 19:58:00 

密码强度是一个很普遍的功能,比较简单,主要是怎么制定这个强度规则。现在需要升级密码强度的验证,以前的验证比较简单,现在已经不能满足需求了,现在需要可灵活变化并有多级别可配置选择的一个密码强度验证,所以就设计了下面这个东东。

在设计前也参考了下比较成熟的强度规则,大同小异,不外乎都采取了打分的机制来控制密码强度规则,这样可配置性高,灵活。本来想直接拿来用的,但是发现都比较旧,有些不太适宜公司开发的需求,可能这个东西比较简单吧,所以也没什么人去更新和写新的代码,所以还是自己动手设计了规则和写了代码。

实现:

  原理:
  采用打分的机制,打分分为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,密码强度,打分
0
投稿

猜你喜欢

  • python集合的新增元素方法整理

    2022-10-13 02:45:28
  • Vue编写炫酷的时钟插件

    2023-07-02 16:32:27
  • Python机器学习之基础概述

    2021-07-18 19:07:59
  • MySQL中LAG()函数和LEAD()函数的使用

    2024-01-27 14:05:35
  • Go语言kafka生产消费消息实例搬砖

    2024-06-07 16:06:58
  • PHP session 会话处理函数

    2023-11-15 14:55:53
  • MySQL两种表存储结构MyISAM和InnoDB的性能比较测试

    2024-01-28 02:35:55
  • 结合Python的SimpleHTTPServer源码来解析socket通信

    2021-09-05 23:30:27
  • IE不支持border-spacing的解决办法

    2009-04-28 13:11:00
  • JavaScript大牛:Douglas Crockford

    2009-03-31 12:06:00
  • 使用IIS调试asp程序检查错误的方法

    2007-09-13 21:54:00
  • jupyter notebook如何使用matlab

    2022-11-08 18:17:51
  • FCKEDITOR 的高级功能和常见问题的解决方法

    2023-12-16 16:07:13
  • 自动定时备份sqlserver数据库的方法

    2024-01-13 20:45:14
  • Python 十大经典排序算法实现详解

    2021-10-01 02:55:24
  • python发送伪造的arp请求

    2022-11-24 00:47:35
  • python监控网卡流量并使用graphite绘图的示例

    2022-06-24 22:35:54
  • 按日期打印Python的Tornado框架中的日志的方法

    2023-09-29 12:28:13
  • python通过ffmgep从视频中抽帧的方法

    2023-10-02 12:35:39
  • mysql数据库备份命令分享(mysql压缩数据库备份)

    2024-01-22 10:36:57
  • asp之家 网络编程 m.aspxhome.com