ULID 生成器 - 免费在线唯一可排序 ID 创建器

使用我们的免费在线工具即时生成 ULID。为数据库、API 和分布式系统创建全球唯一的字典顺序可排序标识符。

ULID 生成器

生成的 ULID:

ULID 结构


时间戳(10 个字符)

随机性(16 个字符)
📚

文档

ULID 生成器:在线创建唯一可排序标识符

立即生成 ULID,使用我们的免费在线 ULID 生成器工具。创建 通用唯一字典排序标识符,将时间戳与加密安全的随机数据结合,用于数据库键、分布式系统和 Web 应用程序。

什么是 ULID 生成器?

**ULID(通用唯一字典排序标识符)**是一种唯一标识符系统,它将时间戳与随机数据结合,创建一个 26 个字符的字符串。与传统的 UUID 不同,ULID 是字典可排序的,同时保持加密的唯一性和随机性,使其非常适合现代分布式应用程序。

如何生成 ULID 标识符

我们的 ULID 生成器工具可以立即创建唯一标识符:

  1. 点击生成:使用我们的在线工具创建新的 ULID
  2. 复制结果:获取您的唯一 26 个字符的标识符
  3. 随处使用:在数据库、API 或应用程序中实现

ULID 结构和格式

理解 ULID 组件

ULID 标识符结构由两个主要部分组成:

  1. 时间戳(10 个字符):前 10 个字符表示自 Unix 纪元(1970-01-01)以来的毫秒数。
  2. 随机性(16 个字符):剩余的 16 个字符使用加密安全的随机数据生成。

生成的 26 个字符的字符串使用 Crockford 的 base32 字母表编码(0-9 和 A-Z,排除 I、L、O 和 U)。

公式

ULID 的生成遵循以下步骤:

  1. 生成一个 48 位的时间戳(自 Unix 纪元以来的毫秒数)。
  2. 生成 80 位的加密安全随机数据。
  3. 使用 Crockford 的 base32 编码对组合的 128 位进行编码。

计算

ULID 生成器执行以下步骤:

  1. 获取当前的毫秒时间戳。
  2. 使用加密安全的随机数生成器生成 10 个随机字节(80 位)。
  3. 将时间戳和随机数据组合成一个 128 位的整数。
  4. 使用 Crockford 的 base32 编码对 128 位整数进行编码。

ULID 用例和应用

ULID 生成器在现代软件开发中对于多种场景至关重要:

数据库应用

  • 主键:用可排序的 ULID 替换自增 ID
  • 分片:高效地将数据分布到多个数据库
  • 索引:通过自然排序的标识符提高数据库性能

分布式系统

  • 微服务:在没有中央协调的情况下生成唯一 ID
  • 事件溯源:在服务之间创建可排序的事件标识符
  • 消息队列:用按时间顺序排列的 ULID 标记消息

Web 开发

  • API 端点:为 REST API 创建 URL 友好的标识符
  • 会话跟踪:为用户管理生成安全的会话 ID
  • 文件上传:用唯一的可排序标识符命名文件

ULID 与 UUID:主要区别

特性ULIDUUID
可排序性字典可排序不可排序
时间戳包含毫秒时间戳无时间戳(v4)
长度26 个字符36 个字符(带连字符)
编码Crockford 的 Base32十六进制
大小写敏感性不区分大小写不区分大小写

替代唯一标识符系统

将 ULID 生成器与其他唯一标识符解决方案进行比较:

  1. UUID(通用唯一标识符):传统的 128 位标识符,没有时间戳排序
  2. KSUID(K-可排序唯一标识符):类似概念,具有不同的时间戳编码
  3. 雪花 ID:Twitter 的分布式系统,包含时间戳和工作 ID 组件

ULID 实现示例

编程语言支持

在不同编程语言中实现 ULID 生成

JavaScript ULID 生成器

1// JavaScript 实现
2function generateULID() {
3  const timestamp = Date.now().toString(36).padStart(10, '0');
4  const randomness = crypto.getRandomValues(new Uint8Array(16))
5    .reduce((acc, byte) => acc + byte.toString(36).padStart(2, '0'), '');
6  return (timestamp + randomness).toUpperCase();
7}
8
9console.log(generateULID());
10

Python ULID 生成器

1## Python 实现
2import time
3import secrets
4import base64
5
6def generate_ulid():
7    timestamp = int(time.time() * 1000).to_bytes(6, byteorder="big")
8    randomness = secrets.token_bytes(10)
9    return base64.b32encode(timestamp + randomness).decode("ascii").lower()
10
11print(generate_ulid())
12

Java ULID 生成器

1// Java 实现
2import java.security.SecureRandom;
3import java.time.Instant;
4
5public class ULIDGenerator {
6    private static final SecureRandom random = new SecureRandom();
7    private static final char[] ENCODING_CHARS = "0123456789ABCDEFGHJKMNPQRSTVWXYZ".toCharArray();
8
9    public static String generateULID() {
10        long timestamp = Instant.now().toEpochMilli();
11        byte[] randomness = new byte[10];
12        random.nextBytes(randomness);
13
14        StringBuilder result = new StringBuilder();
15        // 编码时间戳
16        for (int i = 9; i >= 0; i--) {
17            result.append(ENCODING_CHARS[(int) (timestamp % 32)]);
18            timestamp /= 32;
19        }
20        // 编码随机性
21        for (byte b : randomness) {
22            result.append(ENCODING_CHARS[b & 31]);
23        }
24        return result.toString();
25    }
26
27    public static void main(String[] args) {
28        System.out.println(generateULID());
29    }
30}
31

这些 ULID 代码示例展示了在流行编程语言中的实现。根据您的具体应用调整这些函数,或将它们集成到需要唯一标识符的更大系统中。

常见问题解答(FAQ)

什么是 ULID,它是如何工作的?

**ULID(通用唯一字典排序标识符)**是一个 26 个字符的唯一标识符,它将时间戳与加密安全的随机数据结合。与 UUID 不同,ULID 在字典排序时保持时间顺序。

我如何在线生成 ULID 标识符?

使用我们免费的 ULID 生成器工具,立即创建唯一标识符。只需点击生成按钮以创建新的 ULID,然后复制结果以供您的应用程序使用。

ULID 和 UUID 之间有什么区别?

ULID 是可排序的,按创建时间排序,使用 26 个字符和 Crockford 的 Base32 编码,并包含时间戳。UUID 是 36 个字符(带连字符),使用十六进制编码,并且不自然可排序。

ULID 是加密安全的吗?

是的,ULID 生成器使用加密安全的随机数生成来生成 80 位随机性组件,提供高碰撞抵抗,同时保持时间顺序。

我可以将 ULID 用作数据库主键吗?

绝对可以!ULID 是优秀的数据库主键,因为它们是唯一的,自然按创建时间索引,并且在分布式系统中不需要中央协调。

ULID 使用什么编码?

ULID 使用 Crockford 的 Base32 编码(0-9 和 A-Z,排除 I、L、O、U),这种编码不区分大小写且对 URL 安全,非常适合 Web 应用程序。

ULID 标识符的长度是多少?

ULID 的长度恰好为 26 个字符,使其比标准 UUID(36 个字符,带连字符)更紧凑,同时提供相同级别的唯一性。

ULID 可以离线生成吗?

是的,ULID 生成完全可以离线进行,因为它只需要当前时间戳和加密安全的随机数生成器 - 不需要网络连接。

为什么选择我们的 ULID 生成器?

  • 即时生成:立即创建 ULID,无需安装
  • 加密安全:使用安全的随机数生成
  • 复制就绪格式:结果立即可供使用
  • 免费在线工具:无需注册或付款
  • 跨平台:在任何现代 Web 浏览器中均可使用

现在就开始使用我们的免费 ULID 生成器工具生成 唯一可排序的标识符

技术参考

  1. "ULID 规范。" GitHub, https://github.com/ulid/spec. 访问日期:2024年8月2日。
  2. "Crockford 的 Base32 编码。" Base32 编码, http://www.crockford.com/base32.html. 访问日期:2024年8月2日。
  3. "UUID 与 ULID。" Stack Overflow, https://stackoverflow.com/questions/54222235/uuid-vs-ulid. 访问日期:2024年8月2日。