Tạo UUID
Tạo ngay một UUID v4 ngẫu nhiên hoặc một UUID v7 sắp xếp theo thời gian, hoặc tới 10.000 UUID cùng lúc. Đây cũng là công cụ tạo GUID online: một GUID mới chính là cùng loại giá trị 128 bit đó. Dán bất kỳ UUID nào để giải mã phiên bản, thời điểm tạo và từng trường của nó.
Chữ số tô màu là phiên bản: chữ số đầu tiên của nhóm thứ ba trong mọi UUID.
Tạo và đọc ngay trong trình duyệt của bạn bằng crypto.getRandomValues; không gửi gì đi.
UUID là gì, và UUID là viết tắt của từ gì?
UUID là viết tắt của Universally Unique Identifier (mã định danh duy nhất phổ quát): một nhãn 128 bit mà bất kỳ máy tính nào cũng tự tạo được, mà vẫn có thể tin rằng không máy nào khác tạo ra đúng nhãn đó. Nó được viết thành 32 chữ số thập lục phân chia làm năm nhóm, ví dụ 919108f7-52d1-4320-9bac-f847db4148a8.
Định dạng này được định nghĩa trong RFC 9562 (tháng 5 năm 2024), văn bản thay thế RFC 4122 và bổ sung các phiên bản 6, 7 và 8. Không có cơ quan đăng ký trung tâm nào cấp phát UUID: tính duy nhất đến từ sự ngẫu nhiên, từ dấu thời gian hoặc từ việc băm một cái tên, tùy theo phiên bản.
Cơ sở dữ liệu dùng UUID làm khóa chính, API dùng làm ID cho yêu cầu và đối tượng, hệ điều hành dùng cho ổ đĩa, phân vùng và thành phần phần mềm. GUID (Globally Unique Identifier, mã định danh duy nhất toàn cầu) là tên Microsoft đặt cho chính thứ này.
UniversallyUniqueIDentifier
- 128 bit
- 16 byte
- 32 chữ số hex
- 36 ký tự kể cả dấu gạch ngang
919108f7-52d1-4320-9bac-f847db4148a8
GUIDTên Microsoft đặt cho cùng giá trị này

Chọn phiên bảnv4 ngẫu nhiên, v7 theo thời gian, v5 dựa trên tên và các phiên bản khác, mỗi loại một màu riêng.Một cú nhấpSao chép, hoặc tạo cái mới; một loạt tới 10.000 UUID được xuất ra dạng văn bản, CSV, JSON hoặc SQL.Từng trườngCác bit mà RFC 9562 định nghĩa cho phiên bản này, kèm thời gian đọc ra từ một UUID v7.Mọi định dạngNgoặc nhọn, không gạch ngang, chữ hoa, Base64url, số nguyên hoặc thứ tự byte của .NET.Định dạng và độ dài UUID: 36 ký tự
Một UUID dài 128 bit, được viết thành 32 chữ số hex và 4 dấu gạch ngang theo các nhóm 8, 4, 4, 4 và 12: tổng cộng 36 ký tự. Chữ số đầu tiên của nhóm thứ ba là phiên bản, còn chữ số đầu tiên của nhóm thứ tư cho biết biến thể (variant): 8, 9, a hoặc b với UUID theo RFC 9562.
Vậy 017f22e2-79b0-7cc3-98c4-dc0c0c07398f là phiên bản 7, biến thể RFC. Chữ hoa, chữ thường hay lẫn cả hai đều hợp lệ; phần lớn công cụ in chữ thường, còn uuidgen của macOS in chữ hoa. Không có dấu gạch ngang, UUID dài 32 ký tự; trong ngoặc nhọn là 38 (định dạng B của .NET), ở dạng urn:uuid: là 45, và ở dạng Base64url là 22.
Biểu thức chính quy (regex) kiểm tra dạng chuẩn RFC: ^[0-9a-f]{8}-[0-9a-f]{4}-[1-8][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$ kèm cờ không phân biệt hoa thường. Nó từ chối UUID Nil và UUID Max, hai giá trị hợp lệ nhưng đặc biệt; bộ giải mã ở trên gọi đúng tên chúng.
32 chữ số hex + 4 dấu gạch ngang = 36 ký tự
xxxxxxxx-xxxx-Mxxx-Nxxx-xxxxxxxxxxxxM phiên bản: 1–8N biến thể: 8, 9, a hoặc b^[0-9a-f]{8}-[0-9a-f]{4}-[1-8][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$- Chuẩn36
- Không gạch ngang32
- Ngoặc nhọn {…}38
- urn:uuid:45
- Base64url22
- Base6424
- Base5821
- Base3226
- Số nguyêntối đa 39
- Nhị phân16 byte
Các phiên bản UUID: từ v1 đến v8
Phiên bản cho biết UUID được tạo ra như thế nào: v4 từ các bit ngẫu nhiên, v7 từ thời gian cộng các bit ngẫu nhiên, v1 và v6 từ dấu thời gian và một node ID, v3 và v5 bằng cách băm một cái tên, còn v8 theo bố cục riêng của bên tạo ra nó.
Phiên bản 2 và 0 không được tạo ở đây: v2 (DCE Security) chỉ được giữ chỗ và RFC 9562 không định nghĩa bố cục của nó, còn 0 không phải là một phiên bản. Hai giá trị đặc biệt không có phiên bản: UUID Nil toàn bit 0 và UUID Max toàn bit 1 (ffffffff-ffff-ffff-ffff-ffffffffffff, mới có từ RFC 9562).
Với hệ thống mới, RFC 9562 khuyến nghị dùng v7 thay cho v1 và v6, và v5 thay cho v3. v4 vẫn là lựa chọn đơn giản khi giá trị không nên tiết lộ gì về thời điểm nó được tạo.
- thời gian
- ngẫu nhiên
- băm
- chuỗi đồng hồ
- node ID
- phiên bản
- biến thể
UUID v4 và UUID v7: nên dùng loại nào?
Hãy dùng v7 cho khóa cơ sở dữ liệu và mọi thứ bạn sắp xếp hoặc đánh chỉ mục: nó bắt đầu bằng thời điểm tạo, nên các dòng mới nằm ở cuối chỉ mục. Hãy dùng v4 khi ID không được để lộ thời điểm tạo: cả 122 bit tự do của nó đều ngẫu nhiên.
Khóa v4 ngẫu nhiên rải mỗi lần chèn ra khắp chỉ mục B-tree, làm các trang bị tách và buộc nhiều phần hơn của chỉ mục phải luôn nằm trong bộ nhớ; khóa v7 đến theo thứ tự như một số tự tăng (auto-increment), nhưng máy chủ nào cũng tạo được mà không cần hỏi cơ sở dữ liệu. Một UUID v7 giữ 74 bit ngẫu nhiên cho mỗi mili giây, nên hai máy chủ cùng tạo một UUID trong cùng một khoảnh khắc vẫn không bị trùng.
Cái giá phải trả: ai nhìn thấy một UUID v7 cũng đọc được mili giây nó được tạo (hãy dán một UUID vào bộ giải mã ở trên để xem). Nếu điều đó quan trọng, hãy dùng v4, hoặc chỉ dùng v7 trong nội bộ và hiển thị một ID khác ra bên ngoài.
c100eb4b-4f3f-4b29-ad77-da7cd9d1eda592c97333-2db8-4fc2-b5b6-cedd8c7abede01a16d3e-e1c0-70f6-99ec-6d454991b2fa01a16d3e-e1c0-70f6-99ec-6d45c2f6b35b- đã có trong chỉ mục
- trống
- v4 mới
- v7 mới
- tách trang: một nửa số khóa chuyển sang trang mới
GUID là gì, và GUID có khác UUID không?
GUID và UUID là cùng một giá trị 128 bit với cùng một dạng văn bản; GUID là tên Microsoft đặt cho nó. Guid.NewGuid() trong .NET tạo một UUID phiên bản 4 ngẫu nhiên, còn Guid.CreateVersion7() của .NET 9 tạo một UUID phiên bản 7.
Khác biệt nằm ở bộ nhớ. Cấu trúc GUID của Microsoft lưu ba nhóm đầu dưới dạng số nguyên little-endian, nên ToByteArray() của .NET trả về 8 byte đầu theo thứ tự khác với thứ tự byte mạng (network byte order) của RFC 9562: 919108f7-52d1-… trở thành các byte f7 08 91 91 d1 52 …. Văn bản giống hệt nhau; byte thô chuyển giữa các hệ thống thì cần được chuyển đổi. Bộ giải mã hiển thị cả hai thứ tự.
uniqueidentifier của SQL Server còn sắp xếp theo sáu byte cuối trước, nên giá trị v7 không giữ được thứ tự thời gian ở đó; NEWSEQUENTIALID() tạo ra các giá trị giữ được thứ tự, dù chúng có thể bắt đầu lại từ giá trị thấp hơn sau khi khởi động lại và rất dễ đoán. GUID COM cũ có thể mang các bit biến thể riêng của Microsoft thay vì của RFC 9562; bộ giải mã gọi đúng tên biến thể đó.
919108f7-52d1-4320-9bac-f847db4148a8- Data1 · 4 byte, đảo ngược
- Data2 · đảo ngược
- Data3 · đảo ngược
- Data4 · giữ nguyên
Cách tạo UUID trong code
Hầu hết các ngôn ngữ tạo được UUID v4 chỉ với một dòng, và nhiều ngôn ngữ nay đã tạo được cả v7: uuid.uuid7() của Python 3.14, Guid.CreateVersion7() của .NET 9, UUID.ofEpochMillis() của Java 26, uuid.NewV7() của Go 1.27, crypto.randomUUIDv7() của Node.js 26.1 và uuidv7() của PostgreSQL 18. Trình duyệt vẫn chỉ có crypto.randomUUID(), hàm tạo v4.
Chọn ngôn ngữ của bạn để xem câu lệnh một dòng. Không phải v7 nào cũng giữ thứ tự cho các UUID tạo trong cùng một mili giây: của Python và Go thì có, còn của .NET và Node thì không cam kết. Ngoài ra, UUID() của MySQL trả về UUID phiên bản 1, loại mà trên Linux và Windows mang địa chỉ MAC thật của máy chủ.
Hàm UUID có sẵn trong từng ngôn ngữ
import uuid
uuid.uuid4() # v4
uuid.uuid7() # v7, Python 3.14+
uuid.uuid5(uuid.NAMESPACE_DNS, "www.example.com") # v5
uuid7() giữ một bộ đếm 42 bit, nên các UUID trong cùng một mili giây vẫn đúng thứ tự.
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 v4 có 122 bit ngẫu nhiên, khoảng 5,3 × 10³⁶ giá trị. Bạn sẽ phải tạo khoảng 103 nghìn tỷ UUID mới có xác suất một phần tỷ để hai cái bất kỳ trùng nhau, và khoảng 2,7 tỷ tỷ (2,7 × 10¹⁸) UUID mới có xác suất 50%.
Đó là cận ngày sinh (birthday bound): với n giá trị ngẫu nhiên trong N giá trị có thể, xác suất có một lần lặp lại xấp xỉ 1 − e^(−n(n−1)/2N). Nếu tạo một tỷ UUID mỗi giây, phải mất khoảng 86 năm mới đạt xác suất 50%. Trùng lặp thực tế đến từ các bộ tạo bị lỗi: seed không ngẫu nhiên, máy ảo được nhân bản cùng trạng thái ngẫu nhiên của nó, hoặc ID bị sao chép thủ công.
Với v7, chỉ những UUID tạo trong cùng một mili giây mới có thể trùng, và 74 bit ngẫu nhiên phân biệt chúng. Bộ tạo ở đây còn giữ một loạt UUID theo đúng thứ tự ngay trong cùng một mili giây (RFC 9562 §6.2), nên 10.000 UUID tạo cùng lúc vừa duy nhất vừa được sắp xếp.
Với tốc độ một tỷ UUID mỗi giây, tạo được ngần ấy cần 1 giây.
Giải mã UUID: cách đọc dấu thời gian của một UUID
Dán một UUID vào Giải mã & kiểm tra, bộ giải mã và kiểm tra UUID ở trên: nó đọc phiên bản và biến thể từ hai vị trí cố định, rồi đọc các trường mà phiên bản đó định nghĩa. UUID v7 cho biết mili giây nó được tạo, còn v1 hoặc v6 cho biết thời gian chính xác đến 100 nano giây, cùng một chuỗi đồng hồ (clock sequence) và một node ID.
Node của v1 hoặc v6 có bit multicast bằng 0 có thể là địa chỉ MAC thật của card mạng; hãy tra nhà sản xuất của nó bằng tra cứu địa chỉ MAC. Các bộ tạo tôn trọng quyền riêng tư sẽ bật bit đó và dùng node ngẫu nhiên, như bộ tạo này.
Thời gian là thứ bộ tạo đã ghi vào, không phải bằng chứng về thời điểm UUID được tạo. v4 không chứa thời gian, chỉ có bit ngẫu nhiên, còn v3, v5 và v8 chứa giá trị băm: không có gì để đọc ngược lại, và giá trị băm không thể đảo ngược ra tên ban đầu. Dán một danh sách để kiểm tra tới 1.000 UUID cùng lúc: dòng không hợp lệ, UUID trùng lặp và các UUID dựa trên thời gian có đúng thứ tự hay không.
017f22e2-79b0-7cc3-98c4-dc0c0c07398f- unix_ts_ms
0x017f22e279b0 - ms kể từ 1970
1 645 557 742 000 - UTC
2022-02-22T19:22:22.000Z
c232ab00-9414-11ec-b3c8-9f6bdeced846- time_high · time_mid · time_low
1ec 9414 c232ab00 - bước 100 ns kể từ 1582-10-15
138 648 505 420 000 000 - UTC
2022-02-22T19:22:22.0000000Z
Cùng một thời điểm: các ví dụ của RFC 9562 được tạo cùng lúc.
UUID dựa trên tên: v5 và v3
UUID v5 là giá trị băm SHA-1 của một UUID namespace (không gian tên) cộng với một tên, cắt còn 128 bit rồi đặt các bit phiên bản và biến thể; v3 làm tương tự với MD5. Cùng namespace và cùng tên luôn cho ra cùng một UUID, trên bất kỳ máy tính nào: chọn v5 ở trên để dùng trang này như một công cụ tạo UUID v5.
RFC 9562 định nghĩa bốn namespace: DNS cho tên miền, URL, OID và X.500. Vì vậy www.example.com trong namespace DNS luôn là 2ed6657d-e927-568b-95e1-2665a8aea6a2 ở dạng v5. Hãy dùng UUID dựa trên tên để cấp một ID ổn định cho thứ vốn đã có tên duy nhất, mà không cần lưu bảng ánh xạ.
Hãy chọn v5 thay vì v3: MD5 yếu hơn, và RFC 9562 khuyến nghị v5. Cả hai đều không phải là cách để giấu tên: ai đoán được tên cũng tính ra được đúng UUID đó. Tùy chọn v8 ở đây dùng SHA-256 theo cùng cách, như ví dụ v8 trong chính RFC.
- Namespace
6ba7b810-9dad-11d1-80b4-00c04fd430c8DNS · 16 byte - Tên
"www.example.com"UTF-8 · 15 byte - Giá trị băm SHA-1, 160 bit
2ed6657de927468b55e12665a8aea6a22dee3e35giữ lại 128 bit đầu - UUID kết quả
2ed6657d-e927-568b-95e1-2665a8aea6a2chữ số phiên bản 4 → 5 · chữ số biến thể 5 → 9
- DNS
6ba7b810… - URL
6ba7b811… - OID
6ba7b812… - X.500
6ba7b814…
ULID và UUID v7 (cùng các loại ID khác)
ULID và UUID v7 đều bắt đầu bằng dấu thời gian mili giây 48 bit và sắp xếp được theo thời gian. Khác biệt: ULID dùng toàn bộ 80 bit còn lại cho phần ngẫu nhiên và được viết thành 26 ký tự Base32, còn v7 dành 6 bit cho phiên bản và biến thể, và vừa với mọi cột và thư viện UUID.
Nếu cơ sở dữ liệu, ORM hoặc API của bạn đã dùng UUID, v7 cho bạn thứ tự thời gian mà không cần một kiểu dữ liệu mới. NanoID và các ID ngắn tương tự là chuỗi ngẫu nhiên có độ dài tùy chọn, không có thời gian và không có bố cục chuẩn. Mọi UUID cũng có thể được viết ngắn hơn: 22 ký tự ở dạng Base64url, tối đa 22 ở dạng Base58.
- mili giây kể từ 1970
- ngẫu nhiên
- phiên bản và biến thể
Dùng UUID làm token có an toàn không?
Không. RFC 9562 nói không được cho rằng UUID khó đoán, và không bao giờ được dùng UUID như một quyền truy cập bảo mật (security capability): một ID mà ai nắm giữ cũng được cấp quyền truy cập, như liên kết đặt lại mật khẩu hay khóa API.
Một UUID v4 từ bộ tạo tốt là ngẫu nhiên, nhưng v1, v6 hoặc v7 để lộ thời điểm tạo, còn v3 hoặc v5 có thể được tính lại từ tên của nó. Với dữ liệu bí mật, hãy dùng token được tạo cho mục đích đó, chẳng hạn 256 bit ngẫu nhiên từ một bộ tạo số ngẫu nhiên mật mã, và kiểm tra quyền trên mọi yêu cầu. UUID vẫn ổn khi làm ID công khai nếu quyền truy cập được kiểm tra riêng.
Tạo UUID: hỏi và đáp
Làm thế nào để tạo UUID?
crypto.randomUUID() trong JavaScript, uuid.uuid4() trong Python và Guid.NewGuid() trong C# đều tạo một UUID v4 chỉ với một dòng.UUID là viết tắt của từ gì?
GUID có giống UUID không?
Nên dùng phiên bản UUID nào?
Hai UUID có bao giờ trùng nhau không?
Có giải mã được UUID không?
Độ dài của UUID là bao nhiêu?
GUID rỗng hay UUID Nil là gì?
UUID v7 có sắp xếp được không?
Dùng UUID làm mật khẩu hoặc access token có an toàn không?
UUID tạo ở đây có bị gửi đi đâu không?
Còn thiếu điều gì?Đề xuất tính năng hoặc công cụ mới
Công cụ liên quan
Tạo Mật Khẩu
Tạo mật khẩu mạnh ngẫu nhiên, cụm mật khẩu và mã PIN ngay trên trình duyệt, kèm số bit và thời gian bẻ khóa
Tra Cứu Địa Chỉ MAC
Xác định nhà sản xuất thiết bị từ địa chỉ MAC bằng cơ sở dữ liệu IEEE
Máy Tính Subnet
Địa chỉ mạng, broadcast, số host dùng được và mask cho mọi khối IPv4 hoặc IPv6, kèm VLSM, chia subnet và subnet trên cloud
Kí Tự Trống
Sao chép và dán kí tự trống hoặc dấu cách tàng hình, tìm và xóa ký tự ẩn trong văn bản