From 9c3dc22a37737c95cf07af5a75579e017c945c53 Mon Sep 17 00:00:00 2001
From: dazer007
Date: Mon, 15 Jan 2024 09:08:10 +0000
Subject: [PATCH] =?UTF-8?q?!1151=20=E8=BD=BB=E9=87=8F=E7=BA=A7=E4=BF=AE?=
=?UTF-8?q?=E6=94=B9=EF=BC=9AUUID=E6=B3=A8=E9=87=8A=E4=BF=AE=E6=94=B9=20*?=
=?UTF-8?q?=20=E6=B3=A8=E9=87=8A=E5=A2=9E=E5=8A=A0=E4=BB=A3=E7=A0=81?=
=?UTF-8?q?=E5=AE=9E=E7=8E=B0=E5=8F=82=E8=80=83=20*=20=E6=B3=A8=E9=87=8A?=
=?UTF-8?q?=EF=BC=8C=E5=A2=9E=E5=8A=A0=E7=AE=80=E6=B4=81=E8=8B=B1=E6=96=87?=
=?UTF-8?q?=20*=20=E4=BF=AE=E6=94=B9=EF=BC=9AnameUUIDFromBytes=20=E6=B3=A8?=
=?UTF-8?q?=E9=87=8A=20*=20UUID=E4=BB=8Ev1->v7=EF=BC=8C=E8=B6=8A=E6=9D=A5?=
=?UTF-8?q?=E8=B6=8A=E5=A4=8D=E6=9D=82=EF=BC=8C=E6=96=B0=E6=89=8B=E5=BE=88?=
=?UTF-8?q?=E5=A4=B4=E5=A4=A7=EF=BC=8C=E5=A2=9E=E5=8A=A0=E5=AF=B9v6?=
=?UTF-8?q?=E3=80=81v7=E7=9A=84=E6=8F=8F=E8=BF=B0=EF=BC=8C=E6=8F=90?=
=?UTF-8?q?=E9=AB=98=E4=BB=A3=E7=A0=81=E8=87=AA=E9=98=85=E8=AF=BB=E6=80=A7?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../org/dromara/hutool/core/data/id/UUID.java | 37 ++++++++++++++-----
.../dromara/hutool/core/data/id/UUIDTest.java | 3 +-
2 files changed, 29 insertions(+), 11 deletions(-)
diff --git a/hutool-core/src/main/java/org/dromara/hutool/core/data/id/UUID.java b/hutool-core/src/main/java/org/dromara/hutool/core/data/id/UUID.java
index 97feaca52..7b0755399 100644
--- a/hutool-core/src/main/java/org/dromara/hutool/core/data/id/UUID.java
+++ b/hutool-core/src/main/java/org/dromara/hutool/core/data/id/UUID.java
@@ -23,6 +23,22 @@ import java.util.Random;
/**
* 提供通用唯一识别码(universally unique identifier)(UUID)实现,UUID表示一个128位的值。
* 此类拷贝自java.util.UUID,用于生成不带-的UUID字符串
+ *
+ *
Generate UUID 不同版本UUID在线生成和参考:Generate UUID
+ *
+ *
+ *
+ *
+ * - 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 相同,使用最多的版本,使用随机数生成。 hutool中默认实现都是该版本; 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)
+ *
+ * version 字段保存描述此 UUID 类型的值。有 7 种不同的基本 UUID 类型:基于时间的 UUIDv1、DCE 安全 UUIDv2、基于名称的 UUIDv3 、随机生成的 UUIDv4、基于名称的SHA-1算法的 UUIDv5、基于时间的随机生成的 UUIDv6 和 基于时间戳的 UUIDv7。
+ * 这些类型的 version 值分别为 1、2、3、4、5、6 和 7。最常用的V4
*
*
* 这些通用标识符具有不同的变体。此类的方法用于操作 Leach-Salz 变体,不过构造方法允许创建任何 UUID 变体(将在下面进行描述)。
@@ -47,8 +63,6 @@ import java.util.Random;
*
* variant 字段包含一个表示 UUID 布局的值。以上描述的位布局仅在 UUID 的 variant 值为 2(表示 Leach-Salz 变体)时才有效。 *
*
- * version 字段保存描述此 UUID 类型的值。有 4 种不同的基本 UUID 类型:基于时间的 UUID、DCE 安全 UUID、基于名称的 UUID 和随机生成的 UUID。
- * 这些类型的 version 值分别为 1、2、3 和 4。
*
* @since 4.1.11
*/
@@ -105,7 +119,7 @@ public class UUID implements java.io.Serializable, Comparable {
}
/**
- * 获取类型 4(伪随机生成的)UUID 的静态工厂。 使用加密的本地线程伪随机数生成器生成该 UUID。
+ * 获取类型 4 UUIDv4(伪随机生成的)UUID 的静态工厂。 使用加密的本地线程伪随机数生成器生成该 UUID。
*
* @return 随机生成的 {@code UUID}
*/
@@ -114,7 +128,7 @@ public class UUID implements java.io.Serializable, Comparable {
}
/**
- * 获取类型 4(伪随机生成的)UUID 的静态工厂。 使用加密的强伪随机数生成器生成该 UUID。
+ * 获取类型 4 UUIDv4(伪随机生成的)UUID 的静态工厂。 使用加密的强伪随机数生成器生成该 UUID。
*
* @return 随机生成的 {@code UUID}
*/
@@ -123,7 +137,7 @@ public class UUID implements java.io.Serializable, Comparable {
}
/**
- * 获取类型 4(伪随机生成的)UUID 的静态工厂。 使用加密的强伪随机数生成器生成该 UUID。
+ * 获取类型 4 UUIDv4(伪随机生成的)UUID 的静态工厂。 使用加密的强伪随机数生成器生成该 UUID。
*
* @param isSecure 是否使用{@link SecureRandom}如果是可以获得更安全的随机码,否则可以得到更好的性能
* @return 随机生成的 {@code UUID}
@@ -143,7 +157,7 @@ public class UUID implements java.io.Serializable, Comparable {
}
/**
- * 根据指定的字节数组获取类型 3(基于名称的)UUID 的静态工厂。
+ * 根据指定的字节数组获取类型 3 UUIDv3(基于名称的·使用MD5哈希加密)UUID 的静态工厂。
*
* @param name 用于构造 UUID 的字节数组。
* @return 根据指定数组生成的 {@code UUID}
@@ -215,10 +229,13 @@ public class UUID implements java.io.Serializable, Comparable {
*
* 版本号具有以下含意:
*
- * - 1 基于时间的 UUID
- *
- 2 DCE 安全 UUID
- *
- 3 基于名称的 UUID
- *
- 4 随机生成的 UUID
+ *
- UUIDv1 基于时间的 UUID
+ *
- UUIDv2 DCE 安全 UUID
+ *
- UUIDv3 基于名称的MD5散列算法的 UUID
+ *
- UUIDv4 随机生成的 UUID
+ *
- UUIDv5 基于名称的SHA-1散列算法的 UUID
+ *
- UUIDv6 基于时间的随机生成的 UUID (UUIDv1 + UUIDv4)
+ *
- UUIDv7 基于时间戳Unix epoch的 UUID
*
*
* @return 此 {@code UUID} 的版本号
diff --git a/hutool-core/src/test/java/org/dromara/hutool/core/data/id/UUIDTest.java b/hutool-core/src/test/java/org/dromara/hutool/core/data/id/UUIDTest.java
index d46d14e01..59ea9ac41 100644
--- a/hutool-core/src/test/java/org/dromara/hutool/core/data/id/UUIDTest.java
+++ b/hutool-core/src/test/java/org/dromara/hutool/core/data/id/UUIDTest.java
@@ -13,7 +13,7 @@
package org.dromara.hutool.core.data.id;
import org.dromara.hutool.core.collection.ConcurrentHashSet;
-import org.dromara.hutool.core.data.id.UUID;
+import org.dromara.hutool.core.lang.Console;
import org.dromara.hutool.core.thread.ThreadUtil;
import org.junit.jupiter.api.Assertions;
import org.junit.jupiter.api.Test;
@@ -30,6 +30,7 @@ public class UUIDTest {
final Set set = new ConcurrentHashSet<>(100);
ThreadUtil.concurrencyTest(100, ()-> set.add(UUID.fastUUID().toString()));
Assertions.assertEquals(100, set.size());
+ Console.log(set);
}