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

 更新时间:2023年08月02日 10:01:22   作者: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正则判断强密码内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • java核心编程之文件过滤类FileFilter和FilenameFilter

    java核心编程之文件过滤类FileFilter和FilenameFilter

    这篇文章主要为大家详细介绍了java文件过滤类FileFilter和FilenameFilter,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-08-08
  • Java方法的返回值及注意事项小结

    Java方法的返回值及注意事项小结

    这篇文章主要介绍了Java方法的返回值及注意事项,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2023-04-04
  • 浅谈一下Java中枚举的用法

    浅谈一下Java中枚举的用法

    这篇文章主要介绍了浅谈一下Java中枚举的用法,枚举是一个被命名的整型常数的集合,用于声明一组带标识符的常数,当一个变量有几种固定可能的取值时,就可以将它定义为枚举类型,需要的朋友可以参考下
    2023-04-04
  • spring cloud eureka注册原理-注册失败填坑笔记

    spring cloud eureka注册原理-注册失败填坑笔记

    这篇文章主要介绍了spring cloud eureka注册原理-注册失败填坑笔记,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-05-05
  • java实现马踏棋盘的算法

    java实现马踏棋盘的算法

    这篇文章主要为大家详细介绍了java实现马踏棋盘的算法,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-02-02
  • SpringBoot文件上传大小设置方式(yml中配置)

    SpringBoot文件上传大小设置方式(yml中配置)

    这篇文章主要介绍了SpringBoot文件上传大小设置方式(yml中配置),具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-03-03
  • Spring Boot实现动态更新任务的方法

    Spring Boot实现动态更新任务的方法

    这篇文章主要介绍了Spring Boot实现动态更新任务的方法,文中给出了详细的示例代码供大家参考学习,对大家学习使用Spring Boot动态更新任务具有一定的参考价值,需要的朋友们来一起看看吧。
    2017-04-04
  • 基于Java8 函数式接口理解及测试

    基于Java8 函数式接口理解及测试

    下面小编就为大家带来一篇基于Java8 函数式接口理解及测试。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-08-08
  • Java中的@interface注解使用详解

    Java中的@interface注解使用详解

    这篇文章主要介绍了Java中的@interface注解使用详解,注解@interface不是接口是注解类,在jdk1.5之后加入的功能,使用@interface自定义注解时,自动继承了java.lang.annotation.Annotation接口,需要的朋友可以参考下
    2023-12-12
  • Java简化复杂系统调用的门面设计模式

    Java简化复杂系统调用的门面设计模式

    Java门面模式是一种结构性设计模式,它为复杂系统提供了一个简单的接口,使得系统的客户端能够更加方便地使用系统功能。门面模式通过封装复杂的子系统,隐藏系统的实现细节,提高了系统的易用性和灵活性
    2023-04-04

最新评论