UUID là gì? Giải thích đầy đủ về số nhận dạng duy nhất trên toàn cầu
Trả lời nhanh
UUID là định danh 128-bit biểu diễn as 36 ký tự (32 chữ hex plus 4 gạch nối). UUID thực tế duy nhất không phối hợp —xác suất collision không đáng kể. UUID v4 (random) là phiên bản phổ biến nhất. Dùng UUID Generator miễn phí.
Giới thiệu
UUID (Universally Unique Identifier), còn gọi GUID (Globally Unique Identifier) trong thuật ngữ Microsoft, là định danh 128-bit thực tế đảm bảo duy nhất không cần phối hợp trung tâm. UUID được định nghĩa bởi RFC 4122 và dùng phổ biến as primary key cơ sở dữ liệu, request ID, session token và định danh hệ thống phân tán. Phiên bản phổ biến nhất là UUID v4, dùng bit ngẫu nhiên.
Từng bước một
-
Hiểu cấu trúc UUID
UUID là 128 bit, được hiển thị dưới dạng 32 chữ số thập lục phân trong 5 nhóm: 8-4-4-4-12, được phân tách bằng dấu gạch nối (ví dụ: 550e8400-e29b-41d4-a716-446655440000). Chữ số thứ 13 cho biết phiên bản (4 cho v4) và chữ số thứ 17 cho biết biến thể.
-
Tìm hiểu các phiên bản UUID
v1: dựa trên thời gian (dấu thời gian + địa chỉ MAC) - được sắp xếp theo thời gian nhưng bị rò rỉ danh tính. v3: dựa trên tên với hàm băm MD5. v4: ngẫu nhiên — phổ biến nhất, không có lo ngại về quyền riêng tư. v5: dựa trên tên với hàm băm SHA-1. v6 và v7: được sắp xếp theo thời gian với quyền riêng tư được cải thiện so với v1.
-
Hiểu xác suất va chạm
UUID v4 có 2^122 giá trị có thể. Xác suất xảy ra va chạm giữa 103 nghìn tỷ UUID là 50%. Để sử dụng thực tế (hàng triệu ID), xác suất xung đột thực sự bằng 0 - bạn có thể tạo UUID một cách độc lập mà không cần phối hợp.
-
Sử dụng UUID một cách thích hợp
Sử dụng v4 cho hầu hết tất cả các trường hợp sử dụng (ID cơ sở dữ liệu, ID yêu cầu, mã thông báo phiên). Sử dụng v7 nếu bạn cần ID theo thứ tự thời gian cho vị trí cơ sở dữ liệu. Tránh v1 trong bối cảnh nhạy cảm về bảo mật — nó nhúng dấu thời gian và địa chỉ MAC.
Ví dụ
UUID v4 (ngẫu nhiên)
đầu vào: Được tạo bằng crypto.getRandomValues
đầu ra: 550e8400-e29b-41d4-a716-446655440000
UUID v1 (dựa trên thời gian)
đầu vào: Dấu thời gian + địa chỉ MAC
đầu ra: a3bbf0ee-d6e4-11ed-a5b3-3c9703e8b4a1
Không __ GIỮ_15__
đầu vào: All zeros
đầu ra: 00000000-0000-0000-0000-000000000000
Các vấn đề thường gặp
- Sử dụng Math.random() cho UUID —nó không an toàn về mặt mật mã. Sử dụng crypto.getRandomValues() hoặc crypto.randomUUID() trong trình duyệt.
- Lưu trữ UUID dưới dạng chuỗi — chuỗi UUID là 36 byte; được lưu trữ dưới dạng loại UUID (16 byte) thì hiệu quả hơn. Sử dụng loại UUID gốc trong cơ sở dữ liệu khi có sẵn.
- Sử dụng v1 trong bối cảnh nhạy cảm về bảo mật —v1 nhúng dấu thời gian và địa chỉ MAC, điều này có thể làm rò rỉ thông tin về thời điểm và vị trí nó được tạo. Sử dụng v4 để ẩn danh.
- Giả sử UUID thực sự là duy nhất—chúng thực tế là duy nhất (xác suất va chạm là không đáng kể), nhưng không được đảm bảo là duy nhất về mặt toán học.
Mẹo
- Sử dụng UUID v4 cho hầu hết mọi trường hợp sử dụng —nó là ngẫu nhiên, không có mối lo ngại về quyền riêng tư và được tất cả các cơ sở dữ liệu hiện đại hỗ trợ.
- Sử dụng crypto.randomUUID() trong các trình duyệt hiện đại để có trình tạo v4 tích hợp mà không cần thư viện.
- Lưu trữ UUID dưới dạng loại UUID/GUID trong cơ sở dữ liệu (16 byte) thay vì chuỗi (36 byte) để có hiệu suất lập chỉ mục và lưu trữ tốt hơn.
- Sử dụng Trình tạo UUID của chúng tôi để tạo UUID ngay trong trình duyệt của bạn — không cần đăng ký, hoàn toàn riêng tư.