随机密码生成工具类(java)
实现为用户生成随机密码需求,类似如下:
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)相关推荐
- java 图形校验_java图形验证码生成工具类 web页面校验验证码
java图形验证码生成工具类 web页面校验验证码 发布于 2020-7-14| 复制链接 摘记: 最近做验证码,参考网上案例,发现有不少问题,特意进行了修改和完善.验证码生成器: ```java i ...
- java图形验证码生成工具类
转载自 java图形验证码生成工具类 生成验证码效果 ValidateCode.java 验证码生成类 package cn.dsna.util.images; import java ...
- JAVA接口签名sign生成工具类
签名规则 1.线下分配appid和appsecret,针对不同的调用方分配不同的appid和appsecret 2.加入timestamp(时间戳),10分钟内数据有效 3.加入流水号nonce(防止 ...
- Java:二维码生成工具类
java 二维码生成工具类 需要引入的maven <!--Java 生成二维码 --> <dependency><groupId>com.google.zxing& ...
- java captcha 验证码_验证码图片生成工具类——Captcha.java
验证码图片生成工具,使用JAVA生成的图片验证码,调用getRandcode方法获取图片验证码,以流的方式传输到前端页面. import java.awt.Color; import java.awt ...
- 腾讯开放平台接口鉴权(计算签名)工具类 java版
腾讯开放平台 接口鉴权(签名)工具类 java版 用到了Hutool工具类 package top.seasmall.platform.core.config.nettyws.util;import ...
- 「Java工具类」pdf导出工具类java导出pdf文件工具类
介绍语 本号主要是Java常用关键技术点,通用工具类的分享:以及springboot+springcloud+Mybatisplus+druid+mysql+redis+swagger+maven+d ...
- 密钥生成工具类:RSA2 256位 加解密工具类 RsaUtils
import java.io.IOException; import java.security.*; import java.security.spec.PKCS8EncodedKeySpec; i ...
- 条形码生成工具类实现
1.pom引用: <!-- 条形码工具类 --> <dependency><groupId>com.google.zxing</groupId>< ...
最新文章
- 如果宁静是 Oracle,万茜、张雨绮、黄圣依是什么?
- 如何发表cscd核心论文_新手如何发表论文
- Elasticsearch--进阶-bool复合查询---全文检索引擎ElasticSearch工作笔记013
- HOWTO:InstallShield的Basic MSI工程中如何增加序列号输入选项
- matlab 线性方程组 最小二乘解,超定方程组的最小二乘解
- 【语义相似度】ESIM:语义相似度领域小模型的尊严
- iOS开发中的HTML解析
- ajax ----进度条的原理
- 自动化信任和依赖对航空安全的危害及其改进
- 杂七杂八(4): win10设置启动时创建系统还原点
- portknocking(端口试探)简介
- 视觉中国图片编码_学习编码第14天的应用视觉设计第4部分
- 学会php想转学java好学吗_Java和PHP哪个好学
- win11分辨率无法调整_win11系统出现分辨率无法调整怎么解决
- 区块链:分布式系统核心技术
- SSM (JDK 1.7) 使用Rabbit MQ
- 【多元统计分析】因子分析——SPSS上机实验(过程+结果分析)
- RabbitMQ狂神说笔记(RabbitMQ B站狂神说笔记、KuangStudy、学相伴飞哥)
- Win10系统下Eclipse+ADT+SDK配套安装(避免遇坑)
- 习题:编写一个学生和教师数据输入和显示程序,学生数据有编号、姓名、班级和成绩,教师数据有编号、姓名、职称和部门。
热门文章
- 又发现了一个Jupyter Notebook的黑科技,Visual Python支持无代码开发
- 面对200多人演讲是一种什么体验?
- Maven 简介 及 标准的Maven项目结构
- 【Stateflow】查找和替换
- 如何优雅的写UI——(1)MFC六大核心机制-程序初始化
- 魔域无法连接服务器或正在维护,史上最全魔域无法登录或登录超时原因与解决办法...
- 题目 1096: Minesweeper
- 丰田生产方式和水库模型的类比分析
- ai无法启动计算机丢MSVCP100,屌丝一键重装系统之丢失MSVCP100.dll无法启动程序怎么办...
- 春夏秋冬-第12届蓝桥杯Scratch选拔赛真题精选