zoukankan      html  css  js  c++  java
  • 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

    到这里就结束了,欢迎大家一起来讨论这个打分的规则,大家也可以直接给出自己写好的规则和代码,这样方便大家研究和交流,代码是需要不断维护和更新的,这样我们才能站在前人的脚本上面继续前进。

  • 相关阅读:
    angular学习之通俗易懂篇-----constructor()与ngOnInit()
    vscode----快捷键
    angular学习之通俗易懂篇-----路由
    angular学习之通俗易懂篇-----双向数据绑定MVVM
    angular学习之通俗易懂篇-----数据绑定
    angular学习之通俗易懂篇-----新建组件并调用
    angular学习之-----常用命令行
    windows环境下node更新最新版本----简单粗暴
    首例爬虫禁令:法院裁定立即停止擅自爬取微信公众号相关数据行为取微信公众号相关数据行为
    Pycharm两种快速激活方式(附最新激活码和插件)
  • 原文地址:https://www.cnblogs.com/bruceli/p/1737208.html
Copyright © 2011-2022 走看看