uuid会重复吗_UUID的版本你知道吗

UUID是什么

UUID的全称为:Universally Unique IDentifier,也被称为GUID(Globally Unique IDentifier)。是一种由算法生成的唯一标识,它实质上是一个128位长的二进制整数。通常表示成32个16进制数组成的字符串,如:21EC2020-3AEA-1069-A2DD-08002B30309D。关于UUID标准的rfc定义详见:http://www.ietf.org/rfc/rfc4122.txt。 当然,GUID一词有时也专指微软对UUID标准的实现,用于Windows操作系统中。

UUID的实现

UUID的格式是这样的:xxxxxxxx-xxxx-Mxxx-Nxxx-xxxxxxxxxxxx,一共为32个16进制数。
M那个位置,代表版本号,目前UUID的标准实现有5个版本,所以只会是1,2,3,4,5
N那个位置,只会是8,9,a,b

UUID的具体实现存在多个版本,分别为:

V1. 基于时间的UUID

基于时间的UUID通过计算当前时间戳、随机数和机器MAC地址得到。由于在算法中使用了MAC地址,这个版本的UUID可以保证在全球范围的唯一性。但与此同时,使用MAC地址会带来安全性问题,这就是这个版本UUID受到批评的地方。如果应用只是在局域网中使用,也可以使用退化的算法,以IP地址来代替MAC地址。

V2. DCE(Distributed Computing Environment)安全的UUID

和基于时间的UUID算法相同,但会把时间戳的前4位置换为POSIX的UID或GID,这个版本的UUID在实际中较少用到。

V3. 基于名称空间的UUID(MD5)

基于名称的UUID通过计算名称和名称空间的MD5散列值得到,这个版本的UUID保证了:相同名称空间中不同名称生成的UUID的唯一性;不同名称空间中的UUID的唯一性;相同名称空间中相同名称的UUID重复生成是相同的。

V4. 基于随机数的UUID

根据随机数,或者伪随机数生成UUID。这种UUID产生重复的概率是可以计算出来的,但随机的东西就像是买彩票:你指望它发财是不可能的,但狗屎运通常会在不经意中到来。可能在测试的时候多线程并发也不见得出现重复,但是却不能保证系统正式上线之后不会出现不重复的UUID,特别是在分布式系统中。

V5. 基于名称空间的UUID(SHA1)

和版本3的UUID算法类似,只是散列值计算使用SHA1(Secure Hash Algorithm 1)算法。

Java中的实现

在Java中默认实现了基于名称空间的UUID(UUID Version 3)和基于伪随机数的UUID(UUID Version 4):

java.util.UUID

407fdb944a89bc7aa27eed915cbddc17.png

e95dcdaae7c721d2810f1577b93e1777.png

除了Java默认的实现之外,还有一个开源的UUID实现库可以参考:https://github.com/cowtowncoder/java-uuid-generator, 这个库支持实现UUID的V1,V3,V4和V5版本。

相关文章

一文读懂支付业务设计包含流程、资金流转......

一文帮你全面了解银行Ⅰ类、Ⅱ类、Ⅲ类账户

Spring Cloud核心组件,快速搭建分布式平台

通过幂等保障分布式、高并发系统的数据一致性

Spring事务控制的深度介绍

MySQL binlog数据库同步技术总结

Java多线程同步等待工具类CountDownLatch

全面的介绍银行存款业务,让你一目了然

网联支付清算平台架构,支撑起亿级交易量....

金融系统模型之交易、户账、总账

金融结算系统的基础业务之账户体系

国际金融互联报文规范SWIFT之银行识别代码

人民银行现代化支付系统CNAPS行号介绍

大家总说的银行日终批处理到底做了些什么


能纸笔安天下,武能马定乾坤

e473f1abf9c909a7d36c68e4ec6f0ecd.png

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值