跳过正文
  1. 文章/
  2. Java/
  3. 常用API/
  4. JDK原生/

6、UUID

·691 字·2 分钟· loading · loading · ·
Java 常用API JDK原生
GradyYoung
作者
GradyYoung
JDK原生 - 点击查看当前系列文章
§ 6、UUID 「 当前文章 」

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的格式,其中有两个字母MN
    • M的意思是表示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
JDK原生 - 点击查看当前系列文章
§ 6、UUID 「 当前文章 」