2009-11-20 13 views
6

Có khả năng phân biệt GUID với dữ liệu ngẫu nhiên có thể hữu ích khi gỡ lỗi các mã bị che khuất.Có cách nào để phân biệt GUID chỉ với một số ngẫu nhiên không?

Trên Windows mỗi GUID được tạo là phiên bản 4 do đó nó có '4' làm nửa byte đầu tiên của phần thứ ba. Vì vậy, nếu chuỗi 16 byte vi phạm quy tắc đó thì đó không phải là GUID phiên bản 4. Ví dụ,

567E1ECB-EA1C-42D3-A3ED-87A5D824D167 

có thể hoặc là một GUID phiên bản 4 hoặc bất cứ điều gì khác, nhưng

567E1ECB-EA1C-02D3-A3ED-87A5D824D167 //third section starts with 0, not with 4 

không phải là một phiên bản 4 GUID.

Các dấu hiệu khác của khối bộ nhớ 16 byte là hoặc không phải là GUID hợp lệ?

Trả lời

1

của GUID là hệ thập lục phân, vì vậy bạn có thể kiểm tra những gì nhân vật được bao gồm (tức là 'X', 'Y', vv là không hợp lệ)

Kiểm tra wikipedia cho định nghĩa và có thể bạn có thể tìm hiểu thêm ý tưởng đó .

http://en.wikipedia.org/wiki/Globally_Unique_Identifier

+2

Trong khối bộ nhớ 16 byte, bạn chỉ có byte, không phải ký tự và trong biểu diễn thập lục phân (32 nibbles) theo định nghĩa, bạn không có gì trong số đó. – MSalters

1

Bên cạnh đó GUID phiên bản (0100), cũng có một cái gì đó gọi là biến thể GUID. Điều này sẽ là 2 bit (10) trong octet 8. Các bit còn lại một GUID v4 được định nghĩa ngẫu nhiên.

+0

Bạn có nghĩa là trong mỗi GUID 2 bit đầu tiên trong octet 8 phải là "10"? – sharptooth

+0

Trên thực tế, biến thể là ba bit quan trọng nhất của octet 8 - và có thể là '000',' 010', '110' hoặc' 111'. Một tiêu chuẩn là '010' mặc dù và cho GUIDs được tạo ra theo cùng một cách, các bit này sẽ luôn có cùng giá trị. – configurator

+0

Xin lỗi, ý tôi là octet 10. – configurator