通用唯一识别码:UUID
1月 5, 2022
UUID(Universally Unique Identifier,通用唯一识别码)的格式基本上是统一的,遵循一定的标准。最常见的 UUID 表示形式是由 3 2个十六进制数字组成,分为五组,这些组通过连字符(-)分隔,形式如下:
8-4-4-4-12
具体来说,一个标准的UUID看起来像这样:
123e4567-e89b-12d3-a456-426614174000
这个格式是由 RFC 4122 定义的,它规定了几种不同的 UUID 版本,每种版本有其生成方法,分别对应于不同的UUID生成规则,下面详细对比下。
UUID各版本优缺点 #
版本 1 #
基于时间的 UUID,主要依赖当前的时间戳及机器 MAC 地址,因此可以保证全球唯一性。
- 优点:能基本保证全球唯一性
- 缺点:使用了 MAC 地址,因此会暴露 MAC 地址和生成时间
版本 2 #
分布式安全的 UUID:将版本1的时间戳前四位换为 POSIX 的 UID 或 GID,很少使用
- 优点:能保证全球唯一性
- 缺点:很少使用,常用库基本没有实现
版本 3 #
基于名字空间的 UUID(MD5 版):基于指定的名字空间/名字生成 MD5 散列值得到,标准不推荐
- 优点:不同名字空间或名字下的 UUID 是唯一的;相同名字空间及名字下得到的 UUID 保持重复。
- 缺点:MD5 碰撞问题,只用于向后兼容,后续不再使用
版本 4 #
基于随机数的 UUID:基于随机数或伪随机数生成
- 优点:实现简单
- 缺点:重复几率可计算
版本 5 #
基于名字空间的 UUID(SHA1 版):将版本3的散列算法改为 SHA1
- 优点:不同名字空间或名字下的 UUID 是唯一的;相同名字空间及名字下得到的 UUID 保持重复。
- 缺点:SHA1计算相对耗时
总结 #
版本 1/2 适用于需要高度唯一性且无需重复的场景;
版本 3/5 适用于一定范围内唯一且需要或可能会重复生成 UUID 的环境下;
版本 4 适用于对唯一性要求不太严格且追求简单的场景。