RevealTheme logo

Bộ tạo UUID

Tạo UUID v4 (định danh duy nhất toàn cầu ngẫu nhiên). Mỗi lần nhấp tạo ra một UUID mới.

Cách sử dụng công cụ này

  1. 1

    Click the Generate UUID button to produce a fresh random v4 UUID.

  2. 2

    Read the 36-character identifier shown in the canonical 8-4-4-4-12 format below the button.

  3. 3

    Click Copy to put the UUID on your clipboard for pasting into code, a database, or a config file.

  4. 4

    Click Generate UUID again whenever you need another one — every click replaces the value with a brand-new random UUID.

UUID là gì và tại sao phần mềm lại dùng nó?

UUID (Universally Unique Identifier, đôi khi được gọi là GUID trong ngữ cảnh Microsoft) là một giá trị 128 bit được dùng để định danh các thực thể mà không cần sự phối hợp giữa các hệ thống. Ý tưởng của UUID là hai chương trình khác nhau, chạy trên hai máy khác nhau và không hề biết về nhau, có thể tạo ra các UUID và tin tưởng rằng chúng sẽ không bao giờ trùng nhau. Thuộc tính đó tạo điều kiện cho thiết kế hệ thống phân tán: bạn có thể để bất kỳ dịch vụ nào tự tạo định danh tại chỗ mà không cần một bộ đếm trung tâm, hợp nhất các cơ sở dữ liệu mà không cần đánh số lại các hàng, và tạo trước các định danh ở phía máy khách trước cả khi máy chủ nhìn thấy yêu cầu. UUID có năm phiên bản chuẩn được định nghĩa bởi RFC 4122: v1 (dựa trên thời gian + địa chỉ MAC, làm lộ thời điểm tạo và danh tính của máy), v3 (hàm băm MD5 của một không gian tên + tên), v4 (ngẫu nhiên, phổ biến nhất), v5 (hàm băm SHA-1 của một không gian tên + tên). RFC 9562 đã bổ sung v6 (sắp xếp theo thời gian, giống v1 nhưng không làm lộ MAC) và v7 (Unix timestamp + ngẫu nhiên, được thiết kế riêng cho khóa chính của cơ sở dữ liệu vì nó được sắp xếp theo trình tự thời gian). Công cụ này tạo UUID v4 bằng crypto.randomUUID(), vốn sử dụng tính ngẫu nhiên mạnh về mặt mật mã từ hệ điều hành nền tảng của trình duyệt, cùng một nguồn mà các khóa TLS được tạo ra. Đầu ra giống hệt từng byte với đầu ra của uuid.uuid4() trong Python, crypto.randomUUID() của Node và google/uuid.NewRandom() của Go.

Các trường hợp sử dụng phổ biến

  • Khóa chính cơ sở dữ liệu — thay thế số nguyên tự tăng khi bạn cần hợp nhất cơ sở dữ liệu hoặc tạo ID ở phía client.

  • Định danh phiên trong cookie — đủ dài để việc dò tìm một ID phiên hợp lệ bằng brute-force là bất khả thi về mặt tính toán.

  • Khóa idempotency cho các yêu cầu API — lặp lại yêu cầu một cách an toàn; máy chủ khử trùng lặp theo UUID.

  • Định danh tải tệp lên — đặt tên tệp được tải lên bằng UUID để tránh xung đột đường dẫn và không lộ tên tệp gốc.

  • ID truy vết phân tán — mỗi yêu cầu nhận một UUID, được lan truyền qua các dịch vụ để tương quan nhật ký.

  • Định danh fixture kiểm thử — tính ngẫu nhiên có thể dự đoán cho dữ liệu kiểm thử mà không cần phối hợp ID giữa các ca kiểm thử.

Câu hỏi thường gặp

v4 nghĩa là gì?
Phiên bản 4: được tạo từ 122 bit ngẫu nhiên cộng với 6 bit cố định cho phiên bản/biến thể. Các phiên bản khác: v1 dựa trên mốc thời gian + MAC (đừng dùng nó; làm lộ danh tính của máy và thời điểm), v3/v5 là các hàm băm xác định của một không gian tên + tên (hữu ích cho các định danh dẫn xuất ổn định), v7 là ngẫu nhiên với tiền tố mốc thời gian (rất tốt cho cơ sở dữ liệu vì được sắp xếp theo trình tự thời gian). Với hầu hết các trường hợp, v4 là lựa chọn mặc định đúng đắn.
UUID thực sự duy nhất đến mức nào?
UUID v4 có 122 bit ngẫu nhiên hữu hiệu: 5,3×10^36 giá trị có thể có. Bạn sẽ phải tạo ra 2,71 tỷ tỷ UUID trước khi đạt tới xác suất trùng lặp 50 %. Để dễ hình dung, nếu bạn tạo một tỷ UUID mỗi giây, bạn sẽ cần 85 năm để đạt tới ngưỡng đó. Trùng lặp trên thực tế không xảy ra với một bộ tạo số ngẫu nhiên tốt.
Tôi nên dùng v4 hay v7 cho khóa chính của cơ sở dữ liệu?
v7 tốt hơn cho cơ sở dữ liệu. UUID v4 mang tính ngẫu nhiên, nghĩa là các hàng mới được phân tán ngẫu nhiên khắp các chỉ mục B-tree, gây phình to chỉ mục và làm chậm các thao tác chèn ở quy mô lớn. v7 đặt mốc thời gian lên đầu, nên các UUID mới luôn được sắp xếp sau các UUID cũ, duy trì các mẫu chèn tuần tự. PostgreSQL, MySQL và SQL Server đều hưởng lợi từ v7. Nếu thư viện của bạn chưa hỗ trợ v7, ULID là một lựa chọn thay thế phổ biến với cùng thuộc tính đó.
Dùng crypto.randomUUID() có an toàn không?
Có. Nó được quy định trong WHATWG và được triển khai trong mọi trình duyệt hiện đại thông qua bộ tạo số ngẫu nhiên mật mã của hệ điều hành (cùng một nguồn mà các khóa TLS được tạo ra). Đầu ra là không thể đoán trước và được phân bố đều khắp không gian UUID v4.
Sự khác biệt giữa UUID và GUID là gì?
Chúng giống nhau về mặt chức năng: GUID là thuật ngữ của Microsoft cho cùng một khái niệm. Định dạng byte khác nhau ở một số API của Microsoft (Guid.ToByteArray() của .NET dùng thứ tự byte hỗn hợp ở ba trường đầu tiên), vì vậy khi tính tương tác quan trọng, hãy để ý đến thứ tự byte. Định dạng chuỗi chuẩn (8-4-4-4-12) thì giống hệt nhau.
Tôi có thể rút gọn một UUID để dùng trong URL không?
Có: mã hóa 128 bit sang Base62 hoặc Base64 thay vì định dạng thập lục phân chuẩn. Base62 cho bạn 22 ký tự; Base64 cho 22 ký tự có ký tự đệm hoặc 22 ký tự ở biến thể an toàn cho URL. Một số thư viện cũng dùng các định dạng 'UUID ngắn'. Các bit nền tảng không thay đổi; chỉ có cách mã hóa hiển thị là khác.
Tại sao UUID của tôi bắt đầu bằng các ký tự giống với một UUID khác?
Đó là sự trùng hợp: UUID v4 mang tính ngẫu nhiên. Với tổng cộng 36 ký tự thập lục phân và chỉ 22 ký tự thập lục phân ngẫu nhiên (4 ký tự được dành riêng cho phiên bản/biến thể và 4 ký tự là dấu gạch nối), một số trùng hợp về tiền tố là điều khó tránh khi bạn tạo nhiều UUID. UUID đầy đủ vẫn là duy nhất ngay cả khi các tiền tố trùng nhau.

Công cụ liên quan