ToolDeck

UUID v2 Generator

Generate DCE Security UUID v2 with local domain and ID

Click Generate to create a UUID
Note:UUID v2 encodes the local domain and ID into the UUID structure
Note:UUID v2 একটি লেগ্যাসি ফরম্যাট যা DCE Security প্রসঙ্গের জন্য সংজ্ঞায়িত। আধুনিক অ্যাপ্লিকেশনে এটি খুব কমই প্রয়োজন হয়। সাধারণ উদ্দেশ্যের অনন্য ID-এর জন্য UUID v4 ব্যবহারের পরামর্শ দেওয়া হয়।

UUID v2 কী?

UUID v2 হলো DCE Security UUID সংস্করণ, যা Distributed Computing Environment (DCE) স্পেসিফিকেশনের অংশ হিসেবে মানকীকৃত এবং RFC 4122-এ উল্লেখিত। এটি UUID v1 কে প্রসারিত করে টাইমস্ট্যাম্প ক্ষেত্রে একটি POSIX ব্যবহারকারী বা গ্রুপ শনাক্তকারী (UID/GID) এমবেড করে।

গঠনটি UUID v1-এর মতোই, তবে 32-বিট time_low ক্ষেত্রটি একটি 32-বিট লোকাল শনাক্তকারী (যেমন POSIX UID) দিয়ে প্রতিস্থাপিত হয় এবং একটি 1-বাইট local_domain ক্ষেত্র নির্ধারণ করে এটি কোন ধরনের লোকাল ID। এর ফলে টাইমস্ট্যাম্প ছোট হয়ে যায়, যা এর নির্ভুলতা ও অনন্যতার নিশ্চয়তা কমিয়ে দেয়।

UUID v2 আধুনিক সফটওয়্যারে অত্যন্ত বিরল। বেশিরভাগ ডেভেলপারের কখনো এটি তৈরি করার প্রয়োজন হবে না। এই পৃষ্ঠাটি সম্পূর্ণতার জন্য ফরম্যাটটি আলোচনা করে এবং লেগ্যাসি সিস্টেমে পাওয়া UUID v2 মান ডিকোড করতে সহায়তা করে।

UUID v2-এর গঠন

UUID v2-এর অন্য UUID সংস্করণের মতো একই 128-বিট, হাইফেনযুক্ত ফরম্যাট রয়েছে। UUID v1 থেকে ক্ষেত্রগুলো নিম্নরূপে আলাদা:

ক্ষেত্রবিটউদ্দেশ্য
local_id32<code>local_id</code> — 32-বিট লোকাল ডোমেন শনাক্তকারী (যেমন <code>/etc/passwd</code> থেকে POSIX UID), UUID v1-এর time_low ক্ষেত্র প্রতিস্থাপন করে
time_mid16<code>time_mid</code> — সংক্ষিপ্ত UUID v1 টাইমস্ট্যাম্পের মধ্যবর্তী 16 বিট
time_hi+version16<code>time_hi_and_version</code> — শীর্ষ 12 টাইমস্ট্যাম্প বিট, সংস্করণ নিবল <code>2</code>-এ সেট করা
variant+clock_hi8<code>clock_seq_hi_and_reserved</code> — ভেরিয়েন্ট বিট এবং ক্লক সিকোয়েন্সের উচ্চ অংশ
local_domain8<code>local_domain</code> — ডোমেন শনাক্তকারী: <code>0</code> = POSIX User (UID), <code>1</code> = POSIX Group (GID), <code>2</code> = Organization
node48<code>node</code> — তৈরিকারী হোস্টের 48-বিট MAC অ্যাড্রেস

উদাহরণ: 000003e8-92e0-21ef-8000-325096b39f47 — local_id 0x000003e8 = UID 1000, local_domain 0x00 = POSIX User

Note:local_id ক্ষেত্র time_low ক্ষেত্র প্রতিস্থাপন করায়, UUID v2-এর টাইমস্ট্যাম্প মাত্র 28 বিট প্রশস্ত (UUID v1-এর 60 বিটের তুলনায়)। এটি টাইমস্ট্যাম্পের নির্ভুলতা আনুমানিক 7.2 মিনিটে কমিয়ে দেয় — একই host/domain/local_id সংমিশ্রণে একই 7-মিনিট উইন্ডোতে তৈরি UUID অনন্য নাও হতে পারে।

লোকাল ডোমেনের মান

local_domain বাইট UUID-এ এমবেড করা লোকাল শনাক্তকারীর ধরন নির্দিষ্ট করে:

0POSIX_UID
POSIX User ID — <code>/etc/passwd</code> থেকে সংখ্যাগত UID, <code>os.getuid()</code>-এর মাধ্যমে পাওয়া যায়
1POSIX_GID
POSIX Group ID — <code>/etc/group</code> থেকে সংখ্যাগত GID, <code>os.getgid()</code>-এর মাধ্যমে পাওয়া যায়
2ORG
Organization — একটি কাস্টম 32-বিট সাংগঠনিক শনাক্তকারী; অর্থ অ্যাপ্লিকেশন-নির্ধারিত

ডোমেনের মানগুলো DCE স্পেসিফিকেশন দ্বারা সংজ্ঞায়িত। 3–255 মানগুলো সংরক্ষিত। বাস্তবে, পাওয়া UUID v2 মানগুলোতে শুধুমাত্র ডোমেন 0 (Person/UID) সাধারণত দেখা যায়।

কেন UUID v2 বিরলভাবে ব্যবহৃত হয়

তিনটি বৈশিষ্ট্য UUID v2 কে বেশিরভাগ আধুনিক অ্যাপ্লিকেশনের জন্য অব্যবহারিক করে তোলে:

কম নির্ভুল টাইমস্ট্যাম্প রেজোলিউশন

টাইমস্ট্যাম্প 28 বিটে সংক্ষিপ্ত (আনুমানিক 7.2-মিনিট গ্রানুলারিটি)। সেই উইন্ডোর মধ্যে, একই হোস্টে একই local_id ও ডোমেন সহ তৈরি UUID অনন্য নয় — স্পেসিফিকেশন তাদের আলাদা করতে clock_seq ক্ষেত্রের উপর নির্ভর করে, যা প্রতি 7-মিনিট উইন্ডোতে অনন্যতা 64 মানের মধ্যে সীমাবদ্ধ করে।

কোনো স্ট্যান্ডার্ড লাইব্রেরি সমর্থন নেই

UUID v1 ও v4-এর বিপরীতে, বেশিরভাগ UUID লাইব্রেরি UUID v2 সমর্থন করে না। uuid npm প্যাকেজ, Python-এর uuid মডিউল এবং Java-এর java.util.UUID সবই v2 বাদ দেয়। কাস্টম বাস্তবায়ন প্রয়োজন।

POSIX-নির্দিষ্ট সিমান্টিক্স

লোকাল ডোমেন ধারণাটি (UID/GID) স্বভাবতই POSIX-নির্দিষ্ট এবং Windows, এমবেডেড সিস্টেম বা ক্লাউড পরিবেশে অর্থবহভাবে প্রযোজ্য নয় যেখানে POSIX ব্যবহারকারী ID-এর ধারণা অনুপস্থিত।

Warning:নতুন প্রজেক্টে UUID v2 ব্যবহার করবেন না। সাধারণ উদ্দেশ্যের অনন্য ID-এর জন্য ফরম্যাটটি UUID v4 বা v7-এর তুলনায় কোনো সুবিধা দেয় না। যদি আপনি কোনো লেগ্যাসি সিস্টেমে UUID v2 পান, তার ক্ষেত্রগুলো ডিকোড করতে এই টুলটি ব্যবহার করুন। নতুন উন্নয়নের জন্য UUID v4 ব্যবহার করুন।

ঐতিহাসিক প্রেক্ষাপট

UUID v2 নব্বইয়ের দশকের শুরুতে Open Software Foundation-এর Distributed Computing Environment (DCE/RPC)-এর অংশ হিসেবে সংজ্ঞায়িত হয়েছিল। লক্ষ্য ছিল এমন UUID তৈরি করা যা অনুমোদন প্রসঙ্গ বহন করতে পারে — বিশেষত, একটি RPC সার্ভারকে আলাদা প্রমাণীকরণ ধাপ ছাড়াই কলিং ব্যবহারকারীকে সনাক্ত করতে দেওয়া।

DCE নিরাপত্তা মডেলটি একটি একরকম POSIX পরিবেশ ধরে নিয়েছিল যেখানে প্রতিটি নোড একটি ভাগ করা UID/GID নেমস্পেসে অংশগ্রহণ করে। এমবেড করা UID সার্ভারকে ডিরেক্টরি সার্ভিসে রাউন্ড-ট্রিপ ছাড়াই দ্রুত অ্যাক্সেস কন্ট্রোল তালিকা পরীক্ষা করতে দিত।

  • ইন্টারনেট একরকম POSIX পরিবেশ থেকে মিশ্র ক্লাউড আর্কিটেকচারের দিকে সরে গেছে
  • আধুনিক প্রমাণীকরণ শনাক্তকারীতে এমবেড করা UID-এর পরিবর্তে টোকেন (JWT, OAuth) ব্যবহার করে
  • UUID v4 (সম্পূর্ণ র‍্যান্ডম) এবং UUID v7 (সময়-ক্রমানুসারী) অনন্য শনাক্তকারীর ব্যবহারিক ব্যবহারের ক্ষেত্রগুলো কভার করে
  • DCE/RPC নিজেই ব্যাপক ব্যবহার থেকে বাদ পড়েছে

RFC 4122 (2005) DCE স্পেসিফিকেশনের রেফারেন্সের মাধ্যমে UUID v2 অন্তর্ভুক্ত করেছে, তবে ইচ্ছাকৃতভাবে বিস্তারিত জেনারেশন অ্যালগরিদম বাদ দিয়েছে — উল্লেখ করে যে এটি IETF নয়, DCE দ্বারা সংজ্ঞায়িত।

RFC 9562 (2024), যা UUID মান আপডেট করেছে, ঐতিহাসিক সম্পূর্ণতার জন্য UUID v2 ধরে রেখেছে তবে এর POSIX-নির্দিষ্ট প্রকৃতি এবং IETF মানে সম্পূর্ণ জেনারেশন অ্যালগরিদমের অনুপস্থিতি উল্লেখ করা অব্যাহত রেখেছে।

UUID v2 বনাম UUID v1

UUID v2 UUID v1 থেকে উদ্ভূত। এখানে তুলনা করা হয়েছে:

দিকUUID v1UUID v2
টাইমস্ট্যাম্প বিট60 বিট (~100ns নির্ভুলতা)28 বিট (~7.2-মিনিট নির্ভুলতা)
লোকাল শনাক্তকারীনেই32-বিট POSIX UID/GID
লোকাল ডোমেনউপস্থিত নেই0=UID, 1=GID, 2=Org
নোড ক্ষেত্রMAC অ্যাড্রেসMAC অ্যাড্রেস
লাইব্রেরি সমর্থনব্যাপকভাবে সমর্থিতবিরলভাবে সমর্থিত
মানRFC 4122 / RFC 9562DCE spec (RFC 4122-এ উল্লেখিত)
ব্যবহারিক প্রয়োগলেগ্যাসি timestamp-ক্রমানুসারী ID (Cassandra)শুধুমাত্র DCE Security প্রসঙ্গে

সাধারণ উদ্দেশ্যে UUID v2 UUID v1-এর তুলনায় কিছুই দেয় না এবং প্রায় সব দিক থেকেই নিকৃষ্ট। নতুন উন্নয়নে UUID v2 বেছে নেওয়ার কোনো কারণ নেই।

কোড উদাহরণ

UUID v2-এর স্ট্যান্ডার্ড লাইব্রেরিতে কোনো নেটিভ সমর্থন নেই। নিচের উদাহরণগুলো দেখায় কীভাবে UUID v2 মানের সাথে কাজ করতে হয়:

Python — ম্যানুয়াল বাস্তবায়ন

Python
import uuid, struct, time

def uuid_v2(local_id: int, local_domain: int = 0) -> str:
    """
    Generate a DCE Security UUID (v2).
    local_domain: 0 = POSIX UID, 1 = POSIX GID, 2 = Org
    local_id: 32-bit unsigned integer (e.g. os.getuid())
    """
    # Get a v1 UUID for the time and node fields
    v1 = uuid.uuid1()
    fields = list(v1.fields)  # [time_low, time_mid, time_hi_version, clock_seq_hi_variant, clock_seq_low, node]

    # Replace time_low with local_id
    fields[0] = local_id & 0xFFFFFFFF

    # Replace version nibble: clear lower 12 bits of time_hi, set version 2
    fields[2] = (fields[2] & 0x0FFF) | 0x2000

    # Replace clock_seq_low with local_domain
    fields[4] = local_domain & 0xFF

    return str(uuid.UUID(fields=tuple(fields)))


import os
print(uuid_v2(os.getuid(), local_domain=0))   # POSIX UID
print(uuid_v2(os.getgid(), local_domain=1))   # POSIX GID

Go — google/uuid

Go
// "github.com/google/uuid" supports DCE (v2) via two helper functions:
import "github.com/google/uuid"

v2Person := uuid.NewDCEPerson()   // v2, local_domain=0, local_id=os.Getuid()
v2Group  := uuid.NewDCEGroup()    // v2, local_domain=1, local_id=os.Getgid()

// For most new projects, prefer:
v4 := uuid.New()          // v4 — random, universally supported
v7, _ := uuid.NewV7()     // v7 — time-ordered, good for database primary keys

JavaScript — ক্ষেত্র বের করুন

বিদ্যমান UUID v2 স্ট্রিং থেকে local_id ও ডোমেন বের করতে:

JavaScript
// Extracting fields from a UUID v2 string
const uuidStr = '000003e8-1234-2abc-8200-a1b2c3d4e5f6'
//               ^^^^^^^^ ^^^^ ^    ^^
//               local_id      ver  variant+clockSeqHi
//                                  ^^ = local_domain (00 = POSIX UID)

const parts = uuidStr.split('-')

const localId     = parseInt(parts[0], 16)       // → 1000 (0x3e8)
const version     = parseInt(parts[2][0], 16)    // → 2
const localDomain = parseInt(parts[3].slice(2), 16) // low byte of octet pair

const DOMAIN_NAMES = ['POSIX UID', 'POSIX GID', 'Org']
console.log(`Local ID: ${localId}`)                       // Local ID: 1000
console.log(`Version:  ${version}`)                       // Version:  2
console.log(`Domain:   ${DOMAIN_NAMES[localDomain]}`)     // Domain:   POSIX UID
Note:google/uuid হলো কয়েকটি মূলধারার লাইব্রেরির একটি যেখানে UUID v2-এর নেটিভ সমর্থন রয়েছে। বেশিরভাগ অন্যান্য (npm uuid, Python-এর uuid মডিউল, Java-এর java.util.UUID) এটি সম্পূর্ণভাবে বাদ দেয়।

সাধারণ জিজ্ঞাসা

JavaScript-এ কি UUID v2 তৈরি করা যায়?
JavaScript-এ কোনো স্ট্যান্ডার্ড লাইব্রেরি UUID v2 তৈরি সমর্থন করে না। আপনাকে বাইটগুলো ম্যানুয়ালি তৈরি করতে হবে: একটি UUID v1 নিন, time_low ক্ষেত্র (বাইট 0–3) আপনার লোকাল শনাক্তকারী দিয়ে প্রতিস্থাপন করুন, বাইট 9 আপনার ডোমেন মানে সেট করুন এবং সংস্করণ নিবল 2-এ সেট করুন। এই টুলটি UUID v2 তৈরি করে না — এটি শুধুমাত্র ডিকোড করে।
local_id ক্ষেত্রে কী থাকে?
local_id হলো একটি 32-বিট আনসাইন্ড পূর্ণসংখ্যা যার অর্থ local_domain বাইটের উপর নির্ভর করে। ডোমেন 0-এর জন্য, এটি প্রক্রিয়াটি চালানো ব্যবহারকারীর POSIX UID (যেমন Linux সিস্টেমে প্রথম non-root ব্যবহারকারীর জন্য 1000)। ডোমেন 1-এর জন্য, এটি POSIX GID। ডোমেন 2-এর জন্য, অর্থ অ্যাপ্লিকেশন-নির্ধারিত।
UUID v2-এর টাইমস্ট্যাম্প কি নির্ভরযোগ্য?
শুধুমাত্র একটি মোটা নির্দেশক হিসেবে। কারণ 60-বিট UUID v1 টাইমস্ট্যাম্পের মাত্র 28 বিট সংরক্ষিত থাকে, কার্যকর নির্ভুলতা আনুমানিক 7.2 মিনিট। আপনি একটি আনুমানিক তৈরির সময় ডিকোড করতে পারেন, তবে সঠিক সময় নয়। একটি 7-মিনিট উইন্ডোর মধ্যে, একই হোস্ট থেকে একই local_id ও ডোমেন সহ একাধিক UUID v2 মানের টাইমস্ট্যাম্প একই হবে।
কোন সিস্টেম এখনো UUID v2 ব্যবহার করে?
UUID v2 মূলত নব্বইয়ের দশকের লেগ্যাসি DCE/RPC সিস্টেমে, Microsoft-এর DCOM-এর কিছু সংস্করণে (যা DCE/RPC-এর উপর ভিত্তিক) এবং পুরনো বিতরণকৃত কম্পিউটিং মিডলওয়্যারে পাওয়া যায়। আধুনিক সিস্টেম প্রায় সর্বজনীনভাবে UUID v4 বা v7 ব্যবহার করে।
RFC 4122-এ কেন UUID v2 অ্যালগরিদম অন্তর্ভুক্ত নেই?
RFC 4122 স্পষ্টভাবে বলে যে UUID v2 জেনারেশন অ্যালগরিদম IETF নয়, DCE স্পেসিফিকেশন দ্বারা সংজ্ঞায়িত। যেহেতু IETF-এর DCE স্পেকের উপর কোনো কর্তৃত্ব ছিল না, তারা শুধুমাত্র একটি রেফারেন্স অন্তর্ভুক্ত করেছে। এই কারণেই RFC 4122 অনুসরণকারী বেশিরভাগ UUID লাইব্রেরি UUID v2 সমর্থন বাদ দেয়।
UUID v2 কি GUID-এর মতো?
না। GUID (Globally Unique Identifier) হলো Microsoft-এর UUID মানের বাস্তবায়ন। Microsoft COM অভ্যন্তরীণভাবে UUID v1 ও v4 GUID ব্যবহার করে। UUID v2 Windows GUID অবকাঠামো দ্বারা ব্যবহৃত হয় না, যদিও উভয়ই একই DCE/RPC উৎস থেকে উদ্ভূত।