UUID

UUID-><,16 bytes,>
-><most significant long,8 bytes,><least significant long,8 bytes,>


most significant long-><,8 bytes,>
-><time_low,4 bytes,><time_mid,2 bytes,><version,4 bits,第49-52位><time_hi,12 bits,>
time_low->
time_mid->
version-><0001,,Time-based UUID(1)>|<0010,,DCE security UUID(2)>|<0011,,Name-based UUID(3)>|<0100,,Randomly generated UUID(4)>


time_hi->

UUID中的时间戳表示1582年10月15号午夜即晚上12点(UTC时间)到现在的100纳秒数。
0x(time_hi + time_mid + time_low)
只针对Time-based UUID(1)有效


least significant long-><,8 bytes,>
-><variant,1-3 bits,第1-3位><clock_seq,14 bits,第3-16位><node,6 bytes,共48位>
variant -> <0(0),1 bit,>|<2(10),2 bits,>|<6(110),3 bits,>|<7(111),3 bits,>

clock_seq->只针对Time-based UUID(1)有效
node->只针对Time-based UUID(1)有效


variant:
0(0)、2(10)、6(110)、7(111)
0: 预留(Reserved for NCS backward compatibility)
2: Leach-Salz变体,又叫IETF变体(The IETF aka Leach-Salz variant)
6: 预留(Reserved, Microsoft backward compatibility)
7: 预留(Reserved for future definition.)

Leach-Salz


版本号:
Time-based UUID(1)、DCE security UUID(2)、Name-based UUID(3)、Randomly generated UUID(4)


参考java.util.UUID#nameUUIDFromBytes的实现
给定一个字符串
计算MD5值
设置version为3(0011,most significant long中的第49-52位)
设置variant为2(10,least significant long中的第1-2位)


参考java.util.UUID#randomUUID的实现
通过SecureRandom随机生成一个16字节组,这16字节组看成是前面8字节组和后面8字节组组成。前面8字节组为most significant long,后面8字节组为least significant long
设置version为4(0100,most significant long中的第49-52位)
设置variant为2(10,least significant long中的第1-2位)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值