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
和N
M
的意思是表示UUID的版本,不同的版本生成UUID的方式不同
N
是变体的意思:为了能兼容过去的 UUID,以及应对未来的变化,因此有了变体(Variants)这一概念,值只会是8,9,a,b
其中一个采用版本4,利用随机性生成
UUID uuid = UUID.randomUUID();
System.out.println(uuid.toString());
// bddaf695-f393-498f-9230-73c399988c9c
采用版本3,利用名称生成,只要有用户的唯一性信息。就能保证此用户的uuid的唯一性,例如(身份证号等)
UUID uuid = UUID.nameUUIDFromBytes("12345678".getBytes());
System.out.println(uuid.toString());
// 25d55ad2-83aa-300a-b464-c76d713c07ad