跳到主要内容

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,或者移除容易混淆的字符(如 l1)。

// 仅生成 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);