密码验证

时间:2015-02-11 19:07:15

标签: java response

这是我正在进行的任务......

实施一个程序,该程序读入用户密码并验证其是否符合以下条件: 至少8个字符

包含至少1个低位字母字符

包含至少1个大写字母

包含至少1个数字

包含来自集合的至少1个特殊字符:!@#$%^& *

不包含单词“and”或单词“end”

输出一个字符串,提示用户输入密码并包含要求 在你的输出上面。

输出声明有效或无效的字符串。如果无效,请说明尚未满足上述规则。

利用以下功能:

的indexOf

循环结构

的charAt()

ISDIGIT()

isUpperCase()

isLowerCase()

以及所需的任何其他功能

对我来说,棘手的部分是它必须返回所有缺失的东西。就像我输入一个密码的密码一样,它应该回来告诉我“你错过了一个大写字母,一个数字和一个特殊字符”

我有一个开始,但我真的很困惑如何让它回报给我。 这就是我到目前为止所拥有的

    /********************************************
    This program will test a password for:
    8 characters
    1 upper case
    1 lower case
    1 numeric digit
    1 special character from the set !@#$%^&*
    and make sure it doesn't contain AND or END

    If the password complies, it will return a valid answer
    If not, it will tell the user what they need to do.
    *********************************************/



    import java.util.Scanner; 

    public class YoungAmyProg5 
    { 

        public static void main(String[] args) 
        { 
            Scanner in = new Scanner(System.in); 
            String input; 
            //input password
            System.out.println("Enter a password that follows               these rules:\n Is at least 8 characters long\n Contains             at least 1 lower case letter\n Contains at least 1 upper            case letter\n Contains at least 1 numeric digit\n                       Contains at least 1 special character from the set: !               @#$%^&*\n Does NOT contain the word "and" or the word           "end": ")
    input= in.nextLine ();

//Put through string and reply
if 

    public static boolean isSecurePassword(String password) { 

    int lengthPassword = password.length(); 
    if (lengthPassword >= 8 ) { 
        return false; 
    } 

    boolean hasUppercase = false; //uppercase
    boolean hasLowecase = false;  //lowercase
    boolean hasDigit = false; //digit
    int specialChar = input.indexOf('!', '@', '#', '$', '%', '^', '&', '*'); //special character
    int word = input.indexOf ('and', 'end'); //and or end
    for (int i = 0; i < lengthPassword; i++) { 
        char ch = password.charAt(i); 
        if (Character.isUpperCase(ch) ) { 
            hasUppercase = true; 
        } 
        if (Character.isLowerCase(ch) ) { 
            hasLowercase = true; 
        } 
        if (Character.isDigit(ch) ) { 
            hasDigit = true; 
        }
        if (specialChar>0) {
            specialChar = true; 
        } 
        if (word>0) {
            word = true;
        }

2 个答案:

答案 0 :(得分:0)

除了设置变量外,您还可以创建一个存储缺失事物的列表,也可以检查是否发生错误:

List<String> missing = new ArrayList<String>();
boolean verified = true;

在if语句中,如果有些错误,请将已验证设置为false,并在列表中添加'大写字母'等字符串。

if( <password does NOT contain an upper case letter> )
  missing.add("an upper case letter");
  verified = false;
}

在所有if语句之后只检查验证是否为真,如果没有生成字符串并将缺失列表中的所有字符串添加到它。 (生成句子)

(我知道这将以一个有点长的代码结束,而且效率不高)

答案 1 :(得分:0)

也许你可以用另一种方式思考:当你发现违反要求时,返回false;如果最终没有违规,则返回true。