开发编码 本地计算 开箱即用 内置示例 不留痕迹

UUID 生成器

UUID v4(通用唯一识别码)由 crypto.getRandomValues 加密安全随机数生成,128 位中随机位达 122 位,约 5.3×10^36 种组合——生成 10 亿个 UUID 碰撞概率仍只有十亿分之一量级。支持一次生成 1–500 个、大小写切换、批量复制,适合数据库主键、分布式 ID、测试数据。

UUID v4 是 128 位随机标识符,通常写成 8-4-4-4-12 的五段十六进制形式,用于数据库主键、分布式 ID、请求追踪与测试数据。它的价值在于本地生成、无需中心协调:多台机器各自生成也不会撞号,因此比自增 ID 更适合分库分表与离线场景。

两点需要分清:生成用的是加密安全随机数(本工具走 crypto.getRandomValues),但 UUID 本身不是密码或访问令牌 —— 它没有过期与签名机制,被日志记录或猜到就可能被冒用;另外 v4 完全随机、不含时间信息,写进 InnoDB 做主键会因随机插入引发页分裂,高写入场景更适合有序 ID(如 v7 或雪花 ID)。

    使用步骤

    1. 设置生成数量(1~500),点「生成」。
    2. 按需切换大小写:多数数据库与业务场景用小写,部分内部规范要求大写。
    3. 第一个 UUID 展示在结果区,完整列表在下方逐行列出。
    4. 点「复制全部」一次带走(换行分隔),可直接粘进 SQL 或配置文件。

    计算原理与示例

    生成数量与用法

    设置生成数量(1–500),点击「生成」。

    大小写切换

    大小写可切换:标准输出为小写,部分数据库主键或业务场景需要大写。

    结果与复制

    第一个 UUID 显示在结果区,完整列表在下方逐行列出,「复制全部」一次带走(换行分隔)。

    代码示例

    Shell 命令行生成

    # Linux / macOS 自带 uuidgen
    uuidgen              # 例:3F2504E0-4F89-11D3-9A0C-0305E82C3301
    uuidgen | tr A-Z a-z # 转小写
    
    # Python 标准库批量生成
    python3 -c "import uuid; [print(uuid.uuid4()) for _ in range(5)]"

    SQL 作为主键的写法(MySQL 8)

    -- UUID 用 CHAR(36) 存;量大时转 BINARY(16) 可省一半空间
    CREATE TABLE api_token (
      id CHAR(36) NOT NULL PRIMARY KEY,
      user_id BIGINT UNSIGNED NOT NULL,
      created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP
    );
    
    INSERT INTO api_token (id, user_id) VALUES (UUID(), 1001);
    
    -- 注意:随机主键写入会产生页分裂,高并发写入建议改用有序 ID

    常见问题

    UUID 会重复吗?

    理论上可能,实际可忽略:v4 有 122 位随机位,约 5.3×10^36 种组合。据计算,生成 103 万亿个 UUID 才有 10 亿分之一的重复概率。分布式系统可以放心各自生成、无需中心节点协调。

    UUID 和 GUID 是一回事吗?

    基本是。GUID(全局唯一标识符)是微软对 UUID 的称呼,实现上就是 RFC 4122 的 UUID,SQL Server 的 NEWID() 和 .NET 的 Guid.NewGuid() 生成的都是 UUID v4。

    UUID 能当密码或令牌用吗?

    UUID 的随机性来自加密安全随机源,可以作为一次性令牌(如邮件验证链接 token),但作为密码太长且无法记忆——密码请用专门的密码生成器,它支持符号集与长度定制。

    UUID 是什么?

    全称通用唯一识别码(Universally Unique Identifier),是一个 128 位标识符,标准写法为 8-4-4-4-12 共 36 个字符(含 4 个连字符)。它不依赖中心机构分配,就能在分布式系统中生成几乎不冲突的 ID。

    UUID v1、v4、v7 有什么区别?

    v1 基于时间戳和 MAC 地址生成,可按时间排序但会暴露生成时间与设备信息;v4 完全随机,隐私性最好;v7 把时间戳放在高位、随机部分在后,既随机又能按时间排序,适合做数据库主键。本工具生成的是 v4。

    为什么用 UUID 做数据库主键有时性能差?

    因为 v4 完全随机导致插入位置分散,会引起 B+ 树页分裂和随机 IO,索引写入变慢。可以改用有序的 UUID v7、雪花 ID,或保留自增主键、另加一个带唯一索引的 UUID 列。

    UUID 里的连字符可以去掉吗?

    可以。连字符只是为了便于阅读,去掉后是 32 个十六进制字符,信息量完全不变。存储时可以去掉连字符节省空间,展示或作为标识符时恢复标准格式更规范,也便于不同系统对接。

    延伸阅读

    来自本站原创文章,讲清这个工具背后的算法与口径。