-1

Here i used this code for generating one password which should contain a uppercase,a lowercase and a number and a special char. this is my code for checking.

String randomPassword = genRanPass();
        boolean hasUppercase = !randomPassword.equals(randomPassword.toLowerCase());
        boolean hasLowercase = !randomPassword.equals(randomPassword.toUpperCase());
        boolean hasNumber  = randomPassword.matches(".*\\d.*");
        if(!(randomPassword.contains("!") || randomPassword.contains("@") || randomPassword.contains("#") || randomPassword.contains("$") || randomPassword.contains("_") || randomPassword.contains("-"))){
             while(!hasUppercase && hasLowercase && hasNumber) 
             {
             randomPassword = genRanPass();
             }

          }else{

             while(!hasUppercase && hasLowercase && hasNumber) 
                 {
                 randomPassword = genRanPass();
                 }

                return randomPassword;

        }

genRanPass(); generating a password having random number,a spcial char,a letter Uppercase and lower case

but i got hnga$VVj from my method  and when i am checking 

while(!hasUppercase && hasLowercase && hasNumber) 
                 {
                 randomPassword = genRanPass();
                 }

                return randomPassword;
   while(!hasUppercase && hasLowercase && hasNumber) its became true,true and false,its not going inside this method plase help me.
                 {       
Sushreesmita
  • 19
  • 1
  • 4

1 Answers1

1

I strongly recommend you use a straight forward for-each loop and the utility methods from Character. Something like,

public static boolean isPasswordValid(String password) {
    if (password == null) return false;
    boolean hasUpper = false;
    boolean hasLower = false;
    boolean hasNumber = false;
    boolean hasSpecial = false;
    for (char ch : password.toCharArray()) {
        if (Character.isUpperCase(ch)) {
            hasUpper = true;
        } else if (Character.isLowerCase(ch)) {
            hasLower = true;
        } else if (Character.isDigit(ch)) {
            hasNumber = true;
        } else {
            hasSpecial = true;
        }
    }
    return hasUpper && hasLower && hasNumber && hasSpecial;
}
Elliott Frisch
  • 198,278
  • 20
  • 158
  • 249