java.util.UUID #
什么是UUID #
UUID是国际标准化组织(ISO)提出的一个概念。这个数值可以通过一定的算法计算出来。为了提高效率,常用的UUID可缩短至16位。UUID用来识别属性类型,在所有空间和时间上被视为唯一的标识。一般来说,可以保证这个值是真正唯一的任何地方产生的任意一个UUID都不会有相同的值。UUID是基于当前时间、计数器(counter)和硬件标识(通常为无线网卡的MAC地址)等数据计算生成的。
UUID是由一组32位数的16进制数字所构成,UUID的标准型式包含32个16进制数字,以连字号分为五段,形式为8-4-4-4-12的32个字符,如
550e8400-e29b-41d4-a716-446655440000
xxxxxxxx-xxxx-Mxxx-Nxxx-xxxxxxxxxxxx是UUID的格式,其中有两个字母M和NM的意思是表示UUID的版本,不同的版本生成UUID的方式不同- M = 1,版本1,UUID根据时间和设备MAC地址生成
- M = 2,版本2,UUID根据标识符(通常是组或用户 ID)、时间和节点 ID生成的
- M = 3,版本3,UUID通过散列(MD5 作为散列算法)名字空间(namespace)标识符和名称生成的
- M = 4,版本4,UUID使用随机性或为随机性生成(Java默认)
- M = 5,版本5,与版本3相同,只不过算法换成了SHA1
N是变体的意思:为了能兼容过去的 UUID,以及应对未来的变化,因此有了变体(Variants)这一概念,值只会是8,9,a,b其中一个
使用方法 #
randomUUID() #
采用版本4,利用随机性生成
UUID uuid = UUID.randomUUID();
System.out.println(uuid.toString());
// bddaf695-f393-498f-9230-73c399988c9c
nameUUIDFromBytes() #
采用版本3,利用名称生成,只要有用户的唯一性信息。就能保证此用户的uuid的唯一性,例如(身份证号等)
UUID uuid = UUID.nameUUIDFromBytes("12345678".getBytes());
System.out.println(uuid.toString());
// 25d55ad2-83aa-300a-b464-c76d713c07ad