今天生成的密码长度为8-16位,需要包含数字、大写和小写3个字符,被要求生成初始密码。
平常都是使用hutool工具类进行字符处理,所以本次就基于hutool进行实现需求。hutool官方文档参考地址:,hutool里面封装的方法很多,基本上能覆盖平常常用的方法,省去了自己封装工具类的过程,所以推荐使用!
发现hutool并没有提供完全满足要求的方法,自己就根据现有的方法进行封装实现这个需求.具体处理过程如下:
首先需要引入的hutool依赖:
<dependency> <groupId>cn.hutool</groupId> <artifactId>hutool-all</artifactId> <version>5.8.2</version> </dependency>
第一步实际需要做的处理就是在给定的字符串信息中选择生成8-16位随机字符,可以使用RandomU(String baseString, int length)进行实现;该方法实现的原理如下:
/** * 获得一个随机的字符串 * * @param baseString 随机字符选取的样本 * @param length 字符串的长度 * @return 随机字符串 */ public static String randomString(String baseString, int length) { if (baseString)) { return S; } final StringBuilder sb = new StringBuilder(length); if (length < 1) { length = 1; } int baseLength = ba(); for (int i = 0; i < length; i++) { int number = randomInt(baseLength); (number)); } return (); }
第二步是校验生成的随机数中是否包含数字、大小写的字符,可以使用S(CharSequence str, CharSequence... testStrs)实现,实现原理如下:
/** * 查找指定字符串是否包含指定字符串列表中的任意一个字符串 * * @param str 指定字符串 * @param testStrs 需要检查的字符串数组 * @return 是否包含任意一个字符串 * @since 3.2.0 */ public static boolean containsAny(CharSequence str, CharSequence... testStrs) { return null != getContainsStr(str, testStrs); }
/** * 查找指定字符串是否包含指定字符串列表中的任意一个字符串,如果包含返回找到的第一个字符串 * * @param str 指定字符串 * @param testStrs 需要检查的字符串数组 * @return 被包含的第一个字符串 * @since 3.2.0 */ public static String getContainsStr(CharSequence str, CharSequence... testStrs) { if (isEmpty(str) || ArrayU(testStrs)) { return null; } for (CharSequence checkStr : testStrs) { if ().contains(checkStr)) { return c(); } } return null; }
对以上两个方法进行组装之后即可满足业务要求,注意生成的随机数必须包含三种字符,所以需要对生成的随机信息进行校验,如果不满足要求则继续生成。实现代码如下:
public class TestRandom{ private static final String upperStr="ABCDEFGHIJKLMNOPQRSTUVWXYZ"; private static final String lowerStr="abcdefghijklmnopqrstuvwxyz"; private static final String numStr="1234567890"; public static void main(String[] args) { String randomString=""; // 校验生成的随机数是否包含数字、大小写字母,如果不包含就重新生成。 while (!(randomString,upperArray) && S(randomString,lowerArray) && S(randomString,numArray))){ // 生成8到17之间的随机整数(包含8不包含17) int randomInt = RandomU(8, 17); randomString = RandomU(upperStr + lowerStr + numStr, randomInt); } Sy(randomString); } }
上面是全部实现过程,大家也可以使用原生的方法进行实现,hutool提供的工具类只不过是在原生方法基础上封装了一下.对于要求生成其他格式的字符串需求可以参考上述方案进行实现!
—— END ——
作者| 卖柴火的小男孩啊
多年后端开发经验,坚持分享更多java干货内容!
如果你喜欢我的文章,不妨点赞、转发、收藏一下哦!
1.《几行代码搞定生成符合要求的随机密码,快来看看是否和你想的一样?》援引自互联网,旨在传递更多网络信息知识,仅代表作者本人观点,与本网站无关,侵删请联系页脚下方联系方式。
2.《几行代码搞定生成符合要求的随机密码,快来看看是否和你想的一样?》仅供读者参考,本网站未对该内容进行证实,对其原创性、真实性、完整性、及时性不作任何保证。
3.文章转载时请保留本站内容来源地址,https://www.lu-xu.com/gl/3142174.html