Tôi đã viết trình tạo / phân tích cú pháp UUID cho Ruby, vì vậy tôi tự cho mình là người hiểu rõ về chủ đề này. Có bốn phiên bản UUID chính:
Các UUID phiên bản 4 về cơ bản chỉ là 16 byte ngẫu nhiên được lấy từ một trình tạo số ngẫu nhiên an toàn bằng mật mã, với một số thao tác chỉnh sửa bit để xác định phiên bản và biến thể của UUID. Những điều này cực kỳ khó xảy ra va chạm, nhưng nó có thể xảy ra nếu một PRNG được sử dụng hoặc nếu bạn chỉ thực sự, thực sự, thực sự, thực sự rất xui xẻo.
UUID phiên bản 5 và phiên bản 3 sử dụng hàm băm SHA1 và MD5 tương ứng để kết hợp không gian tên với một phần dữ liệu đã có duy nhất để tạo UUID. Ví dụ, điều này sẽ cho phép bạn tạo UUID từ một URL. Xung đột ở đây chỉ có thể xảy ra nếu hàm băm bên dưới cũng có xung đột.
UUID phiên bản 1 là phổ biến nhất. Chúng sử dụng địa chỉ MAC của card mạng (địa chỉ này trừ khi bị giả mạo, phải là địa chỉ duy nhất), cộng với dấu thời gian, cộng với việc xoay bit thông thường để tạo UUID. Trong trường hợp máy không có địa chỉ MAC, 6 byte nút được tạo bằng trình tạo số ngẫu nhiên an toàn bằng mật mã. Nếu hai UUID được tạo theo trình tự đủ nhanh để dấu thời gian khớp với UUID trước đó, thì dấu thời gian sẽ tăng lên 1. Sẽ không xảy ra xung đột trừ khi một trong những điều sau xảy ra: Địa chỉ MAC bị giả mạo; Một máy chạy hai ứng dụng tạo UUID khác nhau tạo ra các UUID tại cùng một thời điểm; Hai máy không có card mạng hoặc không có quyền truy cập cấp người dùng vào địa chỉ MAC được cung cấp cùng một chuỗi nút ngẫu nhiên và tạo ra các UUID tại cùng một thời điểm;
Thực tế, không có sự kiện nào trong số này xảy ra một cách tình cờ trong không gian ID của một ứng dụng. Trừ khi bạn đang chấp nhận ID trên quy mô toàn Internet hoặc với một môi trường không đáng tin cậy, nơi các cá nhân độc hại có thể làm điều gì đó xấu trong trường hợp xung đột ID, đó không phải là điều bạn nên lo lắng. Điều quan trọng là phải hiểu rằng nếu bạn tình cờ tạo UUID phiên bản 4 giống như tôi, trong hầu hết các trường hợp, điều đó không thành vấn đề. Tôi đã tạo ID trong không gian ID hoàn toàn khác với ID của bạn. Ứng dụng của tôi sẽ không bao giờ biết về vụ va chạm nên va chạm không thành vấn đề. Thành thật mà nói, trong một không gian ứng dụng duy nhất mà không có tác nhân độc hại, sự tuyệt chủng của tất cả sự sống trên trái đất sẽ xảy ra rất lâu trước khi bạn có va chạm, ngay cả trên UUID phiên bản 4, ngay cả khi bạn '
Ngoài ra, 2 ^ 64 * 16 là 256 exabyte. Như trong, bạn sẽ cần lưu trữ 256 exabyte ID trị giá trước khi bạn có 50% khả năng xảy ra xung đột ID trong một không gian ứng dụng.