UUID

阅读更多

UUID-><,16 bytes,>
          ->










most significant long-><,8 bytes,>
                                     ->
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 -> <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位)

你可能感兴趣的:(UUID)