在软件开发中,我们经常需要生成全局唯一标识符(Unique Identifier),用于数据库主键、分布式系统ID、文件命名、会话Token等场景。UUID(Universally Unique Identifier)是目前最广泛使用的唯一标识方案之一。
U2工具箱提供了在线UUID生成器,支持批量生成、多种格式选项,纯前端运行安全可靠。本文将带你全面了解UUID及其使用方法。
一、什么是UUID
UUID是一个128位的标识符,标准格式为 8-4-4-4-12 的十六进制字符串:
550e8400-e29b-41d4-a716-446655440000
|---8--| |--4-| |--4-| |--4-| |---12---|
UUID的总量为 2128(约 3.4×1038),这是一个天文数字。即使每秒生成10亿个UUID,连续生成85年,重复的概率也几乎为零。因此UUID被广泛用于分布式系统中的唯一标识。
二、UUID版本介绍
1. UUID v4(随机版本)—— 最常用
UUID v4 基于随机数生成,是实际开发中使用最多的版本。它的第13位固定为 4(版本标识),第17位的最高两位固定为 10(变体标识),其余122位均为随机位。
示例:f47ac10b-58cc-4372-a567-0e02b2c3d479
优点:生成简单,无需协调,天然分布式友好
缺点:无时序性,随机性导致数据库索引效率略低
2. UUID v1(时间戳版本)
UUID v1 基于当前时间戳和MAC地址生成,具有时序性——相近时间生成的UUID在排序上是相邻的。
示例:1e6e4370-2b29-11e9-b210-d6618a8a0a0d
优点:有时序性,适合做有序主键
缺点:可能泄露主机MAC地址信息(隐私风险)
三、工具使用方法
步骤1:选择版本
在工具页面顶部选择 UUID 版本:v4(随机) 或 v1(时间戳)。日常使用推荐 v4。
步骤2:设置生成数量
支持一次生成 1~100 个 UUID,输入框中填写需要的数量即可。
步骤3:格式选项
工具提供三种格式选项:
| 选项 | 效果 | 示例 |
|---|---|---|
| 大小写 | 大写 / 小写 | F47AC10B-... 或 f47ac10b-... |
| 连字符 | 带 / 不带连字符 | f47ac10b-58cc-... 或 f47ac10b58cc... |
| 花括号 | 是否用花括号包裹 | {f47ac10b-58cc-...} |
步骤4:生成与复制
点击"生成"按钮,结果立即显示在下方。每个UUID右侧有复制按钮,也可点击"全部复制"一键复制全部结果。
四、实际应用场景
1. 数据库主键
在分布式系统中,使用UUID作为数据库主键可以避免自增ID的冲突问题。不同节点各自生成UUID即可保证全局唯一。
-- MySQL
CREATE TABLE orders (
id CHAR(36) PRIMARY KEY DEFAULT (UUID()),
user_id BIGINT NOT NULL,
amount DECIMAL(10,2),
created_at DATETIME DEFAULT CURRENT_TIMESTAMP
);
2. 分布式系统唯一ID
微服务架构中,每个服务独立生成请求ID/链路追踪ID,使用UUID确保全链路唯一。
3. 文件命名
用户上传文件时,使用UUID作为文件名,避免同名冲突:
// JavaScript
const fileExt = file.name.split('.').pop();
const fileName = crypto.randomUUID() + '.' + fileExt;
4. 会话Token
生成临时会话Token、邀请码、激活码等:
// PHP
$token = bin2hex(random_bytes(16)); // 类似UUID的随机Token
5. 测试数据
批量生成UUID用于测试数据库、填充模拟数据等。
五、各语言生成UUID代码
JavaScript / Node.js
// 浏览器原生(Chrome 92+)
const uuid = crypto.randomUUID();
// Node.js
const { randomUUID } = require('crypto');
const uuid = randomUUID();
// 或使用 uuid 库
const { v4: uuidv4 } = require('uuid');
const uuid = uuidv4();
Python
import uuid
u = uuid.uuid4()
print(u) # f47ac10b-58cc-4372-a567-0e02b2c3d479
PHP
// PHP 8.3+ 内置
$uuid = \uuid_create(); // 需php uuid扩展
// 或使用 Ramsey UUID 包
use Ramsey\Uuid\Uuid;
$uuid = Uuid::uuid4()->toString();
// 或纯PHP生成(兼容性方案)
function gen_uuid() {
return sprintf('%04x%04x-%04x-%04x-%04x-%04x%04x%04x',
mt_rand(0, 0xffff), mt_rand(0, 0xffff),
mt_rand(0, 0xffff),
mt_rand(0, 0x0fff) | 0x4000,
mt_rand(0, 0x3fff) | 0x8000,
mt_rand(0, 0xffff), mt_rand(0, 0xffff), mt_rand(0, 0xffff)
);
}
Java
import java.util.UUID;
UUID uuid = UUID.randomUUID();
System.out.println(uuid.toString());
Go
import "github.com/google/uuid"
id := uuid.New()
fmt.Println(id.String())
Shell
# Linux
cat /proc/sys/kernel/random/uuid
# macOS
uuidgen
六、UUID vs 自增ID 对比
| 特性 | 自增ID | UUID |
|---|---|---|
| 唯一性 | 单机唯一 | 全局唯一 |
| 长度 | 4/8字节 | 16字节(36字符) |
| 有序性 | 严格递增 | v4无序,v1有序 |
| 分布式 | 需要协调 | 天然支持 |
| 安全性 | 可猜测 | 不可预测 |
| 索引效率 | 高(顺序写入) | v4较低(随机写入) |
总结
UUID是分布式系统中不可或缺的唯一标识方案。U2工具箱的UUID生成器提供了便捷的在线生成能力,支持批量、多格式、多版本,无需安装任何软件。立即体验 UUID生成器 →
所有生成操作在浏览器本地完成,不发送网络请求,安全可靠。