Czym jest dekodowanie UUID?
dekodowanie UUID to proces analizowania UUID w celu wydobycia informacji o:
- Version: Która wersja UUID (1–8) na podstawie 4 bitów w pozycji 48–51
- Variant: Który wariant UUID (zazwyczaj RFC 4122) na podstawie bitów 64–65
- Components: Wydobywanie znacznika czasu, identyfikatora węzła lub innych danych w zależności od wersji
- Czas wygenerowania: Dla UUID opartych na czasie (v1, v6, v7)
Example: 123e4567-e89b-12d3-a456-426614174000 to UUID Wersji 1 z znacznikiem czasu 2228-06-25T20:01:28.545Z przy pokazaniu z precyzją milisekundową JavaScript.
Przegląd struktury UUID
| Format | Description |
|---|---|
| 8-4-4-4-12 | 32 cyfry szesnastkowe pogrupowane z myślnikami |
| Bity wersji | Bity 48–51 (13. cyfra) |
| Bity wariantu | Bity 64–65 (17. cyfra) |
Numer wersji pojawia się jako pierwsza cyfra szesnastkowa w trzeciej grupie (np., 123e4567-e89b-12d3-a456-426614174000 dla wersji 1).
Dekodowanie według wersji UUID
| Version | Co można zdekodować |
|---|---|
| UUID v1 |
|
| UUID v3/v5 |
|
| UUID v4 |
|
| UUID v6 |
|
| UUID v7 |
|
Wydobywanie znacznika czasu z UUID
| Typ UUID | Metoda wydobywania czasu | Epoch |
|---|---|---|
| UUID v1 | Połącz bity 0–31, 32–47 i 48–59, przemieszczając składniki znacznika czasu | 15 października 1582 |
| UUID v6 | Połącz bity 0–47 z bitami 52–63; bity 48–51 to wersja i są wyłączone | 15 października 1582 |
| UUID v7 | Wyodrębnij bity 0–47 (milisekundy Unix) | 1 stycznia 1970 |
Zasady walidacji UUID
- Sprawdzenie formatu: 8-4-4-4-12 cyfr szesnastkowych z myślnikami
- Sprawdzenie wersji: 13. znak musi być 1–8
- Sprawdzenie wariantu: 17. znak musi być 8, 9, A lub B (dla RFC 4122)
Wyrażenie regularne do podstawowej walidacji UUID:
^[0-9a-f]{8}-[0-9a-f]{4}-[1-8][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$Przykład znacznika czasu UUID v7
017f22e2-79b0-7cc3-98c4-dc0c0c07398f to wektor testowy RFC 9562 dla UUIDv7. Jego pierwsze 48 bitów to milisekundy Unix, które dekodują się do 2022-02-22T19:22:22.000Z, 1645557742000 milisekundy, lub 1645557742 seconds.
Wygeneruj nowy UUID v7, lub kontynuuj z Konwerter znacznika czasu Unix. Te linki nie zawierają UUID, który wpisałeś.
Praktyczne zastosowania
- Analiza kryminalistyczna: Określanie, kiedy utworzono identyfikatory
- Debugging: Śledzenie zachowania systemu poprzez znaczniki czasu w ID
- Auditing: Weryfikacja integralności chronologicznej
- Kontrole formatu: Wykrywanie niepoprawnych ID; prawidłowy UUID nie dowodzi autentyczności
- Odzyskiwanie danych: Odtwarzanie relacji czasowych
- Migracje systemów: Zrozumienie szczegółów implementacji starszych UUID
Wydobywanie adresu MAC (v1/v6)
Dla UUID v1 i v6 często można wydobyć identyfikator węzła (adres MAC), jeśli nie został zrandomizowany podczas generowania:
- Wyodrębnij ostatnie 12 cyfr szesnastkowych (48 bitów) z UUID
- Sformatuj z dwukropkami jako XX:XX:XX:XX:XX:XX
- Sprawdź, czy adres MAC jest prawdziwy czy losowy, badając bit multicast
Jeśli w pierwszym bajcie jest ustawiony bit 0x01, prawdopodobnie jest to zrandomizowany identyfikator węzła, a nie rzeczywisty adres MAC.
Najczęściej zadawane pytania
Czy mogę dokładnie określić, kiedy utworzono UUID v4?
Nie. UUID v4 jest całkowicie losowy i nie zawiera informacji o czasie. Czas utworzenia nie może być określony na podstawie wartości UUID v4.
Jak dokładne są znaczniki czasu w UUID opartych na czasie?
UUID v1/v6 mają znaczniki czasu z dokładnością do 100 nanosekund. UUID v7 ma dokładność milisekundową. Jednak rzeczywista dokładność zegara systemowego może się różnić.
Czy mogę konwertować między wersjami UUID?
Nie, nie można bezpośrednio konwertować między wersjami zachowując ten sam identyfikator. Różne wersje mają zasadniczo różne struktury.
Czy mogę zidentyfikować komputer, który wygenerował UUID v1?
Jeśli identyfikator węzła nie został zrandomizowany, UUID v1 może zawierać adres MAC systemu, który go wygenerował. Jednak wiele współczesnych implementacji randomizuje to dla prywatności.
Jak mogę stwierdzić, czy UUID jest prawidłowy?
Sprawdź format (8-4-4-4-12 cyfr szesnastkowych), zweryfikuj cyfrę wersji (13. znak) czy jest 1–8 oraz potwierdź bity wariantu (17. znak to 8, 9, A lub B dla UUID zgodnych z RFC 4122).