UUID ডিকোডার
UUID স্ট্রাকচার, ভার্সন ও এমবেডেড ডেটা ডিকোড ও পরীক্ষা করুন
UUID ইনপুট
পরীক্ষা করতে উপরে একটি UUID পেস্ট করুন
UUID স্ট্রাকচার
UUID (Universally Unique Identifier) হলো একটি ১২৮-বিট মান যা ৩২টি হেক্সাডেসিমাল ডিজিটে উপস্থাপিত, হাইফেন দিয়ে পাঁচটি গ্রুপে বিভক্ত:
version ও variant হলো একমাত্র দুটি ফিল্ড যা প্রতিটি UUID-এ নিশ্চিতভাবে থাকে। অন্য সব ফিল্ড ভার্সনের উপর নির্ভরশীল।
ভার্সন ফিল্ড
ভার্সন নিবল হলো তৃতীয় গ্রুপের প্রথম হেক্স ডিজিট (পূর্ণ স্ট্রিংয়ের ১৪ নম্বর অবস্থানে)। এটি চিহ্নিত করে কোন UUID ভার্সন ব্যবহার করে identifier তৈরি হয়েছিল।
const hex = uuid.replace(/-/g, '') const version = parseInt(hex[12], 16) // single hex digit → 1, 2, 3, 4, 5, 6, 7, or 8
ভার্সন 7 (UUID v7) হলো সবচেয়ে নতুন বহুল-ব্যবহৃত ভার্সন, RFC 9562 (2024)-এ প্রবর্তিত। এটি সর্টযোগ্যতার জন্য উচ্চ বিটে Unix মিলিসেকেন্ড টাইমস্ট্যাম্প এনকোড করে।
Variant ফিল্ড
Variant চতুর্থ গ্রুপের প্রথম বাইটের উচ্চ বিটে এনকোড করা থাকে। এটি UUID-এ ব্যবহৃত লেআউট ও বাইট অর্ডারিং কনভেনশন চিহ্নিত করে।
| উচ্চ বিট | প্রথম হেক্স ডিজিটের পরিসর | Variant | বিবরণ |
|---|---|---|---|
| 0xxx xxxx | 0x00–0x7F | NCS backward compatibility | লিগ্যাসি Network Computing System (NCS) UUID। backward compatibility-র জন্য সংরক্ষিত। |
| 10xx xxxx | 0x80–0xBF | RFC 4122 / RFC 9562 | স্ট্যান্ডার্ড RFC 4122 / RFC 9562 UUID variant। সব আধুনিক UUID ভার্সনে (v1–v8) ব্যবহৃত। |
| 110x xxxx | 0xC0–0xDF | Microsoft backward compatibility | লিগ্যাসি Microsoft COM/DCOM GUID যেখানে ভিন্ন বাইট অর্ডারিং ব্যবহার হয়। এখনও Windows COM কম্পোনেন্টে পাওয়া যায়। |
| 111x xxxx | 0xE0–0xFF | Reserved | ভবিষ্যৎ সংজ্ঞার জন্য সংরক্ষিত। কোনো বর্তমান UUID ভার্সনে ব্যবহৃত নয়। |
বাস্তবে, আপনি যে UUID গুলোর মুখোমুখি হবেন তার প্রায় সবগুলোই RFC 4122 / RFC 9562 variant (10xx xxxx বিট প্যাটার্ন, চতুর্থ গ্রুপের প্রথম বাইট 0x80–0xBF পরিসরে) ব্যবহার করে। NCS, Microsoft COM ও Reserved variant আধুনিক সিস্টেমে খুব কমই দেখা যায় এমন লিগ্যাসি ফরম্যাট।
UUID ভার্সন রেফারেন্স
RFC 4122 ভার্সন ১–৫ সংজ্ঞায়িত করেছে। RFC 9562 (2024) ভার্সন ৬, ৭ ও ৮ যোগ করেছে:
| ভার্সন | নাম | স্ট্যান্ডার্ড | বিবরণ |
|---|---|---|---|
| v1 | সময়-ভিত্তিক | RFC 4122 | টাইমস্ট্যাম্প (Gregorian epoch, ১০০ns নির্ভুলতা) + MAC address। প্রতিটি হোস্টে ক্রমানুসারী কিন্তু হোস্ট পরিচিতি ফাঁস করে। |
| v2 | DCE Security | RFC 4122 | UUID v1-এর উপর ভিত্তি করে তৈরি, যেখানে time_low ফিল্ডের জায়গায় POSIX UID/GID ব্যবহার হয়। লিগ্যাসি DCE/RPC সিস্টেমের বাইরে খুব কমই ব্যবহৃত। |
| v3 | Name-based MD5 | RFC 4122 | নির্ধারণযোগ্য: namespace UUID + name string-এর MD5 হ্যাশ। একই ইনপুট সবসময় একই UUID দেয়। v5 পছন্দনীয়। |
| v4 | র্যান্ডম | RFC 4122 | ক্রিপ্টোগ্রাফিকভাবে নিরাপদ ১২২ বিট র্যান্ডমনেস। সবচেয়ে সাধারণ সাধারণ-উদ্দেশ্য UUID ভার্সন। |
| v5 | Name-based SHA-1 | RFC 4122 | v3-এর মতো কিন্তু SHA-1 ব্যবহার করে। MD5-এর চেয়ে কম collision। নতুন name-based UUID-এর জন্য v3-এর চেয়ে পছন্দনীয়। |
| v6 | পুনর্বিন্যাসিত সময় | RFC 9562 | UUID v1-এর টাইমস্ট্যাম্প ফিল্ড পুনর্বিন্যাস করে যাতে UUID কালানুক্রমিকভাবে সর্টযোগ্য হয়। RFC 9562-এ সংজ্ঞায়িত। |
| v7 | Unix সময় | RFC 9562 | ৪৮-বিট Unix মিলিসেকেন্ড টাইমস্ট্যাম্প উচ্চ বিটে + র্যান্ডম ডেটা। সর্টযোগ্য ও B-tree ইনডেক্স-বান্ধব। নতুন সময়-ক্রমিক ID-এর জন্য পছন্দনীয়। |
| v8 | কাস্টম | RFC 9562 | মুক্ত-ফর্ম: ভার্সন ও variant ছাড়া সব বিট অ্যাপ্লিকেশন-নির্ধারিত। কোনো নির্দিষ্ট জেনারেশন অ্যালগরিদম নেই। |
UUID v1 টাইমস্ট্যাম্প ডিকোড করা
UUID v1 তিনটি ফিল্ডে বিভক্ত একটি ৬০-বিট Gregorian টাইমস্ট্যাম্প (অক্টোবর ১৫, ১৫৮২ থেকে ১০০-ন্যানোসেকেন্ড ব্যবধানে) এমবেড করে: time_low (বিট ০–৩১), time_mid (বিট ৩২–৪৭), এবং time_hi (বিট ৪৮–৫৯)। এই টুল সেগুলো পুনরায় একত্রিত করে স্ট্যান্ডার্ড UTC তারিখে রূপান্তর করে।
// UUID v1: 6ba7b810-9dad-11d1-80b4-00c04fd430c8 // ^^^^^^^^ ^^^^ ^^^^ ^^^^^ ^^^^^^^^^^^^ // time-low mid hi clk node (MAC) // ^ // version nibble (1) const hex = '6ba7b8109dad11d180b400c04fd430c8' const tLow = parseInt(hex.slice(0, 8), 16) // 0x6ba7b810 const tMid = parseInt(hex.slice(8, 12), 16) // 0x9dad const tHi = parseInt(hex.slice(13, 16), 16) // 0x1d1 (skip version nibble at index 12) // Reconstruct 60-bit timestamp (100-ns intervals since Oct 15, 1582) const t = (BigInt(tHi) << 48n) | (BigInt(tMid) << 32n) | BigInt(tLow) // Subtract Gregorian offset (Oct 15, 1582 → Jan 1, 1970 in 100-ns units) const GREGORIAN_OFFSET = 122192928000000000n const unixMs = (t - GREGORIAN_OFFSET) / 10000n console.log(new Date(Number(unixMs)).toISOString()) // → 1998-02-04T22:13:53.578Z
UUID v1-কে সংবেদনশীল হিসেবে গণ্য করা উচিত: এমবেডেড MAC address ও সুনির্দিষ্ট টাইমস্ট্যাম্প উভয় তৈরিকারী মেশিন ও তৈরির সময় সনাক্ত করতে পারে।
UUID v7 টাইমস্ট্যাম্প ডিকোড করা
UUID v7 প্রথম ৪৮ বিটে (প্রথম গ্রুপ + দ্বিতীয় গ্রুপের প্রথম ৪ ডিজিট) একটি ৪৮-বিট Unix মিলিসেকেন্ড টাইমস্ট্যাম্প এমবেড করে। এই টুল সেই বিটগুলো পড়ে মিলিসেকেন্ড নির্ভুলতাসহ UTC তারিখে রূপান্তর করে।
// UUID v7: 018e4bc8-1000-7000-8000-000000000001 // ^^^^^^^^^^^^ // 48-bit Unix ms timestamp const hex = '018e4bc8100070008000000000000001' // First 48 bits (12 hex chars) = Unix timestamp in milliseconds const ms = parseInt(hex.slice(0, 12), 16) // 0x018e4bc81000 console.log(new Date(ms).toISOString()) // → 2024-03-11T…Z // Everything after byte 6 is random (except version/variant bits)
UUID v1-এর বিপরীতে, UUID v7 টাইমস্ট্যাম্প পরিচিত Unix epoch (১ জানুয়ারি, ১৯৭০) ব্যবহার করে এবং কোনো হোস্ট তথ্য এমবেড করে না। বাকি ৭৪ বিট র্যান্ডম।
এই টুল কীভাবে UUID ভার্সন ও Variant সনাক্ত করে
ডিকোডার canonical UUID স্ট্রিংয়ের ১৪ নম্বর অবস্থান (ভার্সন নিবল) ও ১৯ নম্বর অবস্থান (variant নিবল) পড়ে। কোনো বাহ্যিক অবস্থা বা প্রসঙ্গ প্রয়োজন নেই — সব তথ্য UUID স্ট্রিংয়েই স্বয়ংসম্পূর্ণ।
// Detect UUID version from the 13th hex character (index 12)
function uuidVersion(uuid) {
const clean = uuid.replace(/-/g, '')
return parseInt(clean[12], 16)
}
uuidVersion('550e8400-e29b-41d4-a716-446655440000') // → 4
uuidVersion('018e4bc8-1000-7000-8000-000000000001') // → 7
uuidVersion('6ba7b810-9dad-11d1-80b4-00c04fd430c8') // → 1
// Detect variant from the 17th hex character (index 16, first char of 4th group)
function uuidVariant(uuid) {
const clean = uuid.replace(/-/g, '')
const b = parseInt(clean[16], 16)
if ((b & 0x8) === 0) return 'NCS'
if ((b & 0xC) === 0x8) return 'RFC 4122'
if ((b & 0xE) === 0xC) return 'Microsoft'
return 'Reserved'
}বিশেষ UUID
Nil UUID
nil UUID 00000000-0000-0000-0000-000000000000 সম্পূর্ণ শূন্য। RFC 4122 এটিকে একটি sentinel মান হিসেবে সংজ্ঞায়িত করেছে যার অর্থ 'কোনো UUID নেই' — null-এর মতো। এটি একটি বৈধ জেনারেটেড UUID নয়।
Max UUID
max UUID ffffffff-ffff-ffff-ffff-ffffffffffff সম্পূর্ণ এক (প্রতিটি বাইটে 0xFF)। RFC 9562-এ সংজ্ঞায়িত, এটি nil UUID-এর পরিপূরক এবং সর্বোচ্চ sentinel মান হিসেবে কাজ করে।