java

关注公众号 jb51net

关闭
首页 > 软件编程 > java > java正则判断强密码

java正则表达式判断强密码和随机生成强密码代码示例

作者:JurenXxt

这篇文章主要给大家介绍了关于java正则表达式判断强密码和随机生成强密码的相关资料,最近需要一个密码强度正则表达式在用户注册时校验用户密码强度,需要的朋友可以参考下

前言

项目中遇到需要判断管理员登陆密码为强密码,同时可以自动随机生成强密码,写了一个函数。

一、定义几个常量

// 先把需要验证的规则放入一个字符数组中
  private static final char[] CHAR = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890@#$%^&+="
          .toCharArray();
//定义正则表达式规则至少要一个大写字母一个小写字母一个特殊字符,密码长度在8~16位之间
  private static final String PASSWORD_REGEX = "^(?=.*[0-9])(?=.*[a-z])(?=.*[A-Z])(?=.*[@#$%^&+=]){1,2}+(?=\\S+$).{8,16}$";
//判断密码中是否有中文
  private static final String NO_CHINESE_REGEX = "^[^\\u4e00-\\u9fa5]+$";
//根据上面两个规则创建两个模式用于校验
  private static final Pattern PASSWORD_PATTERN = Pattern.compile(PASSWORD_REGEX);
  private static final Pattern NO_CHINESE_PATTERN = Pattern.compile(NO_CHINESE_REGEX);

二、生成强密码

    /**
     * 随机生成强密码
     * @param length 密码长度
     * @return password
     */
    public static String generatePassword(int length) {
    //判断密码是否在8~16位之间超出或小于都会设置默认长度
        length = length < 8 ? 8 : length;
        length = length > 16 ? 16 : length;
        //调用获取随机强密码函数
        String result = getRandomPassword(length);
        // 如果规则满足条件直接返回强密码,否则再次调用
        Matcher m = PASSWORD_PATTERN.matcher(result);
        Matcher m1 = NO_CHINESE_PATTERN.matcher(result);
        if (m.matches() && m1.matches()) {
            return result;
        }
        return generatePassword(length);
    }
    //随机生成强密码
 	private static String getRandomPassword(int length) {
        StringBuilder sb = new StringBuilder();
        //线程安全随机数
        ThreadLocalRandom r = ThreadLocalRandom.current();
        for (int x = 0; x < length; ++x) {
        //添加CHAR里面的随机下标
            sb.append(CHAR[r.nextInt(CHAR.length)]);
        }
        return sb.toString();
    }

三.校验密码强度

    /**
     * 校验密码复杂度,至少包含8个字符,最多包含20个自负
     * 至少包含一个数字,一个大写字母,一个小写字母,一个特殊字符,同时不能包含空白区域
     * @param password 密码
     * @return true/false
     */
    public static boolean checkPasswordComplexity(String password) {
        if(StringUtils.isBlank(password)){
            return false;
        }
        if (password.length()> 8 && password.length() < 16) {
            //密码至少包含:大小写英文字母、数字、特殊符号,密码长度大于8位,小于16位
            String regex = "^(?=.*[0-9])(?=.*[a-z])(?=.*[A-Z])(?=.*[@#$%^&+=])(?=\\S+$).{8,16}$";
            // 判断密码是否匹配规则
            return Pattern.matches(regex, password);
        }
        else {
            return false;
        }
    }

总结

以上就是java如何使用正则表达式判断是否为强密码和如何随机生成强密码。

到此这篇关于java正则表达式判断强密码和随机生成强密码的文章就介绍到这了,更多相关java正则判断强密码内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

您可能感兴趣的文章:
阅读全文