1. Đôi nét
UUID (Viết tắt của Universally Unique Identifier), còn được gọi là GUID (Globally Unique Identifier) là 1 trong những quý hiếm duy nhất nhiều năm 128 bit. Một chuỗi UUID chuẩn áp dụng chữ số hex (octet):
0710a5ca-f57e-11e9-802a-5aa538984bd8

Bạn đang xem: Uuid là gì
Bởi vậy UUID Thành lập và hoạt động nhằm mục đích hạn chế và khắc phục đều yếu điểm bên trên. Vậy nếu khách hàng đủ sức phát hành một hệ thống với khá nhiều hệ thống, Ship hàng hàng tỉ tỉ user hoặc chỉ dễ dàng là không muốn để lộ id ra phía bên ngoài, hãy nghĩ tới UUID.
Trong bài xích này, họ đang thuộc tò mò về UUID trong Java, thông qua class UUID.
2. Cấu trúc chuỗi UUID
Chúng ta thuộc coi ví dụ về chuỗi UUID:
123e4567-e89b-42d3-a456-556642440000xxxxxxxx-xxxx-Bxxx-Axxx-xxxxxxxxxxxxA đại diện thay mặt mang đến trở nên thể (variant) xác định bố cục (layout) của UUID. Tất cả các bit khác trong UUID phụ thuộc vào setting của các bit trong trường đổi mới thể (variant field). Biến thể được khẳng định vày 3 bit đặc biệt quan trọng duy nhất của A:
MSB1 MSB2 MSB3 0 X X reserved (0) 1 0 X current variant (2) 1 1 0 reserved for Microsoft (6) 1 1 1 reserved for future (7)Giá trị của A vào UUID là "a ". Tương đương nhị phân của "a" (=10xx) hiển thị biến thể là 2.B đại diện mang đến phiên phiên bản (version). Phiên bạn dạng trong UUID (cực hiếm của B) là 4.
Java cung cấp những thủ tục để lấy ra variant (đổi mới thể) cùng version (phiên bản) của UUID nhỏng sau:
UUID uuid = UUID.randomUUID();int variant = uuid.variant();int version = uuid.version();Đây là 5 phiên bạn dạng không giống nhau cho UUID đổi thay thể 2: Time Based (UUIDv1), DCE Security (UUIDv2), Name Based (UUIDv3 và UUIDv5), Random (UUIDv4).
Xem thêm: Sự Khác Biệt Giữa Url Và Uri Và Url Là Gì? Cấu Trúc Uri Urn Và Url
Java gồm hỗ trợ một implementation mang lại v3 cùng v4, nhưng cũng hỗ trợ một constructor sẽ giúp người dùng chế tạo ra ngẫu nhiên các loại UUID nào:
UUID uuid = new UUID(long mostSigBits, long leastSigBits);
Version 3 & 5
Các UUID được chế tác bằng cách áp dụng hàm băm của namespace và name. Các định danh namespace là những UUID y như Domain Name System (DNS), Object Identifiers (OIDs), URLs,...UUID = hash(NAMESPACE_IDENTIFIER + NAME)Sự biệt lập độc nhất giữa UUIDv3 và UUIDv5 là Thuật toán băm (Hashing Algorithm) - v3 áp dụng MD5 (128 bit) trong những lúc v5 sử dụng SHA-1 (160 bit).Nói một giải pháp đơn giản dễ dàng, họ cắt bớt kết quả băm thành 128 bit cùng kế tiếp sửa chữa thay thế 4 bit mang lại version (phiên bản) và 2 bit mang đến variant (trở thành thể).
Và đây là giải pháp chế tạo ra UUID một số loại 3 vào java:
String source = namespace + name;byte<> bytes = source.getBytes("UTF-8");UUID uuid = UUID.nameUUIDFromBytes(bytes);Java không hỗ trợ implementation mang đến UUID nhiều loại 5.
Version 4
Implementation của UUID v4 trong Java sử dụng các số tình cờ. Class được java implement là SecureRandom. Nó thực hiện một quý giá cần yếu đoán thù trước nhằm tạo nên các số bỗng nhiên nhằm giảm Phần Trăm trùng.Để sinch chuỗi UUID v4, bạn sử dụng:
UUID uuid = UUID.randomUUID();Quý khách hàng có thể sinh unique key áp dụng ‘SHA-256" cùng UUID nhỏng sau:
MessageDigest salternative text = MessageDigest.getInstance("SHA-256");salt.update(UUID.randomUUID().toString().getBytes("UTF-8"));String digest = bytesToHex(salternative text.digest());
3. Kết luận
Cả UUIDv3 và UUIDv5 đều có đông đảo điểm giỏi nhưng mà các hệ thống không giống nhau rất có thể tạo nên và một UUID bằng phương pháp sử dụng và một namespace cùng name. Chúng cơ bản được thực hiện để tạo UUID phân cung cấp.Vì cả nhị hàm băm MD5 với SHA1 mọi bị lỗi, đề nghị tốt nhất có thể kthị xã bạn thực hiện v5. Nếu các bạn chỉ cần chế tạo UUID dễ dàng, loại 4 hoàn toàn có thể thỏa mãn nhu cầu giỏi đến áp dụng của doanh nghiệp.