package com.qnfhq.utils.password;

import com.qnfhq.common.exception.RenException;
import com.qnfhq.common.utils.MessageUtils;

/**
 * 密码强度验证工具类
 *
 * @Author: Yelz 30262728@qq.com
 * @Date: 2025/11/20 13:49
 * @Description:
 */
public class PasswordStrengthValidator {

    /**
     * 验证密码强度
     * 8-32个字符
     * 1个小写
     * 1个大写
     * 1个数字
     * 1个特殊符号 % # $ @ !
     * @param password 密码
     */
    public static void validatePasswordStrength(String password) {
        if (password == null || password.length() < 8) {
            throw new RenException(MessageUtils.message("password.length.lt8"));//密码长度不能少于8位
        }

        if (password.length() > 32) {
            throw new RenException(MessageUtils.message("password.length.gt32"));//密码长度不能超过32位
        }

        int strength = 0;

        // 包含数字
        if (password.matches(".*\\d.*")) {
            strength++;
        }

        // 包含小写字母
        if (password.matches(".*[a-z].*")) {
            strength++;
        }

        // 包含大写字母
        if (password.matches(".*[A-Z].*")) {
            strength++;
        }

        // 包含特殊字符
        if (password.matches(".*[!@#$%^&*()_+\\-=\\[\\]{};':\"\\\\|,.<>\\/?].*")) {
            strength++;
        }

        if (strength < 4) {
            throw new RenException(MessageUtils.message("password.must.include.digit.alpha.sc"));//密码必须包含数字、大小写字母、特殊字符
        }

    }
}

