Trả lời nhanh
UUID là mã định danh 128 bit, viết thành 36 ký tự dạng 8-4-4-4-12, ví dụ 017f22e2-79b0-7cc3-98c4-dc0c0c07398f. UUID v4 gồm 122 bit ngẫu nhiên; UUID v7 (RFC 9562, 2024) đặt mốc thời gian mili giây ở đầu nên sắp xếp được theo thời điểm tạo, hợp làm khoá chính cơ sở dữ liệu.
UUID là gì?
Công cụ tạo một hoặc tới 1.000 UUID mỗi lần, chọn phiên bản v4 (ngẫu nhiên, dùng crypto.randomUUID của trình duyệt) hoặc v7 (theo thời gian, đúng thứ tự kể cả khi tạo hàng loạt trong cùng một mili giây), đổi sang chữ HOA, bỏ gạch nối hoặc bọc ngoặc nhọn kiểu GUID của Microsoft, sao chép hay tải tệp .txt. Ô “Kiểm tra / giải mã” cho biết một UUID bất kỳ thuộc phiên bản, biến thể nào và được tạo lúc nào (với v1, v6, v7).

Cách tạo và kiểm tra UUID
- 1
Chọn phiên bản: “v4 · ngẫu nhiên” cho mã duy nhất thông thường, “v7 · theo thời gian” khi cần sắp xếp theo thời điểm tạo.
- 2
Nhập số lượng (1–1.000) rồi bấm “Tạo mới”; đổi phiên bản cũng tạo lại danh sách.
- 3
Bật “Chữ HOA”, tắt “Có dấu gạch nối” hoặc bật “Bọc trong ngoặc nhọn” tuỳ hệ thống cần; danh sách đổi định dạng ngay mà không tạo lại mã.
- 4
Bấm “Sao chép tất cả” hoặc “Tải .txt”. Muốn đọc một UUID có sẵn, dán vào ô “Kiểm tra / giải mã một UUID”.
Các phiên bản UUID
| Phiên bản | Tạo từ | Sắp xếp theo thời gian | Dùng khi |
|---|---|---|---|
| v1 | Thời gian 100 ns + địa chỉ MAC | Không (thứ tự byte bị đảo) | Hệ thống cũ; lộ địa chỉ MAC của máy |
| v3 / v5 | Băm MD5 / SHA-1 của tên + namespace | Không | Cần cùng đầu vào luôn ra cùng UUID |
| v4 | 122 bit ngẫu nhiên | Không | Mã duy nhất thông thường, mã đơn hàng, token |
| v6 | Như v1 nhưng sắp lại thứ tự | Có | Nâng cấp hệ thống đang dùng v1 |
| v7 | 48 bit mili giây Unix + 74 bit ngẫu nhiên | Có | Khoá chính cơ sở dữ liệu, log, sự kiện |
Vuốt ngang để xem cả bảng →
Phiên bản là chữ số đầu tiên của nhóm thứ ba: …-4xxx-… là v4, …-7xxx-… là v7.
Cấu tạo một UUID v7
Ví dụ trong RFC 9562: 017f22e2-79b0-7cc3-98c4-dc0c0c07398f
| Phần | Giá trị | Ý nghĩa |
|---|---|---|
| 017f22e2-79b0 | 48 bit | Mili giây kể từ 1/1/1970 UTC: 22/02/2022 19:22:22 UTC |
| 7 | 4 bit | Số phiên bản (7) |
| cc3 | 12 bit | Ngẫu nhiên hoặc bộ đếm để giữ thứ tự trong cùng mili giây |
| 9 (bit 10xx) | 2 bit | Biến thể RFC 9562 |
| 8c4-dc0c0c07398f | 62 bit | Ngẫu nhiên |
Ví dụ thực tế
Khoá chính cho bảng đơn hàng
Dùng v7 thay cho v4: bản ghi mới luôn nằm cuối chỉ mục B-tree nên chèn nhanh hơn và trang chỉ mục ít bị chia nhỏ. Vẫn tạo được ở phía ứng dụng mà không cần hỏi cơ sở dữ liệu.
Tạo dữ liệu mẫu
Cần 500 mã cho tệp seed? Đặt số lượng 500, bấm Tạo mới rồi Tải .txt; mỗi dòng một UUID, dán thẳng vào script.
GUID cho cấu hình Windows / .NET
Bật chữ HOA và ngoặc nhọn để có dạng {3F2504E0-4F89-41D3-9A0C-0305E82C3301} mà registry và tệp .csproj thường dùng.
Biết một bản ghi được tạo lúc nào
Dán id dạng v7 từ log vào ô giải mã: công cụ đọc 48 bit thời gian và hiện thời điểm theo giờ Việt Nam, không cần tra cơ sở dữ liệu.
Lỗi thường gặp và cách xử lý
- Dùng UUID v4 làm khoá chính khiến chèn dữ liệu chậm dần.
- Giá trị ngẫu nhiên rơi vào khắp chỉ mục. Chuyển sang v7 (hoặc ULID) để giá trị mới luôn tăng dần.
- Báo “không phải UUID hợp lệ”.
- Cần đúng 32 chữ số hex. Nếu có gạch nối phải theo nhóm 8-4-4-4-12; tiền tố urn:uuid: và ngoặc nhọn được chấp nhận.
- Lo trùng UUID v4.
- Với 122 bit ngẫu nhiên, phải tạo khoảng 2,7 × 10^18 mã thì xác suất có một cặp trùng mới chạm 50%. Rủi ro thực tế đến từ bộ sinh số ngẫu nhiên kém, không phải từ chuẩn UUID.
- Dùng UUID làm mã bí mật (link đặt lại mật khẩu).
- v4 từ crypto.randomUUID đủ khó đoán, nhưng v1, v6, v7 lộ thời điểm tạo và một phần có thể đoán được. Token bí mật nên dùng 128 bit ngẫu nhiên thuần.
- Hệ thống chỉ nhận chữ thường.
- RFC 9562 khuyên xuất chữ thường và so sánh không phân biệt hoa thường; tắt “Chữ HOA” trước khi sao chép.
Vì sao UUID gần như không trùng
UUID v4 có 2^122 (khoảng 5,3 × 10^36) giá trị có thể. Ngay cả khi mỗi người trên Trái Đất tạo một tỷ mã, khả năng có hai mã trùng vẫn cực nhỏ. Nhờ vậy nhiều máy có thể tự tạo mã độc lập mà không cần một máy chủ cấp số thứ tự.
Công cụ dùng crypto.randomUUID (hoặc crypto.getRandomValues trên trình duyệt cũ), là nguồn ngẫu nhiên mật mã của hệ điều hành, không dùng Math.random.
UUID v7 được thêm vào chuẩn năm 2024
RFC 9562 (tháng 5/2024) thay RFC 4122 và bổ sung v6, v7, v8. v7 nhanh chóng được PostgreSQL 18, nhiều thư viện và ORM hỗ trợ vì giữ được ưu điểm của số tự tăng (thứ tự) lẫn của UUID (tạo ở bất kỳ đâu).
Thuật ngữ
- UUID / GUID
- Mã định danh duy nhất 128 bit; GUID là tên Microsoft dùng cho cùng khái niệm.
- Phiên bản (version)
- Cách tạo UUID, ghi ở 4 bit đầu nhóm thứ ba.
- Biến thể (variant)
- Bố cục bit của UUID; chuẩn hiện nay là biến thể RFC 9562 (bit 10xx).
- Nil UUID
- 00000000-0000-0000-0000-000000000000, dùng làm giá trị “chưa có”.
- Max UUID
- ffffffff-ffff-ffff-ffff-ffffffffffff, giá trị lớn nhất, có từ RFC 9562.
- Khoá chính
- Cột định danh duy nhất mỗi bản ghi trong bảng cơ sở dữ liệu.
Câu hỏi thường gặp
Nên chọn UUID v4 hay v7?
v7 khi làm khoá chính hoặc cần sắp xếp theo thời gian; v4 khi chỉ cần mã duy nhất và không muốn lộ thời điểm tạo.
UUID có bị trùng không?
Về lý thuyết có thể, thực tế gần như không: với v4 phải tạo hàng tỷ tỷ mã mới đáng lo. v7 còn có phần thời gian nên chỉ có thể trùng trong cùng một mili giây.
UUID tạo ở đây có được lưu lại không?
Không. Mã được tạo bằng nguồn ngẫu nhiên của trình duyệt và chỉ nằm trên trang của bạn.
GUID và UUID khác nhau không?
Cùng là một chuẩn 128 bit. Microsoft gọi là GUID và hay viết chữ hoa trong ngoặc nhọn; nội dung bit như nhau.
Có giải mã được thời điểm từ UUID v4 không?
Không, v4 hoàn toàn ngẫu nhiên. Chỉ v1, v6, v7 chứa thời gian.
Vì sao danh sách v7 tạo cùng lúc có phần đầu giống nhau?
Các mã cùng mili giây có chung 48 bit thời gian; phần bộ đếm phía sau tăng dần để giữ đúng thứ tự khi sắp xếp.
Đánh giá và bình luận
Đang tải…