!1151 轻量级修改:UUID注释修改

* 注释增加代码实现参考
* 注释,增加简洁英文
* 修改:nameUUIDFromBytes 注释
* UUID从v1->v7,越来越复杂,新手很头大,增加对v6、v7的描述,提高代码自阅读性
This commit is contained in:
dazer007 2024-01-15 09:08:10 +00:00 committed by Looly
parent 9334cd0b28
commit 9c3dc22a37
2 changed files with 29 additions and 11 deletions

View File

@ -23,6 +23,22 @@ import java.util.Random;
/**
* 提供通用唯一识别码universally unique identifierUUID实现UUID表示一个128位的值<br>
* 此类拷贝自java.util.UUID用于生成不带-的UUID字符串
* <p>
* <h3>Generate UUID 不同版本UUID在线生成和参考<a href="https://idtools.co/uuid/v4">Generate UUID</a></h3>
* <h3>UUID 5 个版本<a href="https://juejin.cn/post/7297225106203689001">UUID 5 version 区别</a></h3>
* <h3>UUID代码实现参考<a href="https://github.com/sake/uuid4j">sake/uuid4j实现</a></h3>
* </p>
* <ul>
* <li>UUIDv1: Structure,形如xxxxxxxx-xxxx-1xxx-yxxx-xxxxxxxxxxxxUUID v1 表示为 32 个字符的十六进制字符串分五组显示并用连字符分隔; <strong>基于时间</strong>同时访问主机的 MAC 地址 generate a time based UUID (V1)</li>
* <li>UUIDv2: Structure,形如xxxxxxxx-xxxx-2xxx-yxxx-xxxxxxxxxxxxUUID v2 的结构与其他 UUID 相同;需要<strong> DCE分布式计算机环境 </strong>生成唯一标识符;由于基于计算主机名有隐私风险未大规模使用</li>
* <li>UUIDv3: Structure,形如xxxxxxxx-xxxx-3xxx-yxxx-xxxxxxxxxxxxUUID v3 的结构与其他 UUID 相同;需要<strong> 基于命名·使用MD5哈希加密 </strong>生成唯一标识符;</li>
* <li>UUIDv4: Structure,形如xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxxUUID v4 的结构与其他 UUID 相同,<strong>使用最多的版本</strong>使用<strong>随机数生成</strong> hutool中默认实现都是该版本 generate a random UUID (V4)</li>
* <li>UUIDv5: Structure,形如xxxxxxxx-xxxx-5xxx-yxxx-xxxxxxxxxxxxUUID v5 的结构与其他 UUID 相同,需要根据<strong> 基于命名·使用SHA-1哈希加密 </strong>生成唯一标识符 generate name based UUID with SHA1 hashing (v5)</li>
* <li>UUIDv6: Structure,形如xxxxxxxx-xxxx-6xxx-yxxx-xxxxxxxxxxxxUUID v6 的结构与其他 UUID 相同,<strong> UUIDv1 的字段兼容版本</strong>,<strong>结合 UUIDv1 UUIDv4 的优点</strong>确保基于时间的自然排序和更好的隐私;</li>
* <li>UUIDv7: Structure,形如xxxxxxxx-xxxx-7xxx-yxxx-xxxxxxxxxxxxUUID v7 的结构与其他 UUID 相同,提供了从 <strong>Unix Epoch 时间戳</strong>派生的时间排序值以及改进的熵特性如果可能<strong>建议使用版本 1 6</strong> generate a ordered time based UUID (V7)</li>
* </ul>
* version 字段保存描述此 UUID 类型的值 7 种不同的基本 UUID 类型基于时间的 UUIDv1DCE 安全 UUIDv2基于名称的 UUIDv3 随机生成的 UUIDv4基于名称的SHA-1算法的 UUIDv5基于时间的随机生成的 UUIDv6 基于时间戳的 UUIDv7<br>
* 这些类型的 version 值分别为 123456 7最常用的V4
*
* <p>
* 这些通用标识符具有不同的变体此类的方法用于操作 Leach-Salz 变体不过构造方法允许创建任何 UUID 变体将在下面进行描述
@ -47,8 +63,6 @@ import java.util.Random;
* <p>
* variant 字段包含一个表示 UUID 布局的值以上描述的位布局仅在 UUID variant 值为 2表示 Leach-Salz 变体时才有效 *
* <p>
* version 字段保存描述此 UUID 类型的值 4 种不同的基本 UUID 类型基于时间的 UUIDDCE 安全 UUID基于名称的 UUID 和随机生成的 UUID<br>
* 这些类型的 version 值分别为 123 4
*
* @since 4.1.11
*/
@ -105,7 +119,7 @@ public class UUID implements java.io.Serializable, Comparable<UUID> {
}
/**
* 获取类型 4伪随机生成的UUID 的静态工厂 使用加密的本地线程伪随机数生成器生成该 UUID
* 获取类型 4 UUIDv4伪随机生成的UUID 的静态工厂 使用加密的本地线程伪随机数生成器生成该 UUID
*
* @return 随机生成的 {@code UUID}
*/
@ -114,7 +128,7 @@ public class UUID implements java.io.Serializable, Comparable<UUID> {
}
/**
* 获取类型 4伪随机生成的UUID 的静态工厂 使用加密的强伪随机数生成器生成该 UUID
* 获取类型 4 UUIDv4伪随机生成的UUID 的静态工厂 使用加密的强伪随机数生成器生成该 UUID
*
* @return 随机生成的 {@code UUID}
*/
@ -123,7 +137,7 @@ public class UUID implements java.io.Serializable, Comparable<UUID> {
}
/**
* 获取类型 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<UUID> {
}
/**
* 根据指定的字节数组获取类型 3基于名称的UUID 的静态工厂
* 根据指定的字节数组获取类型 3 UUIDv3基于名称的·使用MD5哈希加密UUID 的静态工厂
*
* @param name 用于构造 UUID 的字节数组
* @return 根据指定数组生成的 {@code UUID}
@ -215,10 +229,13 @@ public class UUID implements java.io.Serializable, Comparable<UUID> {
* <p>
* 版本号具有以下含意:
* <ul>
* <li>1 基于时间的 UUID
* <li>2 DCE 安全 UUID
* <li>3 基于名称的 UUID
* <li>4 随机生成的 UUID
* <li>UUIDv1 基于时间的 UUID
* <li>UUIDv2 DCE 安全 UUID
* <li>UUIDv3 基于名称的MD5散列算法的 UUID
* <li>UUIDv4 随机生成的 UUID
* <li>UUIDv5 基于名称的SHA-1散列算法的 UUID
* <li>UUIDv6 基于时间的随机生成的 UUID UUIDv1 + UUIDv4
* <li>UUIDv7 基于时间戳Unix epoch的 UUID
* </ul>
*
* @return {@code UUID} 的版本号

View File

@ -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<String> set = new ConcurrentHashSet<>(100);
ThreadUtil.concurrencyTest(100, ()-> set.add(UUID.fastUUID().toString()));
Assertions.assertEquals(100, set.size());
Console.log(set);
}