Проверка пароля

Описание проблемы:

Некоторые веб-сайты устанавливают определенные правила для паролей. Напишите метод, который проверяет, является ли строка допустимым паролем. Предположим, что правило пароля выглядит следующим образом:

  • Пароль должен содержать не менее восьми символов.
  • Пароль состоит только из букв и цифр.
  • Пароль должен содержать не менее двух цифр.

Напишите программу, которая предлагает пользователю ввести пароль и отображает «действительный пароль», если правило соблюдается, или «неверный пароль» в противном случае.

Это то, что у меня есть до сих пор:

import java.util.*;  
import java.lang.String;  
import java.lang.Character;  

/**
 * @author CD
 * 12/2/2012
 * This class will check your password to make sure it fits the minimum set     requirements.
 */
public class CheckingPassword {  

    public static void main(String[] args) {  
        Scanner input = new Scanner(System.in);  
        System.out.print("Please enter a Password: ");  
        String password = input.next();  
        if (isValid(password)) {  
            System.out.println("Valid Password");  
        } else {  
            System.out.println("Invalid Password");  
        }  
    }  

    public static boolean isValid(String password) {  
        //return true if and only if password:
        //1. have at least eight characters.
        //2. consists of only letters and digits.
        //3. must contain at least two digits.
        if (password.length() < 8) {   
            return false;  
        } else {      
            char c;  
            int count = 1;   
            for (int i = 0; i < password.length() - 1; i++) {  
                c = password.charAt(i);  
                if (!Character.isLetterOrDigit(c)) {          
                    return false;  
                } else if (Character.isDigit(c)) {  
                    count++;  
                    if (count < 2)   {     
                        return false;  
                    }     
                }  
            }  
        }  
        return true;  
    }  
}

Когда я запускаю программу, она проверяет только длину пароля, я не могу понять, как убедиться, что она проверяет как буквы, так и цифры, и чтобы в пароле было как минимум две цифры.


person hanyouchris    schedule 02.12.2012    source источник
comment
Первая поправка к этому заключается в том, что должно быть, если password.length() ‹= 8, так как он говорит по крайней мере 8, что означает, что 8 допустимо.   -  person ThePerson    schedule 03.12.2012
comment
@NutterzUK: Итак, если 8 допустимо, метод должен возвращать false, если длина ‹ 8. ОП все понял правильно.   -  person JB Nizet    schedule 03.12.2012
comment
Вам разрешено использовать регулярное выражение?   -  person FThompson    schedule 03.12.2012


Ответы (4)


Ты почти понял. Однако есть некоторые ошибки:

  • вы не перебираете все символы пароля (i < password.length() - 1 неверно)
  • вы начинаете с количества цифр 1 вместо 0
  • вы проверяете, что количество цифр не менее 2, как только вы встречаете первую цифру, вместо того, чтобы проверять ее после того, как вы отсканировали все символы
person JB Nizet    schedule 02.12.2012

Предположим, что правильный пароль имеет:

  • 8 и более символов, но не более 16 символов
  • один или несколько символов верхнего регистра
  • один или несколько символов нижнего регистра
  • одна или несколько цифр
  • один или несколько специальных символов (например, $, @ или !)

Код:

import java.util.Scanner;
public class Password {

public static void main(String[] args) {
    // TODO Auto-generated method stub
    int min =8;
    int max=16;
    int digit=0;
    int special=0;
    int upCount=0;
    int loCount=0;
    String password;
    Scanner scan = new Scanner(System.in);
    System.out.println(" Enter Your Password:");
        password = scan.nextLine();
    if(password.length()>=min&&password.length()<=max){
        for(int i =0;i<password.length();i++){
            char c = password.charAt(i);
            if(Character.isUpperCase(c)){
                upCount++;
            }
            if(Character.isLowerCase(c)){
                loCount++;
            }
            if(Character.isDigit(c)){
                digit++;
            }
            if(c>=33&&c<=46||c==64){
                special++;
            }
        }
        if(special>=1&&loCount>=1&&upCount>=1&&digit>=1){
            System.out.println(" Password is good:");
        }

    }

    if(password.length()<min){

        for(int i =0;i<password.length();i++){
            char c = password.charAt(i);
            if(Character.isLowerCase(c)){
                loCount++;
            }
            }

        if(loCount>0){
            System.out.println(" Password must be atleat "+min+" characters:");
            System.out.println(" You need atleast one upper case chracter:");
            System.out.println(" You need atleast one digit:");
            System.out.println(" You need atleast one special chracter:");



    }
    }
    else if(password.length()<min&&upCount>1){
        for(int i =0;i<password.length();i++){
        char c =password.charAt(i);
        if(Character.isLowerCase(c)){
            loCount++;
        }
         if(Character.isUpperCase(c)){
            upCount++;
        }
        }
        if(loCount>0&&upCount>0){
        System.out.println(" Password must be atleast "+min+" chracters:");
        System.out.println(" You need atleast one digit:");
        System.out.println(" You need atleast one special chracter:");
    }
    }
     if(password.length()>max||password.length()>=max&&upCount>1&&loCount>1&&digit>1){
         System.out.println(" Password is too long.Limit is "+max+" chracters:");
                 System.out.println(" You need atleast one special chracter:");

        }
      if(password.length()>=min&&password.length()<=max&&loCount>0&&upCount>0&&digit>0&&special==0){
         System.out.println(" You need atleast a special chracter");
     }
      if(password.length()>=min&&password.length()<=max&&loCount>0&&upCount>0&&digit==0&&special==0){
         System.out.println(" You need atleast one digit:");
         System.out.println(" You need atleast one special chracter:");
     }
   }
}
person Abdul Hanan Khan    schedule 21.02.2016

Как уже было сказано ранее, вы должны сначала проверить все символы пароля. Подсчитайте свои цифры и, наконец, проверьте, меньше ли число 2. Вот код ссылки.

if (password.length() < 8) {   
        return false;  
    } else {      
        char c;  
        int count = 0;   
        for (int i = 0; i < password.length(); i++) {  
            c = password.charAt(i);  
            if (!Character.isLetterOrDigit(c)) {          
                return false;  
            } else if (Character.isDigit(c)) {  
                count++;     
            }  
        }  
        if (count < 2)   {     
            return false;  
        }  
    }  
    return true;  
}  
person istovatis    schedule 02.12.2012

пакетный метод;

/* 2. Напишите метод Java для проверки того, является ли строка допустимым паролем. Правила пароля: пароль должен содержать не менее десяти символов. Пароль состоит только из букв и цифр. Пароль должен содержать не менее двух цифр.

Ожидаемый результат:

  1. Пароль должен содержать не менее восьми символов.
  2. Пароль состоит только из букв и цифр.
  3. Пароль должен содержать не менее двух цифр
    Введите пароль (Вы соглашаетесь с приведенными выше Условиями и положениями): abcd1234
    Действительный пароль: abcd1234 */

открытый класс CheckPassword {

public static String password;
public static int disitCounter = 0;

public static boolean isValid(String password) {


    if (password.length() >= 10 ) {
        for(int index = 0; index < password.length(); index++) {
            char passChar = password.charAt(index);
            if (!Character.isLetterOrDigit(passChar)) {
                return false;
            }
            else {
                if (Character.isDigit(passChar)) {
                    disitCounter++;
                }
            }

        }

    }
    if(disitCounter < 2) {
        return false;
    }
    return true;
}

public static void main(String[] args) {
    password = "abcdefgh1w3";
    if(isValid(password)) {
        System.out.print("It is a valid password");
    }
    else {
        System.out.print("It is a invalid password");
    }
}

}

person symun moyeen    schedule 12.03.2019