2015-11-12 33 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("(!|?).*");