Hutool Hutool
(opens new window)
🏡首页
📖指南
🎢最佳实践
💖支持
💡javaDoc (opens new window)
⏳更新记录 (opens new window)
  • 🍎gitee (opens new window)
  • 🍏github (opens new window)
(opens new window)
🏡首页
📖指南
🎢最佳实践
💖支持
💡javaDoc (opens new window)
⏳更新记录 (opens new window)
  • 🍎gitee (opens new window)
  • 🍏github (opens new window)
  • 快速入门

  • 核心(hutool-core)

    • AI(Hutool-ai)

    • 注解(annotation)

    • 数组(array)

    • JavaBean(bean)

    • 缓存(cache)

    • 类加载器(classloader)

    • 编码解码(codec)

    • 集合(collection)

    • 比较器(comparator)

    • 压缩(compress)

    • 类型转换(convert)

    • 数据(data)

      • 简介
      • ID生成工具-IdUtil
        • 📦 ID生成工具-IdUtil
          • 🔧 核心功能
          • 🎯 方法示例
          • 1. UUID 生成
          • 2. ObjectId 生成
          • 3. Snowflake 算法
          • 4. NanoId 生成
          • 5. SeataSnowflake 生成
          • 🔍 详细说明
          • 1. UUID 生成
          • 2. ObjectId 生成
          • 3. Snowflake 算法
          • 4. NanoId 生成
          • 5. SeataSnowflake 生成
          • 📋 注意事项
          • 🚀 最佳实践
          • 💡 扩展阅读
    • 日期时间(date)

    • 异常(exception)

    • 函数(func)

    • IO流(io)

    • 语言特性(lang)

    • Map(map)

    • 数字数学(math)

    • 网络(net)

    • 对象池(pool)

    • 反射(reflect)

    • 正则(regex)

    • 服务提供(spi)

    • 聚合操作(stream)

    • 字符串文本(text)

    • 并发和线程(thread)

    • 树结构(tree)

    • 工具集合(util)

    • XML操作(xml)

  • 定时任务(hutool-cron)

  • 加密(hutool-crypto)

  • 数据库(hutool-db)

  • 扩展(hutool-extra)

  • HTTP(hutool-http)

  • 日志(hutool-log)

  • 配置文件(hutool-setting)

  • JSON(hutool-json)

  • Office办公(hutool-poi)

  • 套接字(hutool-socket)

  • GUI(hutool-swing)

  • 指南
  • 核心(hutool-core)
  • 数据(data)
Hutool
2026-01-03
目录

ID生成工具-IdUtil

# 📦 ID生成工具-IdUtil

IdUtil 是 Hutool 提供的 ID 生成工具类,封装了多种 ID 生成策略,包括 UUID、ObjectId、Snowflake、NanoId 等,满足不同场景下的 ID 生成需求。

# 🔧 核心功能

生成策略 特点 适用场景
UUID 全球唯一,无需中心化管理 分布式系统、随机标识符
ObjectId 时间有序,包含机器和进程信息 MongoDB文档ID、需要时间排序的场景
Snowflake 时间有序,高性能,可预测 分布式系统、高并发场景、需要排序的ID
NanoId 短长度,高安全性,可定制 URL缩短、资源标识符、需要短ID的场景
ULID 时间有序,URL安全,无特殊字符 需要排序且URL友好的场景

# 🎯 方法示例

# 1. UUID 生成

// 获取标准UUID (带横线)
String uuid = IdUtil.randomUUID();
// 示例: 550e8400-e29b-41d4-a716-446655440000

// 获取简化UUID (不带横线)
String simpleUuid = IdUtil.simpleUUID();
// 示例: 550e8400e29b41d4a716446655440000

// 获取快速UUID (性能更好)
String fastUuid = IdUtil.fastUUID();
// 示例: 550e8400-e29b-41d4-a716-446655440000

// 获取快速简化UUID
String fastSimpleUuid = IdUtil.fastSimpleUUID();
// 示例: 550e8400e29b41d4a716446655440000

// 获取UUID7
String uuid7 = IdUtil.randomUUID7();
// 示例: 018d8e8a-3b4c-7d8e-9f0a-1b2c3d4e5f6g

# 2. ObjectId 生成

// 生成MongoDB风格的ObjectId
String objectId = IdUtil.objectId();
// 示例: 60b8d295c817e62d30c5d5a1

# 3. Snowflake 算法

// 获取默认Snowflake实例
Snowflake snowflake = IdUtil.getSnowflake();

// 生成雪花ID
long snowflakeId = snowflake.next();
// 示例: 1234567890123456789

// 生成雪花ID字符串
String snowflakeIdStr = snowflake.nextStr();
// 示例: "1234567890123456789"

// 快速生成雪花ID
long nextId = IdUtil.getSnowflakeNextId();
// 示例: 1234567890123456789

// 快速生成雪花ID字符串
String nextIdStr = IdUtil.getSnowflakeNextIdStr();
// 示例: "1234567890123456789"

// 自定义workerId和datacenterId
Snowflake customSnowflake = IdUtil.getSnowflake(1, 1);
long customId = customSnowflake.next();

# 4. NanoId 生成

// 生成默认长度(21位)的NanoId
String nanoId = IdUtil.nanoId();
// 示例: "9bHa5aZaQ3Kd8eRfTgYhUj"

// 生成指定长度的NanoId
String customLengthNanoId = IdUtil.nanoId(10);
// 示例: "9bHa5aZaQ3"

# 5. SeataSnowflake 生成

// 获取默认SeataSnowflake实例
SeataSnowflake seataSnowflake = IdUtil.getSeataSnowflake();

// 生成Seata雪花ID
long seataId = seataSnowflake.next();
// 示例: 1234567890123456789

// 生成Seata雪花ID字符串
String seataIdStr = seataSnowflake.nextStr();
// 示例: "1234567890123456789"

// 快速生成Seata雪花ID
long seataNextId = IdUtil.getSeataSnowflakeNextId();
// 示例: 1234567890123456789

// 快速生成Seata雪花ID字符串
String seataNextIdStr = IdUtil.getSeataSnowflakeNextIdStr();
// 示例: "1234567890123456789"

# 🔍 详细说明

# 1. UUID 生成

UUID (Universally Unique Identifier) 是一种全球唯一标识符,由 36 个字符组成,包含 32 个十六进制数字和 4 个横线。

  • randomUUID(): 生成标准 UUID,带横线
  • simpleUUID(): 生成简化 UUID,去掉横线,长度 32
  • fastUUID(): 使用性能更好的 ThreadLocalRandom 生成 UUID
  • fastSimpleUUID(): 结合快速生成和简化格式的 UUID
  • randomUUID7(): 生成 UUID v7,基于时间的 UUID,具有更好的索引性能

# 2. ObjectId 生成

ObjectId 是 MongoDB 使用的一种 ID 生成策略,由 12 字节组成:

  • 4 字节:时间戳(秒)
  • 3 字节:机器标识符
  • 2 字节:进程 ID
  • 3 字节:计数器

特点:

  • 时间有序,便于索引
  • 包含机器和进程信息,确保分布式环境下的唯一性
  • 长度固定,12 字节(24 个十六进制字符)

# 3. Snowflake 算法

Snowflake 是 Twitter 开源的分布式 ID 生成算法,ID 结构如下:

0 - 0000000000 0000000000 0000000000 0000000000 0 - 00000 - 00000 - 000000000000
  • 1 位:未使用(符号位)
  • 41 位:时间戳(毫秒级,可使用 69 年)
  • 5 位:数据中心 ID(最多支持 32 个数据中心)
  • 5 位:机器 ID(最多支持 32 台机器)
  • 12 位:毫秒内序列号(每台机器每秒最多生成 4096 个 ID)

特点:

  • 时间有序,便于排序和索引
  • 高性能,每台机器每秒可生成数百万个 ID
  • 分布式友好,支持多节点部署
  • 可预测性,ID 按时间递增

Hutool 提供了多种获取 Snowflake 实例的方式:

  • getSnowflake(): 获取默认实例(自动生成 workerId 和 datacenterId)
  • getSnowflake(workerId): 指定 workerId,datacenterId 自动生成
  • getSnowflake(workerId, datacenterId): 完全自定义 workerId 和 datacenterId

# 4. NanoId 生成

NanoId 是一种新型的 ID 生成策略,具有以下特点:

  • 短长度:默认 21 个字符,比 UUID 短 40%
  • 高安全性:使用加密安全的随机数生成器
  • 可定制:可以自定义长度和字符集
  • URL 友好:不使用特殊字符,适合 URL 缩短

nanoId() 方法生成默认长度(21 位)的 NanoId,nanoId(int size) 方法可以生成指定长度的 NanoId。

# 5. SeataSnowflake 生成

SeataSnowflake 是 Seata 分布式事务框架使用的 Snowflake 变体,主要区别在于:

  • 使用 64 位 ID,去掉了符号位限制
  • 时间戳精度更高
  • 节点 ID 管理更灵活

适合在 Seata 分布式事务环境中使用,确保全局事务 ID 的唯一性和有序性。

# 📋 注意事项

  1. UUID 的性能:标准 UUID 生成性能较低,在高并发场景下建议使用 fastUUID()
  2. Snowflake 的时钟回拨:Snowflake 算法依赖系统时钟,时钟回拨可能导致 ID 重复,Hutool 已做了相应处理
  3. Snowflake 的节点 ID 管理:在分布式环境中,需要确保每个节点的 workerId 和 datacenterId 唯一
  4. ObjectId 的时间精度:ObjectId 基于秒级时间戳,同一秒内生成的 ID 无法通过时间戳区分顺序
  5. NanoId 的唯一性:虽然 NanoId 碰撞概率极低,但在极端情况下仍有可能发生碰撞,建议根据实际场景选择合适的长度

# 🚀 最佳实践

  1. 高并发场景:优先选择 Snowflake 或 SeataSnowflake
  2. 需要短 ID:选择 NanoId 或 ULID
  3. 需要时间排序:选择 ObjectId、Snowflake 或 ULID
  4. URL 友好:选择 NanoId 或 ULID
  5. 无需排序:选择 UUID 或 NanoId

# 💡 扩展阅读

  • UUID 规范 (opens new window)
  • Snowflake 算法原理 (opens new window)
  • NanoId 项目 (opens new window)
  • ULID 规范 (opens new window)

通过 IdUtil,可以轻松实现各种 ID 生成策略,满足不同场景下的 ID 生成需求,提高开发效率和系统可靠性。

简介
概述

← 简介 概述→

Theme by Vdoing | Copyright © 2025-2026 Hutool | Apache-2.0
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式