javascript 密码强度验证规则、打分、验证(给出前端代码,后端代码可根据强度规则翻译) |
本文标签:javascript,密码强度 前言: 密码强度是一个很普遍的功能,比较简单,主要是怎么制定这个强度规则 。现在需要升级密码强度的验证,以前的验证比较简单,现在已经不能满足需求了,现在需要可灵活变化并有多级别可配置选择的一个密码强度验证,所以就设计了下面这个东东 。在设计前也参考了下比较成熟的强度规则,大同小异,不外乎都采取了打分的机制来控制密码强度规则,这样可配置性高,灵活 。本来想直接拿来用的,但是发现都比较旧,有些不太适宜公司开发的需求,可能这个东西比较简单吧,所以也没什么人去更新和写新的代码,所以还是自己动手设计了规则和写了代码 。 实现: 原理: 采用打分的机制,打分分为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 到这里就结束了,欢迎大家一起来讨论这个打分的规则,大家也可以直接给出自己写好的规则和代码,这样方便大家研究和交流,代码是需要不断维护和更新的,这样我们才能站在前人的脚本上面继续前进 。 |