מפענח ומאמת UUID | ניתוח גרסאות (v1, v4, v7) וזמן

הכנס את ה-UUID שלך לשדה למעלה וכלי זה (מפענח UUID) יבצע מיד בדיקה מקוונת, יקבע את הגרסה, תוקף ויחלץ מידע נסתר.

מהו מפענח UUID?

מפענח UUID הוא כלי המנתח UUID (מזהה ייחודי אוניברסלי) ומחלץ ממנו את כל המידע הזמין. UUID אינו רק מחרוזת תווים אקראית – בהתאם לגרסה, הוא יכול להכיל חותמת זמן, מידע על המערכת או גיבוב של נתונים דטרמיניסטיים.

איזה מידע ניתן להפיק מ-UUID?

מידע בסיסי על UUID

גרסת UUID:

  • קובעת את הסוג והמבנה של ה-UUID (v1, v3, v4, v5, v6, v7)
  • מחולץ מהתו ההקסדצימלי ה-13

וריאנט:

  • RFC 4122 - וריאנט UUID סטנדרטי
  • NCS - Network Computing System (מיושן)
  • Microsoft - וריאנט GUID של מיקרוסופט
  • Reserved - שמור לשימוש עתידי

UUID v1 - חותמת זמן + כתובת MAC

מה ניתן להפיק:

  • זמן יצירה מדויק - תאריך ושעה בדיוק של 100 ננו-שניות
  • רצף שעון (Clock Sequence) - מספר סידורי למניעת התנגשויות
  • מזהה צומת (Node ID) - במקור כתובת MAC, לעיתים קרובות ערכים אקראיים

דוגמה:

UUID: 6ba7b810-9dad-11d1-80b4-00c04fd430c8

גרסה: v1 (חותמת זמן + MAC)
וריאנט: RFC 4122
תאריך ושעה: 15.10.1997 04:25:33.000
רצף שעון: 724
מזהה צומת: 00:C0:4F:D4:30:C8

שימושים:

  • קביעת מועד יצירת רשומה
  • ביקורת וניתוח פורנזי
  • איתור באגים בבעיות תלויות זמן

UUID v3/v5 - מבוסס גיבוב (Hash-based)

מה ניתן להפיק:

  • סוג הגיבוב - MD5 (v3) או SHA-1 (v5)
  • לא ניתן להפיק - מרחב השמות והשם המקוריים (גיבוב חד-כיווני)

דוגמה:

UUID: 886313e1-3b8a-5372-9b90-0c9aee199e5d

גרסה: v5 (גיבוב SHA-1)
וריאנט: RFC 4122
סוג: UUID מבוסס גיבוב (דטרמיניסטי)
הערה: לא ניתן לשחזר את מרחב השמות והשם המקוריים מתוך ה-UUID

שימושים:

  • אימות שה-UUID דטרמיניסטי
  • זיהוי סוג ה-UUID במסד נתונים
  • בדיקת עקביות של מזהים מבוססי גיבוב

UUID v4 - אקראי

מה ניתן להפיק:

  • גרסה - אישור שאקראי
  • וריאנט - תקן RFC 4122
  • אין נתונים נוספים - ביטים אקראיים לחלוטין

דוגמה:

UUID: f47ac10b-58cc-4372-a567-0e02b2c3d479

גרסה: v4 (אקראי)
וריאנט: RFC 4122
סוג: UUID שנוצר באקראי

שימושים:

  • אימות שה-UUID אקראי (לא דטרמיניסטי)
  • בדיקת פורמט UUID תקין
  • אימות UUID לפני שמירה במסד נתונים

UUID v6 - חותמת זמן מסודרת

מה ניתן להפיק:

  • זמן יצירה מדויק - מסודר מחדש לביצועי DB טובים יותר
  • רצף שעון (Clock Sequence) - מספר סידורי
  • מזהה צומת (Node ID) - מזהה צומת

דוגמה:

UUID: 1ec9414c-232a-6b00-b3c8-9e6bdeced846

גרסה: v6 (חותמת זמן מסודרת)
וריאנט: RFC 4122
תאריך ושעה: 30.01.2026 14:23:45.123
רצף שעון: 3272
מזהה צומת: 9E:6B:DE:CE:D8:46

שימושים:

  • קביעת זמן יצירת רשומה
  • ניתוח סדר כרונולוגי במסד נתונים
  • איתור באגים במערכות מבוזרות

UUID v7 - חותמת זמן יוניקס

מה ניתן להפיק:

  • חותמת זמן יוניקס - מילישניות מ-1.1.1970
  • תאריך ושעה - פורמט חותמת זמן יוניקס סטנדרטי
  • חלק אקראי - לא ניתן לפענוח

דוגמה:

UUID: 017f22e2-79b0-7cc3-98c4-dc0c0c07398f

גרסה: v7 (חותמת זמן יוניקס)
וריאנט: RFC 4122
תאריך ושעה: 30.01.2026 14:23:45.123

שימושים:

  • קבלת זמן יצירת UUIDs מודרניים
  • ניתוח סדר זמנים
  • העברת נתונים עם חותמות זמן

מבנה ה-UUID

ל-UUID יש את הפורמט: xxxxxxxx-xxxx-Mxxx-Nxxx-xxxxxxxxxxxx

6ba7b810-9dad-11d1-80b4-00c04fd430c8
│      │ │  │ │  │ │  │ │           │
│      │ │  │ │  │ └─┬─┴─┬───────────┴─ צומת (48 ביטים)
│      │ │  │ │  │   └─┬─┴─────────────── רצף שעון (14 ביטים)
│      │ │  │ │  └───┬─┴─────────────────── וריאנט (2-3 ביטים)
│      │ │  │ └─────┬┴─────────────────────── גרסה (4 ביטים) + זמן גבוה
│      │ └───┬─────┴────────────────────────── זמן ביניים (16 ביטים)
│      └────┬┴─────────────────────────────────── זמן נמוך (32 ביטים)
└───────────┴────────────────────────────────────────── זמן נמוך (32 ביטים)

חילוץ גרסאות ווריאנטים

גרסה (M):

  • מיקום: התו ההקסדצימלי ה-13
  • ערכים: 1-7 (גרסאות UUID שונות)

וריאנט (N):

  • מיקום: התו ההקסדצימלי ה-17
  • 0-7: NCS (שמור)
  • 8-B: RFC 4122 (סטנדרט)
  • C-D: מיקרוסופט
  • E-F: עתידי (שמור)

דוגמאות מעשיות

איתור באגים - קביעת זמן יצירת רשומה

תרחיש: משתמש מדווח כי הנתונים שלו נעלמו. עליך לברר מתי הרשומה נוצרה.

UUID: 6ba7b810-9dad-11d1-80b4-00c04fd430c8
מפוענח: 15.10.1997 04:25:33.000

→ הרשומה נוצרה בשנת 1997

ניתוח פורנזי - אימות רצף זמנים

תרחיש: בדיקה אם האירועים התרחשו בסדר הנכון.

UUID 1: 1ec9414c-232a-6b00-b3c8-9e6bdeced846 → 30.01.2026 14:23:45
UUID 2: 1ec9414d-557b-6a00-8f32-1234567890ab → 30.01.2026 14:25:12

→ UUID 2 נוצר מאוחר יותר (סדר נכון)

זיהוי סוג UUID במסד נתונים

תרחיש: יש לך UUIDs מעורבים במסד נתונים ואתה צריך לדעת אילו הם אקראיים ואילו כוללים חותמת זמן.

f47ac10b-58cc-4372-a567-0e02b2c3d479 → v4 (אקראי, ללא חותמת זמן)
6ba7b810-9dad-11d1-80b4-00c04fd430c8 → v1 (עם חותמת זמן)
017f22e2-79b0-7cc3-98c4-dc0c0c07398f → v7 (עם חותמת זמן)

→ רק UUIDs מסוג v1 ו-v7 מכילים מידע תזמון

מגבלות ומה שלא ניתן להפיק

❌ UUID v3/v5 - לא ניתן לפענח גיבוב

בלתי אפשרי:

  • לשחזר את מרחב השמות המקורי
  • לשחזר את השם/הערך המקוריים
  • לגלות אילו נתונים עברו גיבוב

הסיבה: MD5 ו-SHA-1 הן פונקציות גיבוב חד-כיווניות.

❌ UUID v4 - אין נתונים נסתרים

בלתי אפשרי:

  • להפיק מטא נתונים כלשהם
  • לגלות את זמן היצירה
  • לזהות את המקור

הסיבה: UUID v4 הוא אקראי לחלוטין ואינו מכיל מידע מובנה כלשהו.

⚠️ UUID v1/v6 - מזהה צומת (Node ID) יכול להיות אקראי

מגבלות:

  • ביישומים מודרניים, מזהה הצומת (Node ID) הוא לעיתים קרובות אקראי (לא כתובת MAC אמיתית)
  • בשל הגנת הפרטיות, כתובות MAC מוחלפות לעיתים קרובות בערכים אקראיים
  • לא ניתן לזהות באופן מהימן מכונה ספציפית

אימות UUID

המפענח משמש גם כמאמת UUID.

בדיקת תקינות UUID

המפענח מאמת אוטומטית:

  • ✅ פורמט תקין (8-4-4-4-12 תווים הקסדצימליים)
  • ✅ תווים הקסדצימליים חוקיים (0-9, a-f)
  • ✅ אורך תקין (36 תווים כולל מקפים, 32 ללא)

זיהוי UUIDs לא חוקיים

דוגמאות לא חוקיות:

❌ 6ba7b810-9dad-11d1-80b4          (קצר מדי)
❌ 6ba7b810-9dad-11d1-80b4-GHIJKLMN (תווים לא חוקיים)
❌ 6ba7b81-09dad-11d1-80b4-00c04fd4 (פורמט שגוי)

למפתחים

יישום ב-JavaScript

// Extrakce verze z UUID
function getUUIDVersion(uuid) {
    const cleaned = uuid.replace(/-/g, '');
    return parseInt(cleaned[12], 16);
}

// Extrakce timestampu z UUID v7
function extractV7Timestamp(uuid) {
    const cleaned = uuid.replace(/-/g, '');
    const timeHi = parseInt(cleaned.substring(0, 8), 16);
    const timeLow = parseInt(cleaned.substring(8, 12), 16);
    const unixMs = Number(BigInt("0x" + cleaned.substring(0, 12)) >> 16n);
    return new Date(unixMs);
}

// Příklad
const uuid = '017f22e2-79b0-7cc3-98c4-dc0c0c07398f';
console.log(getUUIDVersion(uuid)); // 7
console.log(extractV7Timestamp(uuid)); // Date object

אימות UUID באמצעות Regex

const uuidRegex = /^[0-9a-f]{8}-[0-9a-f]{4}-[1-7][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$/i;

function isValidUUID(uuid) {
    return uuidRegex.test(uuid);
}

שאלות נפוצות (FAQ)

האם ניתן להפיק את זמן היצירה מ-UUID v4? לא, UUID v4 הוא אקראי לחלוטין ואינו מכיל מידע תזמון כלשהו. עבור UUID עם מידע זמן, השתמש ב-v1, v6 או v7.
מדוע ה-Node ID ב-UUID v1 הוא אקראי במקום כתובת MAC? יישומים מודרניים משתמשים ב-Node ID אקראי בשל הגנת הפרטיות. חשיפת כתובת MAC אמיתית עלולה להוות סיכון אבטחתי.
האם ניתן לשחזר את ה-URL או השם המקוריים מ-UUID v5? לא, UUID v5 משתמש בגיבוב SHA-1, שהוא חד-כיווני. לא ניתן לשחזר נתונים מקוריים מהגיבוב.
איך אדע אם UUID הוא אקראי (v4)? המפענח יציג את גרסת ה-UUID. אם הגרסה היא 4, מדובר ב-UUID שנוצר באקראי ללא מטא נתונים נוספים.
האם חותמת הזמן ב-UUID v1 מדויקת? כן, ל-UUID v1 יש דיוק תיאורטי של 100 ננו-שניות (החל מ-15 באוקטובר 1582). בפועל, זה תלוי בדיוק שעון המערכת.
האם אוכל להשתמש במפענח לאימות UUID? כן, המפענח מאמת אוטומטית את פורמט ה-UUID ויציג שגיאה אם ה-UUID אינו חוקי.

אבטחה ופרטיות

מה UUID חושף?

UUID v1/v6:

  • ⚠️ זמן יצירה - עלול לחשוף תזמון פעולות
  • ⚠️ פוטנציאלית כתובת MAC - סיכון לזיהוי מכשיר (ביישומים מודרניים אקראי)

UUID v4:

  • בטוח - אינו מכיל מטא נתונים כלשהם

UUID v7:

  • ⚠️ חותמת זמן יוניקס - חושפת את זמן היצירה

המלצות

  • ✅ השתמש ב-UUID v4 לפרטיות מירבית
  • ⚠️ היזהר עם UUID v1/v6/v7 בממשקי API ציבוריים (חושפים מידע תזמון)
  • ✅ UUID v5 הוא דטרמיניסטי, אך אינו חושף נתונים מקוריים
  • ⚠️ גיבוב MD5 אינו בטוח לחלוטין

עובדות מעניינות

  • UUID v1 העתיק ביותר האפשרי: 15 באוקטובר 1582 00:00:00 (תחילת לוח השנה הגרגוריאני)
  • UUID v7 החדש ביותר האפשרי: 10889-08-02 05:31:50.655 (מגבלת חותמת זמן יוניקס במילישניות)
  • דיוק UUID v1: 100 ננו-שניות (תיאורטית 10 מיליון UUIDs בשנייה)
  • UUID Null (ריק): 00000000-0000-0000-0000-000000000000 (UUID “ריק” מיוחד)
  • UUID Max (מקסימלי): ffffffff-ffff-ffff-ffff-ffffffffffff (ערך מקסימלי)

שימוש במערכות שונות

PostgreSQL

-- Extrakce verze UUID
SELECT substring(id::text, 15, 1) as version
FROM users;

-- Filtrování podle verze
SELECT *
FROM users
WHERE substring(id::text, 15, 1) = '4';

MySQL

-- Kontrola UUID formátu
SELECT id
FROM users
WHERE id REGEXP '^[0-9a-f]{8}-[0-9a-f]{4}-[1-7][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$';