NanoIdUtil NanoID 生成器
📦 包路径:
top.csaf.id.NanoIdUtil🔗 所属模块:
zutil-all
NanoID 是一个轻量级、安全、URL 友好的唯一字符串 ID 生成器。 相较于 UUID,NanoID 体积更小(默认 21 位),但拥有相似的碰撞概率。
✨ 核心特性
- 安全: 默认使用
SecureRandom生成,适合用于集群环境。 - 紧凑: 默认长度 21 个字符,使用 URL 友好的符号(
A-Za-z0-9_-)。 - 灵活: 支持自定义长度、自定义字典(Alphabet)和自定义随机源。
🚀 方法概览
| 方法名 | 描述 | 输出示例 |
|---|---|---|
randomNanoId() | 生成默认 NanoID (21位, 标准字典) | "V1StGXR8_Z5jdHi6B-myT" |
randomNanoId(int size) | 生成指定长度的 NanoID | "xR8_Z5" (size=6) |
randomNanoId(int size, char[] alphabet) | 使用自定义字典生成 | "852963" (纯数字) |
📝 详细用法
1. 默认生成
生成标准的 21 位 NanoID,包含字母、数字、下划线和短横线。
String id = NanoIdUtil.randomNanoId();
// -> "ku-q5mj98cav-1_592s.."
2. 指定长度
如果你需要更短或更长的 ID,可以指定长度。
// 生成 10 位 ID
String shortId = NanoIdUtil.randomNanoId(10);
3. 自定义字典 (验证码场景)
可以限制字符集,例如仅生成数字 ID,或者移除容易混淆的字符(如 l 和 1)。
// 仅生成 6 位数字 ID
String numId = NanoIdUtil.randomNanoId(6, "0123456789".toCharArray());
// 生成自定义字符集的 ID
char[] alphabet = "1234567890abcdef".toCharArray();
String customId = NanoIdUtil.randomNanoId(16, alphabet);
4. 高级用法 (自定义随机源)
如果你对性能有极致要求且不在意安全性(例如非加密场景),可以传入普通的 Random 对象。
// 使用普通 Random (速度更快,但非加密安全)
Random random = new Random();
String fastId = NanoIdUtil.randomNanoId(21, NanoIdUtil.DEFAULT_ALPHABET, random);