Package org.miaixz.bus.core.data.id
Class UUID
java.lang.Object
org.miaixz.bus.core.data.id.UUID
- All Implemented Interfaces:
Serializable,Comparable<UUID>
提供通用唯一识别码(universally unique identifier)(UUID)实现,UUID表示一个128位的值。
此类拷贝自java.util.UUID,用于生成不带-的UUID字符串
- Generate UUID 不同版本UUID在线生成和参考:Generate UUID
- UUID 的 5 个版本:UUID 5 version 区别
- UUID代码实现参考:sake/uuid4j实现
- UUIDv1: Structure,形如:xxxxxxxx-xxxx-1xxx-yxxx-xxxxxxxxxxxx,UUID v1 表示为 32 个字符的十六进制字符串,分五组显示,并用连字符分隔; 基于时间,同时访问主机的 MAC 地址; generate a time based UUID (V1)
- UUIDv2: Structure,形如:xxxxxxxx-xxxx-2xxx-yxxx-xxxxxxxxxxxx,UUID v2 的结构与其他 UUID 相同;需要 DCE–分布式计算机环境 生成唯一标识符;由于基于计算主机名,有隐私风险,未大规模使用
- UUIDv3: Structure,形如:xxxxxxxx-xxxx-3xxx-yxxx-xxxxxxxxxxxx,UUID v3 的结构与其他 UUID 相同;需要 基于命名·使用MD5哈希加密 生成唯一标识符;
- UUIDv4: Structure,形如:xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx,UUID v4 的结构与其他 UUID 相同,使用最多的版本,使用随机数生成。 默认实现都是该版本; generate a random UUID (V4)
- UUIDv5: Structure,形如:xxxxxxxx-xxxx-5xxx-yxxx-xxxxxxxxxxxx,UUID v5 的结构与其他 UUID 相同,需要根据 基于命名·使用SHA-1哈希加密 生成唯一标识符; generate name based UUID with SHA1 hashing (v5)
- UUIDv6: Structure,形如:xxxxxxxx-xxxx-6xxx-yxxx-xxxxxxxxxxxx,UUID v6 的结构与其他 UUID 相同,与 UUIDv1 的字段兼容版本,结合 UUIDv1 和 UUIDv4 的优点,确保基于时间的自然排序和更好的隐私;
- UUIDv7: Structure,形如:xxxxxxxx-xxxx-7xxx-yxxx-xxxxxxxxxxxx,UUID v7 的结构与其他 UUID 相同,提供了从 Unix Epoch 时间戳派生的时间排序值,以及改进的熵特性。如果可能,建议使用版本 1 和 6; generate a ordered time based UUID (V7)
0xFFFFFFFF00000000 time_low 0x00000000FFFF0000 time_mid 0x000000000000F000 version 0x0000000000000FFF time_hilong 型数据的最低有效位由以下无符号字段组成:
0xC000000000000000 variant 0x3FFF000000000000 clock_seq 0x0000FFFFFFFFFFFF nodevariant 字段包含一个表示 UUID 布局的值。以上描述的位布局仅在 UUID 的 variant 值为 2(表示 Leach-Salz 变体)时才有效。
- Since:
- Java 17+
- Author:
- Kimi Liu
- See Also:
-
Constructor Summary
Constructors -
Method Summary
Modifier and TypeMethodDescriptionint与此 UUID 相关联的时钟序列值。 14 位的时钟序列值根据此 UUID 的 clock_seq 字段构造。clock_seq 字段用于保证在基于时间的 UUID 中的时间唯一性。clockSequence值仅在基于时间的 UUID(其 version 类型为 1)中才有意义。 如果此 UUID 不是基于时间的 UUID,则此方法抛出 UnsupportedOperationException。int将此 UUID 与指定的 UUID 比较。 如果两个 UUID 不同,且第一个 UUID 的最高有效字段大于第二个 UUID 的对应字段,则第一个 UUID 大于第二个 UUID。boolean将此对象与指定对象比较。 当且仅当参数不为null、而是一个 UUID 对象、具有与此 UUID 相同的 varriant、包含相同的值(每一位均相同)时,结果才为true。static UUIDfastUUID()获取类型 4 UUIDv4(伪随机生成的)UUID 的静态工厂。 使用加密的本地线程伪随机数生成器生成该 UUID。static UUIDfromString(String name) 根据toString()方法中描述的字符串标准表示形式创建UUID。long返回此 UUID 的 128 位值中的最低有效 64 位。long返回此 UUID 的 128 位值中的最高有效 64 位。inthashCode()返回此 UUID 的哈希码。static UUIDnameUUIDFromBytes(byte[] name) 根据指定的字节数组获取类型 3 UUIDv3(基于名称的·使用MD5哈希加密)UUID 的静态工厂。longnode()与此 UUID 相关的节点值。 48 位的节点值根据此 UUID 的 node 字段构造。此字段旨在用于保存机器的 IEEE 802 地址,该地址用于生成此 UUID 以保证空间唯一性。 节点值仅在基于时间的 UUID(其 version 类型为 1)中才有意义。 如果此 UUID 不是基于时间的 UUID,则此方法抛出 UnsupportedOperationException。static UUID获取类型 4 UUIDv4(伪随机生成的)UUID 的静态工厂。 使用加密的强伪随机数生成器生成该 UUID。static UUIDrandomUUID(boolean isSecure) 获取类型 4 UUIDv4(伪随机生成的)UUID 的静态工厂。 使用加密的强伪随机数生成器生成该 UUID。static UUIDrandomUUID(Random random) 获取类型 4 UUIDv4(伪随机生成的)UUID 的静态工厂。 使用加密的强伪随机数生成器生成该 UUID。long与此 UUID 相关联的时间戳值。 60 位的时间戳值根据此UUID的 time_low、time_mid 和 time_hi 字段构造。 所得到的时间戳以 100 毫微秒为单位,从 UTC(通用协调时间) 1582 年 10 月 15 日零时开始。 时间戳值仅在在基于时间的 UUID(其 version 类型为 1)中才有意义。 如果此UUID不是基于时间的 UUID,则此方法抛出 UnsupportedOperationException。toString()返回此UUID的字符串表现形式。 UUID 的字符串表示形式由此 BNF 描述:toString(boolean isSimple) 返回此UUID的字符串表现形式。 UUID 的字符串表示形式由此 BNF 描述:intvariant()与此UUID相关联的变体号。变体号描述UUID的布局。 变体号具有以下含意: 0 为 NCS 向后兼容保留 2 IETF RFC 4122(Leach-Salz), 用于此类 6 保留,微软向后兼容 7 保留供以后定义使用intversion()与此UUID相关联的版本号.
-
Constructor Details
-
UUID
public UUID(long mostSigBits, long leastSigBits) 使用指定的数据构造新的 UUID。- Parameters:
mostSigBits- 用于UUID的最高有效 64 位leastSigBits- 用于UUID的最低有效 64 位
-
-
Method Details
-
fastUUID
获取类型 4 UUIDv4(伪随机生成的)UUID 的静态工厂。 使用加密的本地线程伪随机数生成器生成该 UUID。- Returns:
- 随机生成的
UUID
-
randomUUID
获取类型 4 UUIDv4(伪随机生成的)UUID 的静态工厂。 使用加密的强伪随机数生成器生成该 UUID。- Returns:
- 随机生成的
UUID
-
randomUUID
获取类型 4 UUIDv4(伪随机生成的)UUID 的静态工厂。 使用加密的强伪随机数生成器生成该 UUID。- Parameters:
isSecure- 是否使用SecureRandom如果是可以获得更安全的随机码,否则可以得到更好的性能- Returns:
- 随机生成的
UUID
-
randomUUID
获取类型 4 UUIDv4(伪随机生成的)UUID 的静态工厂。 使用加密的强伪随机数生成器生成该 UUID。- Parameters:
random- 随机数生成器- Returns:
- 随机生成的
UUID
-
nameUUIDFromBytes
根据指定的字节数组获取类型 3 UUIDv3(基于名称的·使用MD5哈希加密)UUID 的静态工厂。- Parameters:
name- 用于构造 UUID 的字节数组。- Returns:
- 根据指定数组生成的
UUID
-
fromString
根据toString()方法中描述的字符串标准表示形式创建UUID。- Parameters:
name- 指定UUID字符串- Returns:
- 具有指定值的
UUID - Throws:
IllegalArgumentException- 如果 name 与toString()中描述的字符串表示形式不符抛出此异常
-
getLeastSignificantBits
public long getLeastSignificantBits()返回此 UUID 的 128 位值中的最低有效 64 位。- Returns:
- 此 UUID 的 128 位值中的最低有效 64 位。
-
getMostSignificantBits
public long getMostSignificantBits()返回此 UUID 的 128 位值中的最高有效 64 位。- Returns:
- 此 UUID 的 128 位值中最高有效 64 位。
-
version
public int version()与此UUID相关联的版本号. 版本号描述此UUID是如何生成的。 版本号具有以下含意:- UUIDv1 基于时间的 UUID
- UUIDv2 DCE 安全 UUID
- UUIDv3 基于名称的MD5散列算法的 UUID
- UUIDv4 随机生成的 UUID
- UUIDv5 基于名称的SHA-1散列算法的 UUID
- UUIDv6 基于时间的随机生成的 UUID (UUIDv1 + UUIDv4)
- UUIDv7 基于时间戳Unix epoch的 UUID
- Returns:
- 此
UUID的版本号
-
variant
public int variant()与此UUID相关联的变体号。变体号描述UUID的布局。 变体号具有以下含意:- 0 为 NCS 向后兼容保留
- 2 IETF RFC 4122(Leach-Salz), 用于此类
- 6 保留,微软向后兼容
- 7 保留供以后定义使用
- Returns:
- 此
UUID相关联的变体号
-
timestamp
与此 UUID 相关联的时间戳值。 60 位的时间戳值根据此UUID的 time_low、time_mid 和 time_hi 字段构造。 所得到的时间戳以 100 毫微秒为单位,从 UTC(通用协调时间) 1582 年 10 月 15 日零时开始。 时间戳值仅在在基于时间的 UUID(其 version 类型为 1)中才有意义。 如果此UUID不是基于时间的 UUID,则此方法抛出 UnsupportedOperationException。- Returns:
- 时间戳值
- Throws:
UnsupportedOperationException- 如果此UUID不是 version 为 1 的 UUID。
-
clockSequence
与此 UUID 相关联的时钟序列值。 14 位的时钟序列值根据此 UUID 的 clock_seq 字段构造。clock_seq 字段用于保证在基于时间的 UUID 中的时间唯一性。clockSequence值仅在基于时间的 UUID(其 version 类型为 1)中才有意义。 如果此 UUID 不是基于时间的 UUID,则此方法抛出 UnsupportedOperationException。- Returns:
- 此
UUID的时钟序列 - Throws:
UnsupportedOperationException- 如果此 UUID 的 version 不为 1
-
node
与此 UUID 相关的节点值。 48 位的节点值根据此 UUID 的 node 字段构造。此字段旨在用于保存机器的 IEEE 802 地址,该地址用于生成此 UUID 以保证空间唯一性。 节点值仅在基于时间的 UUID(其 version 类型为 1)中才有意义。 如果此 UUID 不是基于时间的 UUID,则此方法抛出 UnsupportedOperationException。- Returns:
- 此
UUID的节点值 - Throws:
UnsupportedOperationException- 如果此 UUID 的 version 不为 1
-
toString
返回此UUID的字符串表现形式。 UUID 的字符串表示形式由此 BNF 描述:UUID = <time_low>-<time_mid>-<time_high_and_version>-<variant_and_sequence>-<node> time_low = 4*<hexOctet> time_mid = 2*<hexOctet> time_high_and_version = 2*<hexOctet> variant_and_sequence = 2*<hexOctet> node = 6*<hexOctet> hexOctet = <hexDigit><hexDigit> hexDigit = [0-9a-fA-F] -
toString
返回此UUID的字符串表现形式。 UUID 的字符串表示形式由此 BNF 描述:UUID = <time_low>-<time_mid>-<time_high_and_version>-<variant_and_sequence>-<node> time_low = 4*<hexOctet> time_mid = 2*<hexOctet> time_high_and_version = 2*<hexOctet> variant_and_sequence = 2*<hexOctet> node = 6*<hexOctet> hexOctet = <hexDigit><hexDigit> hexDigit = [0-9a-fA-F]- Parameters:
isSimple- 是否简单模式,简单模式为不带'-'的UUID字符串- Returns:
- 此
UUID的字符串表现形式
-
hashCode
public int hashCode()返回此 UUID 的哈希码。 -
equals
将此对象与指定对象比较。 当且仅当参数不为null、而是一个 UUID 对象、具有与此 UUID 相同的 varriant、包含相同的值(每一位均相同)时,结果才为true。 -
compareTo
将此 UUID 与指定的 UUID 比较。 如果两个 UUID 不同,且第一个 UUID 的最高有效字段大于第二个 UUID 的对应字段,则第一个 UUID 大于第二个 UUID。- Specified by:
compareToin interfaceComparable<UUID>- Parameters:
val- 与此 UUID 比较的 UUID- Returns:
- 在此 UUID 小于、等于或大于 val 时,分别返回 -1、0 或 1。
-