栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

Java自定义强密码校验

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Java自定义强密码校验

常用密码校验正则:

	// 必填数字、大小写字母,且至少8位
	String regex = "^(?=.*\d)(?=.*[a-z])(?=.*[A-Z])[a-zA-Z0-9]{8,}$";
	// 必填数字、字母、特殊字符,且以字母开头,至少8位以上
	String strongRegex = "^(?![0-9]+$)(?![^0-9]+$)(?![a-zA-Z]+$)(?![^a-zA-Z]+$)(?![a-zA-Z0-9]+$)[a-zA-Z0-9\S]{8,}$";

但是这种正则通常不能满足我们的需要。

现在的需求是:密码必须由数字、大写字母、小写字母、特殊字符这四种,任意3种及以上排列组合,且至少8位。

自定义强密码校验的实现:

import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;

import java.util.ArrayList;
import java.util.List;


public class CheckPasswordUtils {

    
    public static boolean check(String password){
        // 空对象、空字符串、长度小于8 -> 验证不通过
        if (Utils.isNullOrEmpty(password)) return false;
        if (password.length() < 8) return false;
        StringCounter counter = new StringCounter().initInstance(password);
        int kinds = counter.getKinds();
        // 四种字符,任意3种即可
        return kinds > 2;
    }

    
    public static void main(String[] args) {
        List passwordList = new ArrayList<>();
        passwordList.add(null); // 验证空对象
        passwordList.add(""); // 验证空字符串
        passwordList.add("123456"); // 验证密码长度
        passwordList.add("lps123456"); // 验证种类
        passwordList.add("Lps123456"); // 验证正常密码
        passwordList.add("Lps*20210831*"); // 验证强密码

        passwordList.forEach(password -> {
            System.out.println("[" + password + "] -> " + check(password));
        });
    }

}

@Data
@NoArgsConstructor
@AllArgsConstructor
class StringCounter{

    private int number; // 数字出现的次数
    private int smallLetter; // 小写字母出现的次数
    private int bigLetter; // 大写字母出现的次数
    private int symbol; // 特殊符号出现的次数

    public StringCounter initInstance(String s){
        if (Utils.isNullOrEmpty(s)){
            return new StringCounter(0, 0, 0, 0);
        }else {
            char[] chars = s.toCharArray();
            int number = 0, smallLetter = 0, bigLetter = 0, symbol = 0;
            for (char c : chars) {
                if (c > 47 && c < 58){
                    number++;
                } else if(c > 64 && c < 91){
                    bigLetter++;
                } else if(c > 96 && c < 123){
                    smallLetter++;
                } else {
                    symbol++;
                }
            }
            return new StringCounter(number, smallLetter, bigLetter, symbol);
        }
    }

    public int getKinds(){
        int kinds = 0;
        if (this.number > 0) kinds++;
        if (this.smallLetter > 0) kinds++;
        if (this.bigLetter > 0) kinds++;
        if (this.symbol > 0) kinds++;
        return kinds;
    }

}

main函数输出:

[null] -> false
[] -> false
[123456] -> false
[lps123456] -> false
[Lps123456] -> true
[Lps*20210831*] -> true

Process finished with exit code 0
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/644596.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号