標籤:iostream dig lower out color argc 組合 amp slow
最近在部落格中看到許多用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:如果大家還有更好的思路也可以自己寫寫試試,最後謝謝大家的閱讀。
C++實現密碼強度測試