javascript 密碼強(qiáng)度驗(yàn)證規(guī)則、打分、驗(yàn)證(給出前端代碼,后端代碼可根據(jù)強(qiáng)度規(guī)則翻譯)
更新時(shí)間:2010年05月18日 00:08:50 作者:
密碼強(qiáng)度是一個(gè)很普遍的功能,比較簡(jiǎn)單,主要是怎么制定這個(gè)強(qiáng)度規(guī)則。
前言:
密碼強(qiáng)度是一個(gè)很普遍的功能,比較簡(jiǎn)單,主要是怎么制定這個(gè)強(qiáng)度規(guī)則?,F(xiàn)在需要升級(jí)密碼強(qiáng)度的驗(yàn)證,以前的驗(yàn)證比較簡(jiǎn)單,現(xiàn)在已經(jīng)不能滿足需求了,現(xiàn)在需要可靈活變化并有多級(jí)別可配置選擇的一個(gè)密碼強(qiáng)度驗(yàn)證,所以就設(shè)計(jì)了下面這個(gè)東東。在設(shè)計(jì)前也參考了下比較成熟的強(qiáng)度規(guī)則,大同小異,不外乎都采取了打分的機(jī)制來(lái)控制密碼強(qiáng)度規(guī)則,這樣可配置性高,靈活。本來(lái)想直接拿來(lái)用的,但是發(fā)現(xiàn)都比較舊,有些不太適宜公司開(kāi)發(fā)的需求,可能這個(gè)東西比較簡(jiǎn)單吧,所以也沒(méi)什么人去更新和寫新的代碼,所以還是自己動(dòng)手設(shè)計(jì)了規(guī)則和寫了代碼。
實(shí)現(xiàn):
原理:
采用打分的機(jī)制,打分分為3類(基礎(chǔ)分、加分、減分),先求出基礎(chǔ)分,在計(jì)算加分的部分,最后減去要扣除的分?jǐn)?shù)就為最終總分。
規(guī)則:
密碼可輸入類型(字符,字母大寫,字母小寫,特殊字符)。
基礎(chǔ)分為,密碼長(zhǎng)度,一個(gè)長(zhǎng)度為一分,大于18個(gè)字符都為18分;密碼里面包含一種可輸入類型,基礎(chǔ)分加4分。
加分為,一種密碼可輸入類型的總數(shù)量大于等于2個(gè),加分2分,如果總數(shù)量大于等于5,加分4分。
減分為,如果有連續(xù)重復(fù)的單個(gè)種類字符,則重復(fù)一次減1分。
總分50分。
0~10分:不合格(弱)
11~20分:一般
21~30分:中
31~40分:強(qiáng)
41~50分:安全
*分?jǐn)?shù)范圍可以自由調(diào)整和搭配,其實(shí)整個(gè)打分規(guī)則都可以根據(jù)需要修改
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
到這里就結(jié)束了,歡迎大家一起來(lái)討論這個(gè)打分的規(guī)則,大家也可以直接給出自己寫好的規(guī)則和代碼,這樣方便大家研究和交流,代碼是需要不斷維護(hù)和更新的,這樣我們才能站在前人的腳本上面繼續(xù)前進(jìn)。
密碼強(qiáng)度是一個(gè)很普遍的功能,比較簡(jiǎn)單,主要是怎么制定這個(gè)強(qiáng)度規(guī)則?,F(xiàn)在需要升級(jí)密碼強(qiáng)度的驗(yàn)證,以前的驗(yàn)證比較簡(jiǎn)單,現(xiàn)在已經(jīng)不能滿足需求了,現(xiàn)在需要可靈活變化并有多級(jí)別可配置選擇的一個(gè)密碼強(qiáng)度驗(yàn)證,所以就設(shè)計(jì)了下面這個(gè)東東。在設(shè)計(jì)前也參考了下比較成熟的強(qiáng)度規(guī)則,大同小異,不外乎都采取了打分的機(jī)制來(lái)控制密碼強(qiáng)度規(guī)則,這樣可配置性高,靈活。本來(lái)想直接拿來(lái)用的,但是發(fā)現(xiàn)都比較舊,有些不太適宜公司開(kāi)發(fā)的需求,可能這個(gè)東西比較簡(jiǎn)單吧,所以也沒(méi)什么人去更新和寫新的代碼,所以還是自己動(dòng)手設(shè)計(jì)了規(guī)則和寫了代碼。
實(shí)現(xiàn):
原理:
采用打分的機(jī)制,打分分為3類(基礎(chǔ)分、加分、減分),先求出基礎(chǔ)分,在計(jì)算加分的部分,最后減去要扣除的分?jǐn)?shù)就為最終總分。
規(guī)則:
密碼可輸入類型(字符,字母大寫,字母小寫,特殊字符)。
基礎(chǔ)分為,密碼長(zhǎng)度,一個(gè)長(zhǎng)度為一分,大于18個(gè)字符都為18分;密碼里面包含一種可輸入類型,基礎(chǔ)分加4分。
加分為,一種密碼可輸入類型的總數(shù)量大于等于2個(gè),加分2分,如果總數(shù)量大于等于5,加分4分。
減分為,如果有連續(xù)重復(fù)的單個(gè)種類字符,則重復(fù)一次減1分。
總分50分。
0~10分:不合格(弱)
11~20分:一般
21~30分:中
31~40分:強(qiáng)
41~50分:安全
*分?jǐn)?shù)范圍可以自由調(diào)整和搭配,其實(shí)整個(gè)打分規(guī)則都可以根據(jù)需要修改
code:
復(fù)制代碼 代碼如下:
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
到這里就結(jié)束了,歡迎大家一起來(lái)討論這個(gè)打分的規(guī)則,大家也可以直接給出自己寫好的規(guī)則和代碼,這樣方便大家研究和交流,代碼是需要不斷維護(hù)和更新的,這樣我們才能站在前人的腳本上面繼續(xù)前進(jìn)。
您可能感興趣的文章:
- javascript密碼強(qiáng)度校驗(yàn)代碼(兩種方法)
- JS 密碼強(qiáng)度驗(yàn)證(兼容IE,火狐,谷歌)
- js檢驗(yàn)密碼強(qiáng)度(低中高)附圖
- js檢測(cè)用戶輸入密碼強(qiáng)度
- js正則表達(dá)式驗(yàn)證密碼強(qiáng)度【推薦】
- 用于判斷用戶注冊(cè)時(shí),密碼強(qiáng)度的JS代碼
- js在客戶端驗(yàn)證密碼強(qiáng)度,兼容FireFox和IE
- JavaScript 密碼強(qiáng)度判斷代碼
- js密碼強(qiáng)度校驗(yàn)
- JS實(shí)現(xiàn)的四級(jí)密碼強(qiáng)度檢測(cè)功能示例
- js實(shí)現(xiàn)密碼強(qiáng)度檢測(cè)【附示例】
- JavaScript動(dòng)態(tài)檢測(cè)密碼強(qiáng)度原理及實(shí)現(xiàn)方法詳解
相關(guān)文章
element-ui 上傳圖片后標(biāo)注坐標(biāo)點(diǎn)
有個(gè)組件庫(kù)的名稱叫做element-ui,基于Vue2.0開(kāi)發(fā),提供了豐富的PC端組件,本文通過(guò)實(shí)例代碼給大家介紹element-ui 上傳圖片后標(biāo)注坐標(biāo)點(diǎn)的示例代碼,感興趣的朋友跟隨小編一起看看吧2021-07-07JavaScript裝飾器的實(shí)現(xiàn)原理詳解
最近在使用TS+Vue的開(kāi)發(fā)模式,發(fā)現(xiàn)項(xiàng)目中大量使用了裝飾器,看得我手足無(wú)措,今天特意研究一下實(shí)現(xiàn)原理,方便自己理解這塊知識(shí)點(diǎn),有需要的小伙伴也可以參考一下2022-10-10AjaxFileUpload.js實(shí)現(xiàn)異步上傳文件功能
這篇文章主要為大家詳細(xì)介紹了AjaxFileUpload.js實(shí)現(xiàn)異步上傳文件功能,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2019-04-04談?wù)凱HP中相對(duì)路徑的問(wèn)題與絕對(duì)路徑的使用
經(jīng)常看到有人踩在了PHP路徑的坑上面了,感覺(jué)有必要來(lái)說(shuō)說(shuō)PHP中相對(duì)路徑的一些坑,以及PHP中絕對(duì)路徑的使用,下面一起來(lái)看看。2016-08-08JavaScript實(shí)現(xiàn)時(shí)鐘功能
這篇文章主要為大家詳細(xì)介紹了JavaScript實(shí)現(xiàn)時(shí)鐘功能,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-06-06JS實(shí)現(xiàn)可用滑塊滑動(dòng)的緩動(dòng)圖代碼
這篇文章主要介紹了JS實(shí)現(xiàn)可用滑塊滑動(dòng)的緩動(dòng)圖代碼,非常不錯(cuò),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2019-09-09