UUID Là Gì?
UUID (Universally Unique Identifier, mã định danh duy nhất toàn cầu) là một số 128 bit dùng để gắn nhãn cho những thứ như hàng trong cơ sở dữ liệu, tệp, yêu cầu API và thiết bị mà không cần hỏi một máy chủ trung tâm về ID trống tiếp theo. UUID được viết thành 32 chữ số thập lục phân chia làm năm nhóm, 8-4-4-4-12, ví dụ f47ac10b-58cc-4372-a567-0e02b2c3d479.
UUID được định nghĩa trong RFC 9562 (2024), tiêu chuẩn thay thế RFC 4122 cũ và bổ sung các phiên bản 6, 7 và 8. Chữ số hex đầu tiên của nhóm thứ ba cho biết phiên bản (số 4 trong 4372 ở trên), còn chữ số đầu tiên của nhóm thứ tư cho biết variant (8, 9, a hoặc b với UUID chuẩn).

Giải Thích Các Phiên Bản UUID
Phiên bản nào cũng dùng 128 bit như nhau, nhưng điền chúng theo cách khác nhau. Đây là những phiên bản bạn sẽ thực sự gặp:
122 bit ngẫu nhiên. Không mang ý nghĩa gì bên trong, không có gì để lộ. Là mặc định trong hầu hết ngôn ngữ lập trình (crypto.randomUUID(), uuid.uuid4(), Guid.NewGuid()).
Một Unix timestamp 48 bit tính bằng mili giây, theo sau là các bit ngẫu nhiên, nên ID mới luôn xếp sau ID cũ. RFC 9562 khuyến nghị dùng v7 thay cho v1 và v6.
Một timestamp 60 bit, một clock sequence và một node ID 48 bit, vốn ban đầu là địa chỉ MAC của máy tính. Công cụ của chúng tôi dùng node ngẫu nhiên thay vào đó.
Một UUID namespace cộng với một tên, được băm bằng SHA-1 (v5) hoặc MD5 (v3). Cùng một đầu vào luôn cho ra cùng một UUID. Nên ưu tiên v5.
Các trường của phiên bản 1 được sắp xếp lại để ID xếp theo thời gian. Chủ yếu là cầu nối cho các hệ thống đã dùng v1.
Toàn số 0 (00000000-0000-0000-0000-000000000000) hoặc toàn f. Dùng làm giá trị giữ chỗ cho "không có giá trị" hoặc "cuối phạm vi".
Advertisement
Cách Tạo UUID
v4 cho ID ngẫu nhiên, v7 nếu ID được đưa vào chỉ mục cơ sở dữ liệu hoặc cần sắp xếp theo thời điểm tạo, v5 nếu cùng một tên phải luôn ánh xạ tới cùng một UUID.
Tạo 1, 10, 100 hoặc tối đa 1.000 UUID cùng lúc. Mỗi UUID đều đến từ bộ sinh số ngẫu nhiên an toàn về mật mã của trình duyệt.
Chữ thường chuẩn, {ngoặc nhọn} và chữ hoa cho GUID kiểu Windows, 32 ký tự không có dấu gạch nối, hoặc một URN urn:uuid:.
Sao chép một UUID hoặc cả danh sách, hoặc tải xuống dưới dạng tệp .txt. Địa chỉ trang lưu lại các thiết lập của bạn, nên bạn có thể đánh dấu trang để dùng lại.
UUID và GUID: Có Gì Khác Nhau?
GUID (Globally Unique Identifier) là tên Microsoft đặt cho cùng một thứ. GUID được tạo bởi Guid.NewGuid() trong .NET hoặc New-Guid trong PowerShell chính là một UUID phiên bản 4 chuẩn.
Khác biệt dễ thấy là cách chúng thường được viết: các công cụ Windows thường hiển thị GUID bằng chữ hoa và đặt trong dấu ngoặc nhọn, như {F47AC10B-58CC-4372-A567-0E02B2C3D479}. Đặt định dạng thành GUID có ngoặc nhọn và đánh dấu Chữ hoa để có đúng dạng đó. Ở tầng bên dưới, Windows và .NET lưu ba nhóm đầu theo thứ tự byte little-endian, nên 16 byte thô khác với thứ tự byte của UUID dù phần văn bản giống hệt nhau. Một số GUID COM rất cũ dùng các bit variant riêng của Microsoft, và công cụ giải mã ở trên sẽ gắn nhãn cho chúng.
Advertisement
UUID v4 và v7: Nên Dùng Loại Nào?
Cả hai đều an toàn khi dùng làm ID duy nhất. Khác biệt nằm ở chuyện gì xảy ra khi bạn lưu hàng triệu UUID trong chỉ mục cơ sở dữ liệu.
Dùng v7 cho khóa chính. Vì mỗi UUID v7 mới đều lớn hơn UUID trước đó, các bản ghi mới được chèn vào cuối chỉ mục B-tree thay vì vào các vị trí ngẫu nhiên, giúp chỉ mục gọn và thao tác chèn nhanh trong PostgreSQL và MySQL. SQL Server là ngoại lệ: nó sắp xếp giá trị
uniqueidentifiertheo sáu byte cuối trước, nên v7 không mang lại lợi ích đó ở đây.Dùng v4 khi ID không được tiết lộ bất cứ điều gì. UUID v7 chứa thời điểm tạo chính xác đến mili giây; bất kỳ ai nhìn thấy nó đều có thể đọc thời điểm đó bằng công cụ giải mã ở trên.
Dùng v5 cho ID ổn định từ tên, ví dụ một UUID cho mỗi tên miền hoặc URL, để mọi hệ thống đều tính ra cùng một giá trị mà không cần chia sẻ bảng.
Tránh dùng v1 cho dự án mới. v1 cổ điển nhúng địa chỉ MAC của máy và thời điểm tạo; RFC 9562 khuyến nghị dùng v7 thay thế.
Hai UUID Có Thể Trùng Nhau Không?
Về lý thuyết là có, trên thực tế là không. Một UUID phiên bản 4 có 122 bit ngẫu nhiên, tức khoảng 5,3 × 10^36 giá trị khả dĩ. Bạn sẽ cần tạo khoảng 2,7 tỷ tỷ (2,7 × 10^18) UUID thì mới có 50% khả năng xuất hiện dù chỉ một bản trùng. Con số đó tương đương một tỷ UUID mỗi giây trong khoảng 86 năm.
Rủi ro thật sự là một bộ sinh số ngẫu nhiên bị lỗi, chứ không phải phép toán. Công cụ này dùng crypto.getRandomValues(), nguồn ngẫu nhiên an toàn về mật mã của trình duyệt, và v7 duy trì một bộ đếm để các UUID được tạo trong cùng một mili giây vẫn sắp xếp đúng và không bao giờ lặp lại.
Advertisement
Giải Mã UUID: Phiên Bản, Variant và Timestamp
Mở tab Giải mã và dán một hoặc nhiều UUID, mỗi dòng một UUID, ở dạng chuẩn, có ngoặc nhọn, urn:uuid: hoặc dạng 32 ký tự. Với mỗi UUID, bạn sẽ thấy nó có hợp lệ không, phiên bản và variant của nó, và với v1, v6 và v7 là ngày giờ nó được tạo.
Với UUID v1 và v6, công cụ giải mã còn hiển thị node ID và cho biết nó trông giống địa chỉ MAC thật hay một giá trị ngẫu nhiên. Đây là cách nhanh để kiểm tra xem các ID cũ trong hệ thống của bạn có đang làm lộ địa chỉ phần cứng hay không.
Tạo UUID Trong Code
Hầu hết các ngôn ngữ và cơ sở dữ liệu phổ biến đều tạo được UUID mà không cần cài thêm gói nào. Hỗ trợ phiên bản 7 thì mới hơn: Python 3.14, PostgreSQL 18, .NET 9 và Go 1.27 đã bổ sung nó.
crypto.randomUUID()
// 'f47ac10b-58cc-4372-a567-0e02b2c3d479' (phiên bản 4)import uuid
uuid.uuid4() # ngẫu nhiên
uuid.uuid5(uuid.NAMESPACE_DNS, 'example.com') # dựa trên tên, luôn giống nhau
uuid.uuid7() # Python 3.14+SELECT gen_random_uuid(); -- phiên bản 4 (PostgreSQL 13+)
SELECT uuidv7(); -- phiên bản 7 (PostgreSQL 18+)Guid.NewGuid() // phiên bản 4
Guid.CreateVersion7() // phiên bản 7 (.NET 9+)
# PowerShell
New-Guiduuidgen # UUID ngẫu nhiên (macOS in chữ hoa)
uuidgen --time # phiên bản 1 (util-linux)
cat /proc/sys/kernel/random/uuid # nhân LinuxUUID.randomUUID() // Java, phiên bản 4
uuid.NewV4() // thư viện chuẩn Go 1.27+, phiên bản 4
uuid.NewV7() // Go 1.27+, phiên bản 7
// Go cũ hơn: github.com/google/uuid (uuid.New, uuid.NewV7)Advertisement
Thêm Công Cụ Cho Lập Trình Viên
Các công cụ miễn phí khác dành cho lập trình viên và quản trị hệ thống, tất cả đều chạy trong trình duyệt của bạn: