UUID生成方法

UUID生成方法有时间、名称、随机数三种策略
基于时间的UUID生成算法(版本1)
确定UTC时间(60位 Time)和时间序列值(14位 ClockSequence);
设置TimeLow(对应Time的31-0位);
设置TimeMid(对应Time的47-32位);
设置VersionAndTimeHigh(4位版本号及Time的59-48位);
设置VariantAndClockSeqHigh(变体位及对应ClockSequence的13-8位);
设置ClockSeqLow(对应ClockSequence的7-0位);
设置Node(对应48位MAC地址)。
UUID生成方法
UUID生成方法
 基于名称的UUID生成算法(版本3和版本5)
针对相应的命名空间(如DNS、URL、OID等)分配一个UUID作为所有UUID的命名空间标识;
将名称转换为字节数列;
使用MD5或SHA-1算法对与名称关联的命名空间标识进行计算,产生16字节哈希结果;
设置TimeLow(对应哈希值的3-0字节);
设置TimeMid(对应哈希值的5-4字节);
设置VersionAndTimeHigh(对应哈希值的7-6字节),以相应版本号重写对应位(第9字节的高4位);
设置VariantAndClockSeqHigh(对应哈希值的第8字节),重写变体对应位(第7字节的高2位,本标准对应值为10);
设置ClockSeqLow(对应哈希值的第9字节);
设置Node(对应哈希值的15-10字节)。
由于SHA-1哈希结果为160位(20字节),本算法中,需要将FIPS PUB 180-2中的SHA-1算法的哈希值字节顺序反转(字节内顺序不变),UUID使用其15-0字节,19-16字节被丢弃
UUID生成方法
 UUID生成方法
UUID生成方法
UUID生成方法
基于随机数的UUID生成算法(版本4)
设置VariantAndClockSeqHigh的变体位值为10;
设置VersionAndTimeHigh的4位版本号;
设置剩余位为随机值。
本文中讨论的密码学随机数,主要根据系统可以提供的信息(内存、硬盘、句柄、程序运行的线程、进程、句柄、堆栈等),利用SHA-1等哈希算法得到。
UUID生成方法
UUID生成方法
UUID生成方法