2015-11-12 60 views
0

這一些幫助,是我迄今爲止需要一個密碼檢查程序

public static void main(String[] args) { 
    // TODO code application logic here 
    String password; 
    Scanner kb = new Scanner(System.in); 
    System.out.print("Please enter your password: "); 
    password = kb.nextLine(); 
    if (passwordOK(password)) 
    { 
     System.out.println("Valid Password"); 
    } 
    else 
    { 
     System.out.println("Invalid Password"); 
    } 
} 
    public static boolean passwordOK(String password) { 
    if (password == null) return false; 
if (password.length() <= 8) return false; 
boolean containsUpperCase = false; 
boolean containsLowerCase = false; 
boolean containsDigit = false; 
for(char ch: password.toCharArray()){ 
    if(Character.isUpperCase(ch)) containsUpperCase = true; 
    if(Character.isLowerCase(ch)) containsLowerCase = true; 
    if(Character.isDigit(ch)) containsDigit = true; 
} 
return containsUpperCase && containsLowerCase && containsDigit; 
} 
} 

我需要什麼有

•密碼必須至少8個字符長。

•密碼必須至少包含:

  • 一個字母字符[A-ZA-Z];

  • 一個數字字符[0-9];

  • 一個字符不能是字母或數字,如

    ! @ $%^ & *() - _ = + []; 。?'「,<>/

•密碼不得:

  • 包含空格;

  • 開始用感嘆號或問號[!]? ];

•密碼不能包含3個或更多相同字符的重複字符串,如「1111」或「aaa」。

我現在有點卡住所以在想,如果有人能伸出援手,也許拋出一些示例代碼我的路

編輯:Ashutosh說,我怎麼會將此代碼添加到您的程序沒有收到錯誤

String password2; 
    System.out.print("\nPlease type your password again to confirm: "); 
    password2 = kb.nextLine(); 

    while(!password2.equals(password)) 
    { 
    System.out.print("Those passwords do not match. Try again: "); 
    password2 = kb.nextLine(); 
    } 

回答

1

對您所提供的代碼建立起來,這裏是你可以在最粗暴的方式做:

import java.util.*; 
import java.lang.*; 
import java.io.*; 

class Test 
{ 
    public static void main(String[] args) { 
     // TODO code application logic here 
     String password; 
     Scanner kb = new Scanner(System.in); 
     System.out.print("Please enter your password: "); 
     password = kb.nextLine(); 
     if (passwordOK(password)) 
     { 
      System.out.println("Valid Password"); 
     } 
     else 
     { 
      System.out.println("Invalid Password"); 
     } 
    } 
    public static boolean passwordOK(String password) { 
     if (password == null) return false; 
     if (password.length() <= 8) return false; 
     boolean containsUpperCase = false; 
     boolean containsLowerCase = false; 
     boolean containsDigit = false; 
     boolean containsSpace = false; 
     boolean containsSpecialChar = false; 
     boolean containExclamationOrQuestionMark = false; 
     if (password.charAt(0) == '!' || password.charAt(0) == '?') containExclamationOrQuestionMark = true; 
     int i = 0; 
     boolean containsRepeatingChars = false; 
     String specialChars = "[email protected]$%^&*()-_=+[];:'\",<.>/?"; 
     for(char ch: password.toCharArray()){ 
      if (i>=2) { 
       if ((password.charAt(i) == password.charAt(i-1)) && (password.charAt(i-1) == password.charAt(i-2))) 
        containsRepeatingChars = true; 
      } 
      if(Character.isUpperCase(ch)) containsUpperCase = true; 
      if(Character.isLowerCase(ch)) containsLowerCase = true; 
      if(Character.isDigit(ch)) containsDigit = true; 
      if(ch == ' ') containsSpace = true; 
      if(!containsSpecialChar && specialChars.indexOf(ch) >= 0) containsSpecialChar = true; 
      i += 1; 
     } 
     return containsUpperCase && containsLowerCase && containsDigit && !containsSpace && !containExclamationOrQuestionMark && !containsRepeatingChars && containsSpecialChar; 
    } 
} 

儘管用一堆正則表達式它會更乾淨。

+0

添加了一個編輯功能,如果您可以在我的主帖中幫助我的話 – archer

+0

就在您打印「有效密碼」之前,您可以將您的代碼確認密碼。 – Atri

+0

我的代碼有問題,因爲在輸入第一個密碼後,我輸入第二個密碼進行確認,第二個密碼輸入無效密碼 – archer

1

根據第一兩點嘗試這樣:

boolean match = password.matches("(?=.*[a-zA-Z])(?=.*\\d)(?=.*[[email protected]#$%&*()_+=|<>?{}\\[\\]~-]).{8}"); 

更改特殊字符到你的(所有的人都在布拉克等等)。請記住在其中一些之前使用\。

對於空格:

boolean isWhitespace = password.matches("^\\s*$"); 

檢查感嘆號和問號:

boolean startsWithBadChar = password.matches("(!|?).*");