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正则判断强密码内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • RocketMQ4.5.X 实现修改生产者消费者日志保存路径

    RocketMQ4.5.X 实现修改生产者消费者日志保存路径

    这篇文章主要介绍了RocketMQ4.5.X 实现修改生产者消费者日志保存路径方式,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-07-07
  • SpringBoot处理 CORS 跨域的方法详解

    SpringBoot处理 CORS 跨域的方法详解

    Springboot跨域问题,是当前主流web开发人员都绕不开的难题,CORS是一个W3C标准,全称是”跨域资源共享”,本文将给大家详细介绍SpringBoot 如何处理 CORS 跨域,感兴趣的同学跟着小编一起来看看吧
    2023-07-07
  • 基于Java编写简单的Excel工具类

    基于Java编写简单的Excel工具类

    这篇文章主要为大家详细介绍了如何基于Java编写简单的Excel工具类,文中的示例代码讲解详细,具有一定的借鉴价值,有需要的小伙伴可以参考下
    2024-02-02
  • java 中String.equals和==的比较

    java 中String.equals和==的比较

    这篇文章主要介绍了java 中String.equals和==的比较的相关资料,需要的朋友可以参考下
    2017-08-08
  • 升级dubbo2.7.4.1版本平滑迁移到注册中心nacos

    升级dubbo2.7.4.1版本平滑迁移到注册中心nacos

    这篇文章主要为大家介绍了2.7.4.1的dubbo平滑迁移到注册中心nacos的两种版本升级方案,以及为什要升级,有需要的朋友可以借鉴参考下,希望能够有所帮助
    2022-02-02
  • Java 动态数组的实现示例

    Java 动态数组的实现示例

    Java动态数组是一种可以任意伸缩数组长度的对象,本文主要介绍了Java 动态数组的实现示例,文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-08-08
  • mybatis的映射xml中动态设置orderby方式

    mybatis的映射xml中动态设置orderby方式

    这篇文章主要介绍了mybatis的映射xml中动态设置orderby方式,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-11-11
  • SpringBoot整合达梦数据库的教程详解

    SpringBoot整合达梦数据库的教程详解

    这篇文章主要给大家介绍了SpringBoot整合达梦数据库的详细教程,文章中有详细的图片介绍和代码示例供大家参考,具有一定的参考价值,需要的朋友可以参考下
    2023-08-08
  • Java生成递增流水号(编号+时间+流水号)简单示例

    Java生成递增流水号(编号+时间+流水号)简单示例

    这篇文章主要给大家介绍了关于Java生成递增流水号(编号+时间+流水号)的相关资料,在开发项目漫长的过程中常常会遇到流水号需要自动生成的问题存在,文中给出了详细的代码示例,需要的朋友可以参考下
    2023-07-07
  • 解析ConcurrentHashMap: 红黑树的代理类(TreeBin)

    解析ConcurrentHashMap: 红黑树的代理类(TreeBin)

    ConcurrentHashMap是由Segment数组结构和HashEntry数组结构组成。Segment的结构和HashMap类似,是一种数组和链表结构,今天给大家普及java面试常见问题---ConcurrentHashMap知识,一起看看吧
    2021-06-06

最新评论