介绍
UUID(Universally Unique Identifier,通用唯一识别码),由32位16进制数字构成,二进制共128位。
其目的是让分布式系统中的所有元素都能有唯一的识别信息。如此一来,每个人都可以创建不与其它人冲突的 UUID。
组成
UUID共有5部分组成:xxxxxxxx-xxxx-Mxxx-Nxxx-xxxxxxxxxxxx
,表现形式为8-4-4-4-12的32个字符。
如:df623885-68f9-47e0-b13c-bbd9600b6e71
- 16进制数字
M
表示UUID版本,当前有5个版本:1,2,3,4,5。这5个版本使用不同算法,利用不同的信息产生UUID,各版本有各自优势,适用于不同情景。具体使用的信息:
- version 1, date-time & MAC address,当前时间戳 + MAC地址信息 生成
- 机器的MAC地址出厂后不能保证完全唯一,且之后 MAC 地址也可手动修改;
- MAC 地址的暴露会造成了隐私与安全问题;
- 若一台机子上的两个进程同时跑,有可能出现重复问题。
- version 2, date-time & group/user id
- version 3, MD5 hash & namespace
- version 4, pseudo-random number,伪随机数信息 生成,最频繁使用
- version 5, SHA-1 hash & namespace
- 16进制数字
N
的二进制位一至四个最高有效位表示UUID变体(variant),有固定的两位10xx
因此只可能取值8, 9, a, b - 因为时间戳和随机数的唯一性,版本1和版本4总是生成唯一的标识符。若希望对给定的一个字符串总是能生成相同的 UUID,使用版本3或版本5。
Java实现
java.util.UUID
封装了UUID的实现,来看看其中方法:
/**
* Static factory to retrieve a type 4 (pseudo randomly generated) UUID.
*
* The {@code UUID} is generated using a cryptographically strong pseudo
* random number generator.
*
* @return A randomly generated {@code UUID}
*/
public static UUID