最近在博客中看到許多用js寫的密碼強度檢測,我覺得挺有意思的,所以呢我打算自己也寫個來玩玩,最可悲的是我還沒學js,當然這不重要,所以呢打算用C++來寫一個密碼強度檢測,這里我來給大家說說用JS寫的和用C++寫的不同之處
JS寫的密碼強度檢測:當你輸入一串>=6 位數的時候 他后面會自動彈出密碼的強度 ,還有你再繼續輸入然后他后面的密碼強度會更換 (當然我也嘗試解決過這個問題,寫出來就一直只能輸入6位數,由於我技術有限,如果大家自己能寫出來的話可以去試試);
C++寫的密碼強度檢測:當你輸入一串>=6位數的時候 你要按下回車才能將字符串讀入內存中,這樣相比往往更JS還是有一定的差距的。
接下來我們就來看下這密碼強度檢測的規則吧;
* 1) 任何在1-6之間的字符的組合,弱;例如: win
* 2) 任何字符數的兩類字符組合,中; 例如: win123
* 3) 12位字符數以下的三類或四類字符組合,強; 例如: win123abcABC
* 4) 12位字符數以上的三類或四類字符組合,非常好。 例如:win123abcABC!
思路:寫個子函數然后遍歷查找字符串大寫和小寫還有數字等其他字符是否存在,這里記住了如果存在某個字符只計數一次。然后再返回給主函數,主函數主要判斷密碼又幾類字符組成然后再按相應的數輸出密碼強度;
下面是代碼:
1 #include <iostream> 2 #include <cstring> 3 #include <cctype> 4 using namespace std; 5 int fun(char password[]); 6 int main(int argc, char* argv[]) 7 { 8 int i; 9 char password[16]; 10 stop:cout<<"Password:";gets(password); 11 while(strlen(password)>=6&&strlen(password)<=16){ 12 switch(fun(password)) 13 { 14 case 1:cout<<"弱 ★"<<endl;break; 15 case 2:cout<<"中 ★ ★"<<endl;break; 16 case 3:cout<<"強 ★ ★ ★"<<endl;break; 17 case 4:cout<<"非常好 ★ ★ ★ ★"<<endl;break; 18 }cout<< "Password:";gets(password); 19 } 20 cout<<"密碼最少6~16位 請重新輸入:"<<endl;goto stop; 21 return 0; 22 } 23 int fun(char password[]) 24 { 25 int i,count=0,a=1,b=1,c=1; 26 27 for(i=0;i<strlen(password);i++) 28 if(a&&islower(password[i])) count++,a=0; 29 else if(b&&isupper(password[i])) count++,b=0; 30 else if(c&&isdigit(password[i])) count++,c=0; 31 else if(!islower(password[i])&&!isupper(password[i])&&!isdigit(password[i])) count++; 32 return count; 33 }
最后附上一張運行結果:
PS:如果大家還有更好的思路也可以自己寫寫試試,最后謝謝大家的閱讀。