📋 目录
一、工具类功能
输出 RFC 4122 第 4 类随机 UUID 的三种字符串形态:36 位带中划线小写、32 位去中划线小写、32 位去中划线大写,给不需要排序也不需要人工可读的唯一标识用。
二、所需环境
JDK 17或以上
三、方法与调用示例(按需调用)
🔢 方法序号:1
🎯 方法用途:
- 生成 36 位小写带中划线的标准 UUID,能直接交给
UUID.fromString解回对象 - 全局唯一标识、幂等键、链路追踪 ID 这类不需要排序的场景用这一版
🧩 方法定义:public static String uuid()
🗣️ 入参解释:public static String uuid()
📤 返回值解释:String,形如 xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx 的 36 位小写串
💡 边界口径:
- 统一走
UUID.randomUUID(),随机数来自加密安全随机数发生器,产出的都是 version 4、变体 IETF - 无入参、不抛异常,可并发调用
- 它是随机串不是趋势递增串,当需要排序的主键用会带来索引随机写,要趋势递增请改用雪花 ID
- 碰撞概率极低,批量生成不必自己去重
🧪 方法示例:
uuid()拿到9d9d0cb3-fd25-4279-8866-3265e0950557,长度 36- 连跑 1000 次
uuid().matches("[0-9a-f]{8}-[0-9a-f]{4}-4[0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}")拿到true,版本位固定是 4 UUID.fromString(uuid())拿到version=4,variant=2,2 就是 IETF 变体- 连发 100000 条去重,拿到
100000,没有碰撞 - 相邻两次
uuid()做等值比较,拿到false
🔢 方法序号:2
🎯 方法用途:
- 生成去掉中划线的 32 位小写 UUID,字段宽度受限、单号列宽只给 32 时用
- 存库、拼进流水号这类不需要人眼分段的场合比 36 位形态省 4 个字符
🧩 方法定义:public static String uuid32()
🗣️ 入参解释:public static String uuid32()
📤 返回值解释:String,32 位小写十六进制串
💡 边界口径:
- 只是去掉 4 个中划线,字符无损,按 8-4-4-4-12 插回中划线就能还原成标准形态
- 保持小写,要大写走
uuid32Upper() - 随机强度与标准形态一致,都是 version 4 的随机 UUID
🧪 方法示例:
uuid32()拿到7d16b54aa1c0450d9e58ba065821486c,长度 32- 插回中划线后拿到
7d16b54a-a1c0-450d-9e58-ba065821486c,可以直接解析 - 连跑 1000 次
uuid32().matches("[0-9a-f]{32}")拿到true - 同一批取样 1000 条去重,拿到
取样 1000 条去重后 1000 条
🔢 方法序号:3
🎯 方法用途:
- 生成去中划线并转大写的 32 位 UUID,对接要求大写单号的老系统时用
- 银行、保险这类老接口里的流水号字段常是大写形态
🧩 方法定义:public static String uuid32Upper()
🗣️ 入参解释:public static String uuid32Upper()
📤 返回值解释:String,32 位大写十六进制串
💡 边界口径:
- 转大写显式按
Locale.ROOT做,不受系统区域设置的字符映射影响 - 大小写只是展示形态,信息量与 32 位小写一致,
toLowerCase后同值可比 - 要解回
UUID得先转小写再按 8-4-4-4-12 补中划线
🧪 方法示例:
uuid32Upper()拿到B97EEE4A49EC415EAD4A221642DA8C0C- 连跑 1000 次
uuid32Upper().matches("[0-9A-F]{32}")拿到true uuid32Upper().toLowerCase().length()拿到32,转回小写长度不变- 同一串大写形态转回小写再与标准形态比对,拿到
true
四、工具类源码(可直接复制)
📦 源码文件