ToolDeck

UUID ডিকোডার

UUID স্ট্রাকচার, ভার্সন ও এমবেডেড ডেটা ডিকোড ও পরীক্ষা করুন

একটি উদাহরণ চেষ্টা করুন

UUID ইনপুট

পরীক্ষা করতে উপরে একটি UUID পেস্ট করুন

UUID স্ট্রাকচার

UUID (Universally Unique Identifier) হলো একটি ১২৮-বিট মান যা ৩২টি হেক্সাডেসিমাল ডিজিটে উপস্থাপিত, হাইফেন দিয়ে পাঁচটি গ্রুপে বিভক্ত:

ফরম্যাট
xxxxxxxx-xxxx-Mxxx-Nxxx-xxxxxxxxxxxx
xxxxxxxx (8)৮টি হেক্স ডিজিট — ৩২ বিট
xxxx (4)৪টি হেক্স ডিজিট — ১৬ বিট
Mxxx (4)৪টি হেক্স ডিজিট — ১৬ বিট। প্রথম ডিজিট M UUID ভার্সন (১–৮) এনকোড করে।
Nxxx (4)৪টি হেক্স ডিজিট — ১৬ বিট। প্রথম ডিজিট N UUID variant (RFC 4122, NCS, Microsoft বা reserved) এনকোড করে।
xxxxxxxxxxxx (12)১২টি হেক্স ডিজিট — ৪৮ বিট

versionvariant হলো একমাত্র দুটি ফিল্ড যা প্রতিটি UUID-এ নিশ্চিতভাবে থাকে। অন্য সব ফিল্ড ভার্সনের উপর নির্ভরশীল।

ভার্সন ফিল্ড

ভার্সন নিবল হলো তৃতীয় গ্রুপের প্রথম হেক্স ডিজিট (পূর্ণ স্ট্রিংয়ের ১৪ নম্বর অবস্থানে)। এটি চিহ্নিত করে কোন UUID ভার্সন ব্যবহার করে identifier তৈরি হয়েছিল।

JavaScript
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 xxxx0x00–0x7FNCS backward compatibilityলিগ্যাসি Network Computing System (NCS) UUID। backward compatibility-র জন্য সংরক্ষিত।
10xx xxxx0x80–0xBFRFC 4122 / RFC 9562স্ট্যান্ডার্ড RFC 4122 / RFC 9562 UUID variant। সব আধুনিক UUID ভার্সনে (v1–v8) ব্যবহৃত।
110x xxxx0xC0–0xDFMicrosoft backward compatibilityলিগ্যাসি Microsoft COM/DCOM GUID যেখানে ভিন্ন বাইট অর্ডারিং ব্যবহার হয়। এখনও Windows COM কম্পোনেন্টে পাওয়া যায়।
111x xxxx0xE0–0xFFReservedভবিষ্যৎ সংজ্ঞার জন্য সংরক্ষিত। কোনো বর্তমান 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। প্রতিটি হোস্টে ক্রমানুসারী কিন্তু হোস্ট পরিচিতি ফাঁস করে।
v2DCE SecurityRFC 4122UUID v1-এর উপর ভিত্তি করে তৈরি, যেখানে time_low ফিল্ডের জায়গায় POSIX UID/GID ব্যবহার হয়। লিগ্যাসি DCE/RPC সিস্টেমের বাইরে খুব কমই ব্যবহৃত।
v3Name-based MD5RFC 4122নির্ধারণযোগ্য: namespace UUID + name string-এর MD5 হ্যাশ। একই ইনপুট সবসময় একই UUID দেয়। v5 পছন্দনীয়।
v4র্যান্ডমRFC 4122ক্রিপ্টোগ্রাফিকভাবে নিরাপদ ১২২ বিট র্যান্ডমনেস। সবচেয়ে সাধারণ সাধারণ-উদ্দেশ্য UUID ভার্সন।
v5Name-based SHA-1RFC 4122v3-এর মতো কিন্তু SHA-1 ব্যবহার করে। MD5-এর চেয়ে কম collision। নতুন name-based UUID-এর জন্য v3-এর চেয়ে পছন্দনীয়।
v6পুনর্বিন্যাসিত সময়RFC 9562UUID v1-এর টাইমস্ট্যাম্প ফিল্ড পুনর্বিন্যাস করে যাতে UUID কালানুক্রমিকভাবে সর্টযোগ্য হয়। RFC 9562-এ সংজ্ঞায়িত।
v7Unix সময়RFC 9562৪৮-বিট Unix মিলিসেকেন্ড টাইমস্ট্যাম্প উচ্চ বিটে + র্যান্ডম ডেটা। সর্টযোগ্য ও B-tree ইনডেক্স-বান্ধব। নতুন সময়-ক্রমিক ID-এর জন্য পছন্দনীয়।
v8কাস্টমRFC 9562মুক্ত-ফর্ম: ভার্সন ও variant ছাড়া সব বিট অ্যাপ্লিকেশন-নির্ধারিত। কোনো নির্দিষ্ট জেনারেশন অ্যালগরিদম নেই।

UUID v1 টাইমস্ট্যাম্প ডিকোড করা

UUID v1 তিনটি ফিল্ডে বিভক্ত একটি ৬০-বিট Gregorian টাইমস্ট্যাম্প (অক্টোবর ১৫, ১৫৮২ থেকে ১০০-ন্যানোসেকেন্ড ব্যবধানে) এমবেড করে: time_low (বিট ০–৩১), time_mid (বিট ৩২–৪৭), এবং time_hi (বিট ৪৮–৫৯)। এই টুল সেগুলো পুনরায় একত্রিত করে স্ট্যান্ডার্ড UTC তারিখে রূপান্তর করে।

JavaScript
// 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
Note:ক্লক সিকোয়েন্স ফিল্ড (১৪ বিট) ক্লক পিছিয়ে গেলে ডুপ্লিকেট প্রতিরোধ করে। node ফিল্ড (৪৮ বিট) সাধারণত তৈরিকারী হোস্টের MAC address।

UUID v1-কে সংবেদনশীল হিসেবে গণ্য করা উচিত: এমবেডেড MAC address ও সুনির্দিষ্ট টাইমস্ট্যাম্প উভয় তৈরিকারী মেশিন ও তৈরির সময় সনাক্ত করতে পারে।

UUID v7 টাইমস্ট্যাম্প ডিকোড করা

UUID v7 প্রথম ৪৮ বিটে (প্রথম গ্রুপ + দ্বিতীয় গ্রুপের প্রথম ৪ ডিজিট) একটি ৪৮-বিট Unix মিলিসেকেন্ড টাইমস্ট্যাম্প এমবেড করে। এই টুল সেই বিটগুলো পড়ে মিলিসেকেন্ড নির্ভুলতাসহ UTC তারিখে রূপান্তর করে।

JavaScript
// 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 স্ট্রিংয়েই স্বয়ংসম্পূর্ণ।

JavaScript
// 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 মান হিসেবে কাজ করে।

সচরাচর জিজ্ঞাসা

কোনো UUID কোন ভার্সনের তা কীভাবে বুঝব?
canonical UUID স্ট্রিংয়ের ১৪ নম্বর অবস্থান দেখুন (তৃতীয় হাইফেন-বিভক্ত গ্রুপের প্রথম অক্ষর)। সেই একক হেক্স ডিজিটটিই ভার্সন নম্বর: ১, ২, ৩, ৪, ৫, ৬, ৭ বা ৮। UUID এই টুলে পেস্ট করুন এবং এটি ভার্সন ডিকোড করে দেবে।
UUID ডিকোড করে মূল ডেটা ফিরে পাওয়া যায়?
ভার্সনের উপর নির্ভর করে। UUID v1 ও v7 একটি টাইমস্ট্যাম্প এমবেড করে যা পুরোপুরি পুনরুদ্ধার করা যায়। UUID v1 MAC address-ও এমবেড করে। UUID v3 ও v5 হলো one-way হ্যাশ — UUID থেকে মূল নাম পুনরুদ্ধার করা যায় না। UUID v4 সম্পূর্ণ র্যান্ডম — পুনরুদ্ধারের কিছু নেই।
UUID-এ 'variant' মানে কী?
variant ফিল্ড UUID-এর বাইট লেআউট ও ব্যাখ্যার কনভেনশন চিহ্নিত করে। আপনি যে UUID গুলোর মুখোমুখি হবেন তার প্রায় সবগুলোতেই RFC 4122 variant (উচ্চ বিট 10) থাকবে, ১৯ নম্বর অবস্থানে হেক্স ডিজিট ৮, ৯, a বা b হিসেবে এনকোড করা। অন্য variant (NCS, Microsoft) ১৯৯০-এর দশকের লিগ্যাসি ফরম্যাট।
কিছু UUID দেখতে অন্যগুলোর চেয়ে আলাদা কেন?
দৃশ্যমান পার্থক্য ভার্সন নিবলে (১৪ নম্বর অবস্থান) ও variant নিবলে (১৯ নম্বর অবস্থান)। যেমন, UUID v4-এ ১৪ নম্বর অবস্থানে সবসময় ৪ থাকে, আর UUID v7-এ ৭। এই সীমার মধ্যে বাকি ডিজিটগুলো ভার্সনের উপর নির্ভর করে র্যান্ডম বা টাইমস্ট্যাম্প-উদ্ভূত।
nil UUID ও empty UUID কি একই?
ধারণাগতভাবে হ্যাঁ — nil UUID (সব শূন্য) UUID-এর অনুপস্থিতি বোঝাতে ব্যবহৃত হয়, null-এর মতো। এটি র্যান্ডমলি জেনারেটেড UUID নয় এবং একটি বাস্তব identifier হিসেবে সংরক্ষণ করা উচিত নয়। কিছু সিস্টেম এটি ডিফল্ট বা placeholder মান হিসেবে ব্যবহার করে।
কোনো UUID কি অবৈধ হতে পারে?
একটি UUID সিনট্যাক্টিক্যালি বৈধ (সঠিক ফরম্যাট) কিন্তু অর্থগতভাবে অস্বাভাবিক হতে পারে — যেমন ভার্সন নিবল ০ বা variant 11x (reserved)। nil UUID ও max UUID সিনট্যাক্টিক্যালি বৈধ কিন্তু sentinel মান। এই টুল উপস্থিত যেকোনো ভার্সন ও variant নিবল প্রদর্শন করবে এবং অচেনা ভার্সনগুলোকে চিহ্নিত করবে।
UUID ও GUID-এর মধ্যে পার্থক্য কী?
GUID (Globally Unique Identifier) একই ধারণার জন্য Microsoft-এর নাম। GUID একই RFC 4122 ১২৮-বিট ফরম্যাট অনুসরণ করে। একমাত্র ব্যবহারিক পার্থক্য হলো লিগ্যাসি Microsoft GUID RFC 4122 variant-এর পরিবর্তে Microsoft variant (উচ্চ বিট 110) ব্যবহার করতে পারে — এটি বাইনারি উপস্থাপনায় বাইট অর্ডারিং প্রভাবিত করে। পাঠ্য উপস্থাপনা অভিন্ন।