实现为用户生成随机密码需求,类似如下:

package com.cmict.yywzx.common.core.utils;import java.util.*;/*** 随机密码生成工具 **/
public class PasswordUtil {// 特殊字符private static final String SPECIAL_CHARS = "!@#$%&*_=";// 去掉I、L、O、Q易混淆字符private static final String UPPER_WORD_CHARS = "ABCDEFGHJKMNPRSTUVWXYZ";// 去掉i、l、o、q易混淆字符private static final String LOWER_WORD_CHARS = "abcdefghjkmnprstuvwxyz";// 去掉1、0易混淆字符private static final String NUMBER_CHARS = "23456789";/*** 生成固定长度的复杂密码* @param length* @return*/public static String randomPassword(int length){return randomPassword(length,true,true,true,true);}/*** @param length        生成密码的长度  建议至少6位* @param isLowerWord   是否包含小写字母* @param isUpperWord   是否包含大写字母* @param isSpecialChar 是否包含特殊字符* @param isNum         是否包含数字* @return String 随机密码* @description: 生成随机密码的工具方法*/public static String randomPassword(int length, Boolean isLowerWord, Boolean isUpperWord, Boolean isSpecialChar, Boolean isNum) {Random rnd = new Random();// 先取必填项1个Map<Integer, String> map = new HashMap<>();if (isLowerWord) {map.put(1, LOWER_WORD_CHARS);}if (isUpperWord) {map.put(2, UPPER_WORD_CHARS);}if (isSpecialChar) {map.put(3, SPECIAL_CHARS);}if (isNum) {map.put(4, NUMBER_CHARS);}StringBuilder sb = new StringBuilder();for (Map.Entry<Integer, String> entry : map.entrySet()) {String value = entry.getValue();sb.append(value.charAt(rnd.nextInt(value.length())));}char[] chars = new char[length - sb.length()];for (int i = 0; i < length - sb.length(); i++) {chars[i] = nextChar(rnd, isLowerWord, isUpperWord, isSpecialChar, isNum);}StringBuilder resultSb = sb.append(new String(chars));// 对结果数据乱序处理(前面固定放到前几个了,故需乱序)String[] split = resultSb.toString().split("");List<String> strings = Arrays.asList(split);Collections.shuffle(strings);StringBuilder stringBuilder = new StringBuilder(strings.size());strings.forEach(stringBuilder::append);return stringBuilder.toString();}private static char nextChar(Random rnd, Boolean isLowerWord, Boolean isUpperWord, Boolean isSpecialChar, Boolean isNum) {List<Integer> list = new ArrayList<>();if (isLowerWord) {list.add(1);}if (isUpperWord) {list.add(2);}if (isSpecialChar) {list.add(3);}if (isNum) {list.add(4);}if (list.size() == 0) {// 默认数字密码list.add(4);}// 随机list索引int index = rnd.nextInt(list.size());Integer integer = list.get(index);switch (integer) {case 1:return LOWER_WORD_CHARS.charAt(rnd.nextInt(LOWER_WORD_CHARS.length()));case 2:return UPPER_WORD_CHARS.charAt(rnd.nextInt(UPPER_WORD_CHARS.length()));case 3:return SPECIAL_CHARS.charAt(rnd.nextInt(SPECIAL_CHARS.length()));default:return NUMBER_CHARS.charAt(rnd.nextInt(NUMBER_CHARS.length()));}}}

随机密码生成工具类(java)相关推荐

  1. java 图形校验_java图形验证码生成工具类 web页面校验验证码

    java图形验证码生成工具类 web页面校验验证码 发布于 2020-7-14| 复制链接 摘记: 最近做验证码,参考网上案例,发现有不少问题,特意进行了修改和完善.验证码生成器: ```java i ...

  2. java图形验证码生成工具类

    转载自   java图形验证码生成工具类 生成验证码效果       ValidateCode.java 验证码生成类 package cn.dsna.util.images; import java ...

  3. JAVA接口签名sign生成工具类

    签名规则 1.线下分配appid和appsecret,针对不同的调用方分配不同的appid和appsecret 2.加入timestamp(时间戳),10分钟内数据有效 3.加入流水号nonce(防止 ...

  4. Java:二维码生成工具类

    java 二维码生成工具类 需要引入的maven <!--Java 生成二维码 --> <dependency><groupId>com.google.zxing& ...

  5. java captcha 验证码_验证码图片生成工具类——Captcha.java

    验证码图片生成工具,使用JAVA生成的图片验证码,调用getRandcode方法获取图片验证码,以流的方式传输到前端页面. import java.awt.Color; import java.awt ...

  6. 腾讯开放平台接口鉴权(计算签名)工具类 java版

    腾讯开放平台 接口鉴权(签名)工具类 java版 用到了Hutool工具类 package top.seasmall.platform.core.config.nettyws.util;import ...

  7. 「Java工具类」pdf导出工具类java导出pdf文件工具类

    介绍语 本号主要是Java常用关键技术点,通用工具类的分享:以及springboot+springcloud+Mybatisplus+druid+mysql+redis+swagger+maven+d ...

  8. 密钥生成工具类:RSA2 256位 加解密工具类 RsaUtils

    import java.io.IOException; import java.security.*; import java.security.spec.PKCS8EncodedKeySpec; i ...

  9. 条形码生成工具类实现

    1.pom引用: <!-- 条形码工具类 --> <dependency><groupId>com.google.zxing</groupId>< ...

最新文章

  1. 如果宁静是 Oracle,万茜、张雨绮、黄圣依是什么?
  2. 如何发表cscd核心论文_新手如何发表论文
  3. Elasticsearch--进阶-bool复合查询---全文检索引擎ElasticSearch工作笔记013
  4. HOWTO:InstallShield的Basic MSI工程中如何增加序列号输入选项
  5. matlab 线性方程组 最小二乘解,超定方程组的最小二乘解
  6. 【语义相似度】ESIM:语义相似度领域小模型的尊严
  7. iOS开发中的HTML解析
  8. ajax ----进度条的原理
  9. 自动化信任和依赖对航空安全的危害及其改进
  10. 杂七杂八(4): win10设置启动时创建系统还原点
  11. portknocking(端口试探)简介
  12. 视觉中国图片编码_学习编码第14天的应用视觉设计第4部分
  13. 学会php想转学java好学吗_Java和PHP哪个好学
  14. win11分辨率无法调整_win11系统出现分辨率无法调整怎么解决
  15. 区块链:分布式系统核心技术
  16. SSM (JDK 1.7) 使用Rabbit MQ
  17. 【多元统计分析】因子分析——SPSS上机实验(过程+结果分析)
  18. RabbitMQ狂神说笔记(RabbitMQ B站狂神说笔记、KuangStudy、学相伴飞哥)
  19. Win10系统下Eclipse+ADT+SDK配套安装(避免遇坑)
  20. 习题:编写一个学生和教师数据输入和显示程序,学生数据有编号、姓名、班级和成绩,教师数据有编号、姓名、职称和部门。

热门文章

  1. 又发现了一个Jupyter Notebook的黑科技,Visual Python支持无代码开发
  2. 面对200多人演讲是一种什么体验?
  3. Maven 简介 及 标准的Maven项目结构
  4. 【Stateflow】查找和替换
  5. 如何优雅的写UI——(1)MFC六大核心机制-程序初始化
  6. 魔域无法连接服务器或正在维护,史上最全魔域无法登录或登录超时原因与解决办法...
  7. 题目 1096: Minesweeper
  8. 丰田生产方式和水库模型的类比分析
  9. ai无法启动计算机丢MSVCP100,屌丝一键重装系统之丢失MSVCP100.dll无法启动程序怎么办...
  10. 春夏秋冬-第12届蓝桥杯Scratch选拔赛真题精选