MrShi
2025-03-12 69a1b3bf45738f048361ee4ccb6bdc64fce35720
server/system_service/src/main/java/com/doumee/core/utils/PwdCheckUtil.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,78 @@
package com.doumee.core.utils;
import java.util.regex.Pattern;
/**
 * Java正则校验密码至少包含:字母数字特殊符号中的2种
 */
public class PwdCheckUtil {
    /**
     * å‡å®šè®¾ç½®å¯†ç æ—¶ï¼Œå¯†ç è§„则为:  å­—母、数字、特殊符号,至少匹配2种
     * åˆ™å¯†ç å¯èƒ½å‡ºçŽ°çš„æƒ…å†µæœ‰ï¼š
     * 1、数字+特殊符号
     * 2、字母+特殊符号
     * 3、字母+数字
     * 4、字母+数字+特殊符号
     * (组合与顺序无关)
     * è§£å†³æ€è·¯ï¼š
     * 1、遍历字符串的字符数组,查看是否包含目标特殊字符,若包含,则标记字符串
     * åŒ…含特殊字符,并替换当前特殊字符为''。
     * 2、判断剩下的字符组成的字符串,是否匹配以下情况
     * - çº¯å­—母
     * - çº¯æ•°å­—
     * - å­—母+数字
     * 3、字符串匹配规则
     * çº¯å­—母+包含特殊字符  ---- åŒ¹é…é€šè¿‡
     * çº¯æ•°å­—+包含特殊字符 ---- åŒ¹é…é€šè¿‡
     * å­—母+数字+包含个数字符 ---- åŒ¹é…é€šè¿‡
     */
    //特殊字符
    public static final String SPEC_CHARACTERS = " !\"#$%&'()*+,-./:;<=>?@\\]\\[^_`{|}~";
    // çº¯å­—母
    public static final String character = "[a-zA-Z]{1,}$";
    // çº¯æ•°å­—
    public static final String numberic = "[0-9]{1,}$";
    // å­—母和数字
    public static final String number_and_character = "((^[a-zA-Z]{1,}[0-9]{1,}[a-zA-Z0-9]*)+)" +
            "|((^[0-9]{1,}[a-zA-Z]{1,}[a-zA-Z0-9]*)+)$";
    // å­—母或数字
    public static final String number_or_character = "[a-zA-Z0-9]+$";
    // å­—母数字下划线
    public static final String ncw = "\\w+$";
    public static boolean checkPassword(String targetString) {
        String opStr = targetString;
        boolean isLegal = false;
        boolean hasSpecChar = false;
        char[] charArray = opStr.toCharArray();
        for (char c : charArray) {
            if (SPEC_CHARACTERS.contains(String.valueOf(c))) {
                hasSpecChar = true;
                // æ›¿æ¢æ­¤å­—符串
                opStr = opStr.replace(c, ' ');
            }
        }
        String excSpecCharStr = opStr.replace(" ", "");
        boolean isPureNum = Pattern.compile(numberic).matcher(excSpecCharStr).matches();
        boolean isPureChar = Pattern.compile(character).matcher(excSpecCharStr).matches();
        boolean isNumAndChar = Pattern.compile(number_and_character).matcher(excSpecCharStr).matches();
        isLegal = ((isPureNum && hasSpecChar)
                || (isPureChar && hasSpecChar) || isNumAndChar && hasSpecChar) || isNumAndChar;
        System.out.println("字符串:" + targetString + ",是否符合规则:" + isLegal);
        System.out.println("---------------");
        return isLegal;
    }
    public static void main(String[] args) {
        checkPassword("123456a");
//        checkPassword("41234123");
//        checkPassword("#$%^&&*(");
//        checkPassword("fasd$$");
//        checkPassword("41234%%%");
//        checkPassword("fasd41^(324");
//        checkPassword("fa413%^&*");
//        checkPassword("&%fa413%^&*");
    }
}