1. Đôi nét

UUID (Viết tắt của Universally Unique Identifier), nói một cách khác là GUID (Globally Unique Identifier) là một cực hiếm tốt nhất dài 128 bit. Một chuỗi UUID chuẩn áp dụng chữ số hex (octet):

0710a5ca-f57e-11e9-802a-5aa538984bd8

*
Mục đích của UUID hiện ra là vày vì:

Dữ liệu phệ, phong cách khóa bao gồm tự động imcrement nên các byte để giữ hơn. Và khóa chủ yếu loại này sẽ không phù hợp lúc mà lại khối hệ thống có khá nhiều VPS, các client đồng thời truy vấn trên toàn quả đât.

Bạn đang xem: Uuid là gì

vì vậy UUID thành lập và hoạt động nhằm khắc phục đầy đủ điểm yếu bên trên. Vậy nếu bạn đủ sức kiến tạo một khối hệ thống với khá nhiều server, ship hàng hàng tỉ tỉ user hoặc chỉ dễ dàng là không muốn nhằm lộ id ra phía bên ngoài, hãy nghĩ về cho tới UUID.

Trong bài xích này, bọn họ vẫn cùng tò mò về UUID trong Java, trải qua class UUID.

2. Cấu trúc chuỗi UUID

Chúng ta cùng coi ví dụ về chuỗi UUID:

123e4567-e89b-42d3-a456-556642440000xxxxxxxx-xxxx-Bxxx-Axxx-xxxxxxxxxxxxA thay mặt đại diện cho vươn lên là thể (variant) khẳng định bố cục tổng quan (layout) của UUID. Tất cả những bit không giống vào UUID dựa vào vào setting của các bit trong ngôi trường biến chuyển thể (variant field). Biến thể được xác định bởi vì 3 bit quan trọng đặc biệt tuyệt 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 trong UUID là "a ". Tương đương nhị phân của "a" (=10xx) hiển thị vươn lên là thể là 2.B thay mặt cho phiên bản (version). Phiên phiên bản trong UUID (quý hiếm của B) là 4.

Java cung cấp các cách tiến hành để mang ra variant (biến hóa thể) với version (phiên bản) của UUID như sau:

UUID uuid = UUID.randomUUID();int variant = uuid.variant();int version = uuid.version();Đây là 5 phiên phiên bản khác nhau đến UUID thay đổi thể 2: Time Based (UUIDv1), DCE Security (UUIDv2), Name Based (UUIDv3 với UUIDv5), Random (UUIDv4).

Xem thêm: Other Current Assets ( Oca Là Gì, Nghĩa Của Từ Oca, Other Current Assets (Oca) Là Gì

Java gồm cung ứng một implementation mang đến v3 với v4, tuy vậy cũng hỗ trợ một constructor sẽ giúp đỡ người dùng sinh sản bất kỳ một số loại UUID nào:

UUID uuid = new UUID(long mostSigBits, long leastSigBits);

Version 3 và 5

Các UUID được sinh sản bằng cách thực hiện hàm băm của namespace cùng name. Các định danh namespace là những UUID y hệt như Domain Name System (DNS), Object Identifiers (OIDs), URLs,...

UUID = hash(NAMESPACE_IDENTIFIER + NAME)Sự biệt lập tuyệt nhất thân UUIDv3 cùng UUIDv5 là Thuật toán băm (Hashing Algorithm) - v3 sử dụng MD5 (128 bit) trong những khi v5 sử dụng SHA-1 (160 bit).Nói một cách đơn giản, bọn họ cắt bớt công dụng băm thành 128 bit cùng kế tiếp sửa chữa thay thế 4 bit cho version (phiên bản) cùng 2 bit mang lại variant (biến đổi thể).

Và đây là cách chế tạo UUID các loại 3 trong java:

String source = namespace + name;byte<> bytes = source.getBytes("UTF-8");UUID uuid = UUID.nameUUIDFromBytes(bytes);Java không cung cấp implementation cho UUID nhiều loại 5.

Version 4

Implementation của UUID v4 vào Java áp dụng các số ngẫu nhiên. Class được java implement là SecureRandom. Nó thực hiện một giá trị quan trọng đoán trước nhằm tạo thành các số hốt nhiên nhằm sút Xác Suất trùng.Để sinh chuỗi UUID v4, bạn sử dụng:

UUID uuid = UUID.randomUUID();Quý Khách có thể sinch quality key áp dụng ‘SHA-256" cùng UUID nlỗi sau:

MessageDigest salt = MessageDigest.getInstance("SHA-256");salternative text.update(UUID.randomUUID().toString().getBytes("UTF-8"));String digest = bytesToHex(salternative text.digest());

3. Kết luận

Cả UUIDv3 với UUIDv5 đều có đa số điểm tốt mà các hệ thống không giống nhau rất có thể tạo ra và một UUID bằng cách áp dụng cùng một namespace cùng name. Chúng cơ bạn dạng được sử dụng nhằm chế tác UUID phân cấp.

Vì cả nhì hàm băm MD5 và SHA1 đầy đủ bị hỏng, đề xuất rất tốt kthị xã bạn thực hiện v5. Nếu bạn chỉ cần sinh sản UUID đơn giản và dễ dàng, một số loại 4 có thể đáp ứng nhu cầu xuất sắc cho vận dụng của công ty.

Bài viết liên quan

Trả lời

Email của bạn sẽ không được hiển thị công khai. Các trường bắt buộc được đánh dấu *