javascript 密码强度验证规则、打分、验证(给出前端代码,后端代码可根据强度规则翻译)

 更新时间:2010年05月18日 00:08:50   作者:  
密码强度是一个很普遍的功能,比较简单,主要是怎么制定这个强度规则。
前言:

密码强度是一个很普遍的功能,比较简单,主要是怎么制定这个强度规则。现在需要升级密码强度的验证,以前的验证比较简单,现在已经不能满足需求了,现在需要可灵活变化并有多级别可配置选择的一个密码强度验证,所以就设计了下面这个东东。在设计前也参考了下比较成熟的强度规则,大同小异,不外乎都采取了打分的机制来控制密码强度规则,这样可配置性高,灵活。本来想直接拿来用的,但是发现都比较旧,有些不太适宜公司开发的需求,可能这个东西比较简单吧,所以也没什么人去更新和写新的代码,所以还是自己动手设计了规则和写了代码。

实现:

  原理:
  采用打分的机制,打分分为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中call,apply,bind的区别与实现

    JavaScript中call,apply,bind的区别与实现

    这篇文章主要介绍了JavaScript中call,apply,bind的区别与实现,文章通过围绕主题思想展开详细的内容介绍,具有一定的参考价值,需要的小伙伴可以参考一下
    2022-09-09
  • js超时调用setTimeout和间歇调用setInterval实例分析

    js超时调用setTimeout和间歇调用setInterval实例分析

    这篇文章主要介绍了js超时调用setTimeout和间歇调用setInterval,以实例形式对比分析了setTimeout与setInterval的具体使用技巧,非常具有实用价值,需要的朋友可以参考下
    2015-01-01
  • 微信小程序引入VANT组件的方法步骤

    微信小程序引入VANT组件的方法步骤

    这篇文章主要介绍了微信小程序引入VANT组件的方法步骤,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-09-09
  • 省市联动效果的简单实现代码(推荐)

    省市联动效果的简单实现代码(推荐)

    下面小编就为大家带来一篇省市联动效果的简单实现代码(推荐)。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2016-06-06
  • 浅谈js之字面量、对象字面量的访问、关键字in的用法

    浅谈js之字面量、对象字面量的访问、关键字in的用法

    下面小编就为大家带来一篇浅谈js之字面量、对象字面量的访问、关键字in的用法。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2016-11-11
  • 基于Bootstrap漂亮简洁的CSS3价格表(附源码下载)

    基于Bootstrap漂亮简洁的CSS3价格表(附源码下载)

    该价格表基于Bootstrap网格系统来进行布局,通过简单的CSS3代码来美化价格表,样式非常的时尚漂亮,且能在不同屏幕下展示良好的效果,需要的朋友可以参考下
    2017-02-02
  • js 三级关联菜单效果实例

    js 三级关联菜单效果实例

    这篇文章介绍了js 三级关联菜单效果,有需要的朋友可以参考一下
    2013-08-08
  • js的for in循环和java里foreach循环的区别分析

    js的for in循环和java里foreach循环的区别分析

    这篇文章主要介绍了js的for in循环和java里foreach循环的区别,实例分析了js的for in循环使用技巧并说明了与Java中foreach循环的使用区别,具有一定参考借鉴价值,需要的朋友可以参考下
    2015-01-01
  • 使用JavaScript截取视频特定帧的实现方法

    使用JavaScript截取视频特定帧的实现方法

    在网页开发中,我们经常需要对媒体文件进行处理,其中包括视频文件,有时候,我们可能需要从视频中提取特定的帧,并将其显示在网页上,本文将介绍如何使用JavaScript来实现这一功能,感兴趣的朋友跟着小编一起来看看吧
    2024-05-05
  • JS清除IE浏览器缓存的方法

    JS清除IE浏览器缓存的方法

    本文为大家详细介绍下js中自动清除ie缓存的几种方法,大家可以根据自己的需求自由选择适合自己的,希望对大家学习js有所帮助
    2013-07-07

最新评论