📋 目录
一、工具类功能
按指定长度和字符集生成随机字符串,默认大小写字母加数字共 62 个字符,随机源是 SecureRandom,验证码、邀请码、盐值这类随机串直接拿来用。
二、所需环境
JDK 17或以上
三、方法与调用示例(按需调用)
🔢 方法序号:1
🎯 方法用途:
- 在默认的 62 个字符(大小写字母加数字)里随机取满指定位数
- 临时口令、文件随机后缀这类只要「不好猜」的场合用它
🧩 方法定义:public static String generate(int length)
🗣️ 入参解释:public static String generate(长度)
📤 返回值解释:String,指定长度的随机串,大小写与数字都可能出现
💡 边界口径:
- 随机源是类内静态共享的
SecureRandom,加密强度且线程安全,可并发调用 - 下标由
nextInt生成,不做位运算取模,没有取模偏差 - 每次独立取样,不去重,不保证唯一
length必须大于 0,否则抛IllegalArgumentException
🧪 方法示例:
generate(16)拿到N6PVsl9cOaUHKdiN,长度 16- 同样长度调用两次比是否相同,拿到
false generate(0)抛length 必须大于 0,实际为: 0
🔢 方法序号:2
🎯 方法用途:
- 生成纯数字串,短信验证码、支付密码键盘这类只认数字的场景
- 结果按字符串给,首位可以是 0,不参与数值运算
🧩 方法定义:public static String generateDigits(int length)
🗣️ 入参解释:public static String generateDigits(长度)
📤 返回值解释:String,指定长度的数字串,首位可为 0
💡 边界口径:
- 是数字串不是整数,别转成
int或long存,20 位连long都装不下 - 首位为 0 是正常结果,判重与比较都要按字符串做
- 字符集是完整的 0 到 9,没有剔除易混数字
- 参数校验与
generate(int)一致
🧪 方法示例:
generateDigits(6)拿到078418,首位就是 0- 跑 2000 次统计首位为 0 的次数,拿到
214 次,首位 0 出现得很常规 generateDigits(20)拿到86716898581329239360,20 位已经超出long范围
🔢 方法序号:3
🎯 方法用途:
- 在自定义字符集里随机取值,把取值范围收窄到不会引起歧义的字符
- 邀请码、短链码这类要人工抄写的串用它,字符集自己定
🧩 方法定义:public static String generate(int length, String alphabet)
🗣️ 入参解释:public static String generate(长度, 候选字符集)
📤 返回值解释:String,只由候选字符集里的字符组成的随机串
💡 边界口径:
- 字符集按 Unicode 码点展开,含 Emoji 等增补字符也不会产出半个代理对
- 字符集只有一个字符时退化成把它重复
length遍 - 组合数是「字符集大小 的 length 次方」,去重必须业务自己判,随机数自带不了唯一性
alphabet为 null 抛NullPointerException,为空串抛IllegalArgumentException
🧪 方法示例:
- 32 个字符的邀请码集
generate(8, INVITE_ALPHABET)拿到RZQHRGYZ,是否全在候选集内为true - 字符集含 Emoji 时
generate(6, emojiAlphabet)拿到6 个码点的串长度是 8,串里没有孤立代理项 - 字符集只给一个字符时
generate(5, "x")拿到xxxxx - 32 个字符取 4 位生成 10 万个码,重复数量拿到
4602 个,唯一性必须业务侧判重 generate(6, "")抛alphabet 不能为空generate(6, null)抛alphabet 不能为 null
四、工具类源码(可直接复制)
📦 源码文件