UUID Decoding là gì?
giải mã UUID là quá trình phân tích UUID để trích xuất thông tin về:
- Version: Phiên bản UUID là phiên bản nào (1-8) dựa trên 4 bit ở vị trí 48-51
- Variant: Biến thể UUID nào (thường là RFC 4122) dựa trên các bit 64-65
- Components: Trích xuất dấu thời gian, node ID hoặc dữ liệu khác dựa trên phiên bản
- Thời gian tạo: Dành cho UUID dựa trên thời gian (v1, v6, v7)
Example: 123e4567-e89b-12d3-a456-426614174000 là một UUID Phiên bản 1 với dấu thời gian 2228-06-25T20:01:28.545Z khi hiển thị ở độ chính xác mili giây trong JavaScript.
Tổng quan cấu trúc UUID
| Format | Description |
|---|---|
| 8-4-4-4-12 | 32 chữ số hex được nhóm với dấu gạch ngang |
| Các bit phiên bản | Các bit 48-51 (ký tự thứ 13) |
| Các bit biến thể | Các bit 64-65 (ký tự thứ 17) |
Số phiên bản xuất hiện là chữ số hex đầu tiên trong nhóm thứ ba (ví dụ, 123e4567-e89b-12d3-a456-426614174000 cho phiên bản 1).
Giải mã theo phiên bản UUID
| Version | Những gì có thể giải mã |
|---|---|
| UUID v1 |
|
| UUID v3/v5 |
|
| UUID v4 |
|
| UUID v6 |
|
| UUID v7 |
|
Trích xuất dấu thời gian từ UUID
| Loại UUID | Phương pháp trích xuất thời gian | Epoch |
|---|---|---|
| UUID v1 | Kết hợp các bit 0-31, 32-47 và 48-59, sắp xếp lại các thành phần dấu thời gian | 15 tháng 10 năm 1582 |
| UUID v6 | Kết hợp các bit 0-47 với các bit 52-63; các bit 48-51 là phiên bản và được loại trừ | 15 tháng 10 năm 1582 |
| UUID v7 | Trích xuất các bit 0-47 (mili giây Unix) | 1 tháng 1 năm 1970 |
Quy tắc kiểm tra UUID
- Kiểm tra định dạng: 8-4-4-4-12 chữ số hệ thập lục phân với dấu gạch ngang
- Kiểm tra phiên bản: Ký tự thứ 13 phải là 1-8
- Kiểm tra biến thể: Ký tự thứ 17 phải là 8, 9, A hoặc B (theo RFC 4122)
Biểu thức chính quy để kiểm tra UUID cơ bản:
^[0-9a-f]{8}-[0-9a-f]{4}-[1-8][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$Ví dụ dấu thời gian UUID v7
017f22e2-79b0-7cc3-98c4-dc0c0c07398f là vector kiểm thử RFC 9562 cho UUIDv7. 48 bit đầu tiên của nó là mili giây Unix, giải mã ra 2022-02-22T19:22:22.000Z, 1645557742000 mili giây, hoặc 1645557742 seconds.
Tạo mới một UUID v7, hoặc tiếp tục với Bộ chuyển đổi Dấu thời gian Unix. Các liên kết này không bao gồm UUID bạn đã nhập.
Ứng dụng thực tế
- Phân tích pháp y: Xác định khi nào các ID được tạo
- Debugging: Truy vết hành vi hệ thống qua dấu thời gian của ID
- Auditing: Xác thực tính toàn vẹn theo thứ tự thời gian
- Kiểm tra định dạng: Phát hiện ID bị sai; một UUID hợp lệ không chứng minh tính xác thực
- Khôi phục dữ liệu: Tái tạo mối quan hệ thời gian
- Di chuyển hệ thống: Hiểu chi tiết triển khai UUID cũ
Trích xuất Địa chỉ MAC (v1/v6)
Đối với UUID v1 và v6, bạn thường có thể trích xuất định danh nút (địa chỉ MAC) nếu nó không bị làm ngẫu nhiên khi sinh:
- Lấy 12 chữ số hex cuối cùng (48 bit) từ UUID
- Định dạng với dấu hai chấm như XX:XX:XX:XX:XX:XX
- Kiểm tra xem địa chỉ MAC là thực hay ngẫu nhiên bằng cách xét bit multicast
Nếu byte đầu tiên có bit 0x01 được đặt, thì có khả năng đó là node ID được làm ngẫu nhiên chứ không phải địa chỉ MAC thực sự.
Câu hỏi thường gặp
Tôi có thể xác định chính xác khi nào một UUID v4 được tạo không?
Không. UUID v4 hoàn toàn ngẫu nhiên và không chứa thông tin dấu thời gian. Thời điểm tạo không thể xác định từ giá trị UUID v4.
Độ chính xác của dấu thời gian trong UUID dựa trên thời gian như thế nào?
UUID v1/v6 có dấu thời gian với độ chính xác 100 nanô giây. UUID v7 có độ chính xác mili giây. Tuy nhiên, độ chính xác thực tế của đồng hồ hệ thống có thể khác nhau.
Tôi có thể chuyển đổi giữa các phiên bản UUID không?
Không, bạn không thể chuyển đổi trực tiếp giữa các phiên bản trong khi giữ nguyên cùng một giá trị định danh. Các phiên bản khác nhau có cấu trúc cơ bản khác nhau.
Tôi có thể xác định máy tính nào đã tạo UUID v1 không?
Nếu node ID không được làm ngẫu nhiên, một UUID v1 có thể chứa địa chỉ MAC của hệ thống tạo ra. Tuy nhiên, nhiều triển khai hiện đại làm ngẫu nhiên thông tin này vì quyền riêng tư.
Làm sao để biết một UUID có hợp lệ không?
Kiểm tra định dạng (8-4-4-4-12 chữ số hex), xác minh chữ số phiên bản (ký tự thứ 13) là 1-8, và xác nhận các bit biến thể (ký tự thứ 17 là 8, 9, A hoặc B đối với UUID theo RFC 4122).