javascript 密碼強度規則、打分、驗證(給出前端代碼,後端代碼可根據強度規則翻譯)

來源:互聯網
上載者:User

前言:

密碼強度是一個很普遍的功能,比較簡單,主要是怎麼制定這個強度規則。現在需要升級密碼強度的驗證,以前的驗證比較簡單,現在已經不能滿足需求了,現在需要可靈活變化並有多層級可配置選擇的一個密碼強度驗證,所以就設計了下面這個東東。在設計前也參考了下比較成熟的強度規則,大同小異,不外乎都採取了打分的機制來控制密碼強度規則,這樣可配置性高,靈活。本來想直接拿來用的,但是發現都比較舊,有些不太適宜公司開發的需求,可能這個東西比較簡單吧,所以也沒什麼人去更新和寫新的代碼,所以還是自己動手設計了規則和寫了代碼。

實現:

  原理:

  採用打分的機制,打分分為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

到這裡就結束了,歡迎大家一起來討論這個打分的規則,大家也可以直接給出自己寫好的規則和代碼,這樣方便大家研究和交流,代碼是需要不斷維護和更新的,這樣我們才能站在前人的指令碼上面繼續前進。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.