在 Java 中驗證密碼

Waleed 2023年10月12日
在 Java 中驗證密碼

在建立登入頁面時,我們經常需要驗證密碼並檢查它是否符合正確的標準。
驗證密碼包括根據下面討論的密碼策略檢查密碼是否正確:

  1. 標準密碼至少包含八個字元
  2. 普通密碼至少包含兩個大寫字母
  3. 標準密碼包含兩個小寫字母
  4. 標準密碼包括兩個特殊符號

Java 中驗證密碼的演算法

  1. 在檢查我們的密碼之前,我們必須指定一個理想的密碼應該包含多少個大寫、小寫、特殊字母或數字。為此,我們定義了 int 型別的變數 MAX、MIN_Uppercase、MIN_Lowercase、Num_Digits 和 Special。
  2. 要計算密碼有多少個大寫、小寫、數字或特殊字元,我們將宣告整數型別的變數 uppercaseCounter、lowercaseCounter、special 和 digitCounter。
  3. 宣告計數器變數後,我們將它們初始化為 0。通過將計數器變數初始化為 0,我們確保它們不包含任何垃圾值。
  4. 我們將首先要求使用者輸入密碼以驗證給定的密碼。要獲取使用者輸入,我們首先在程式中匯入 Scanner 類,然後建立一個物件。在我們的 Scanner 程式物件中,輸入了類。
  5. Scanner 函式有一個預設函式 .nextLine(),它讀取使用者輸入,然後將其儲存在字串中。
  6. 然後我們迭代所有密碼字元並將每個字元儲存在 char 型別的 c 變數中。
  7. 字元資料型別有一個預設函式 isUpperCaseisLowerCaseisDigit。使用這些預設函式,我們計算密碼包含多少個大寫和小寫字元、特殊符號或數字。
  8. 如果儲存在 c 變數中的字元是大寫的,我們將 uppercaseCount 變數加 1。
  9. 如果儲存在 c 變數中的字元是小寫的,我們將 lowercaseCounter 變數加 1。
  10. 如果儲存在 c 中的字元是數字,我們將 digitCounter 變數加 1。
  11. 如果儲存在 c 中的字元是特殊符號,我們將特殊計數器加 1。
  12. 完成後,我們執行條件語句來檢查我們的密碼是否包含指定的字元,如@#%、小寫和大寫字母以及數字。
  13. 如果密碼符合我們指定的標準,我們將列印驗證密碼語句。
    14、如果密碼不符合我們的全部或部分條件,我們首先顯示你的密碼不包含以下內容的宣告。
  14. 最後,我們將檢查指定條件的密碼不滿足,然後相應地顯示訊息。
package sampleProject;
import java.util.*;
import java.util.Scanner;

public class Codesample {
  public static void main(String[] args) {
    // Specify the maximum number of letters in a password
    final int MAX = 8;

    // Specifying the number of uppercase letters in password
    final int MIN_Uppercase = 2;
    // Specifying the minimum lowercase letters in password
    final int MIN_Lowercase = 2;
    // Specifying the number of digits in a password
    final int NUM_Digits = 2;
    // Specify the minimum number of special case letters
    final int Special = 2;
    // Count number of uppercase letters in a password
    int uppercaseCounter = 0;
    // Counter lowercase letters in a password
    int lowercaseCounter = 0;
    // Count digits in a password
    int digitCounter = 0;
    // count special case letters in a password
    int specialCounter = 0;

    // Take input of password from the user

    System.out.println("Enter the password\n");

    Scanner input = new Scanner(System.in);

    // Take password input from the user and save it in the string password

    String password = input.nextLine();

    for (int i = 0; i < password.length(); i++) {
      char c = password.charAt(i);
      if (Character.isUpperCase(c))
        uppercaseCounter++;
      else if (Character.isLowerCase(c))
        lowercaseCounter++;
      else if (Character.isDigit(c))
        digitCounter++;
      if (c >= 33 && c <= 46 || c == 64) {
        specialCounter++;
      }
    }

    if (password.length() >= MAX && uppercaseCounter >= MIN_Uppercase
        && lowercaseCounter >= MIN_Lowercase && digitCounter >= NUM_Digits
        && specialCounter >= Special) {
      System.out.println("Valid Password");
    } else {
      System.out.println("Your password does not contain the following:");
      if (password.length() < MAX)
        System.out.println(" atleast 8 characters");
      if (lowercaseCounter < MIN_Lowercase)
        System.out.println("Minimum lowercase letters");
      if (uppercaseCounter < MIN_Uppercase)
        System.out.println("Minimum uppercase letters");
      if (digitCounter < NUM_Digits)
        System.out.println("Minimum number of numeric digits");
      if (specialCounter < Special)
        System.out.println("Password should contain at lest 3 special characters");
    }
  }
}

輸出:

Your password does not contain the following:
At least 8 characters
Minimum lowercase letters
Minimum, uppercase letters
Minimum number of numeric digits
Password should contain at least 3 special characters

Enter the password

DElft@#90
Valid Password