ToolDeck

JavaScript-এ UUID v4 তৈরি করুন — সম্পূর্ণ গাইড

·TypeScript & Full-stack Developer·পর্যালোচনা করেছেনMarcus Webb·প্রকাশিত

বিনামূল্যে অনলাইন UUID v4 জেনারেটর সরাসরি আপনার ব্রাউজারে ব্যবহার করুন — ইনস্টলের প্রয়োজন নেই।

UUID v4 জেনারেটর অনলাইনে ব্যবহার করুন →

প্রতিটি JavaScript অ্যাপ্লিকেশনে শেষ পর্যন্ত অনন্য আইডেন্টিফায়ার দরকার হয় — সেশন টোকেন, ডেটাবেস রো, পেমেন্ট API-এর জন্য আইডেম্পোটেন্সি কী, ডিস্ট্রিবিউটেড ট্রেসিংয়ের জন্য কোরিলেশন ID। আজ JavaScript-এ UUID v4 তৈরির সবচেয়ে সহজ উপায় হলো crypto.randomUUID(): জিরো ডিপেন্ডেন্সি, এক লাইন, ক্রিপ্টোগ্রাফিক্যালি নিরাপদ। UUID v4 এত জনপ্রিয় কারণ সার্ভিসগুলোর মধ্যে কোনো সমন্বয় লাগে না — ক্লায়েন্ট আর সার্ভার উভয়ই কোলিশনের চিন্তা ছাড়া স্বাধীনভাবে ID তৈরি করতে পারে। এই গাইডে বিল্ট-ইন API, uuid npm প্যাকেজ এবং যাচাইকরণ — সবই Node.js 19+ এবং আধুনিক ব্রাউজারে কভার করা হয়েছে। নো-কোড অপশনের জন্য, ToolDeck-এর UUID v4 Generator তাৎক্ষণিকভাবে সম্মত আইডেন্টিফায়ার তৈরি করে।

  • crypto.randomUUID() ব্রাউজার এবং Node.js-এ বিল্ট-ইন — জিরো ডিপেন্ডেন্সি, এক লাইনের কোড।
  • UUID v4 হলো একটি ১২৮-বিট র‍্যান্ডম আইডেন্টিফায়ার: xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx (y হলো 8, 9, a বা b)।
  • /^[0-9a-f]{8}-[0-9a-f]{4}-4[0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$/i দিয়ে যাচাই করুন — ভার্সন এবং ভেরিয়েন্ট বিট চেক করে।
  • uuid npm প্যাকেজ v1, v3, v5 এবং v7 সমর্থন যোগ করে যখন র‍্যান্ডম ID-এর বেশি প্রয়োজন।
  • ডেটাবেস প্রাথমিক কী-এর জন্য, ইনডেক্স ফ্র্যাগমেন্টেশন কমাতে v4 (র‍্যান্ডম)-এর পরিবর্তে UUID v7 (টাইম-অর্ডারড) ব্যবহার করুন।

UUID v4 কী?

একটি UUID (Universally Unique Identifier) ভার্সন 4 হলো একটি ১২৮-বিট র‍্যান্ডম আইডেন্টিফায়ার যা চারটি হাইফেন দ্বারা বিভক্ত ৩২টি হেক্সাডেসিমাল ডিজিট হিসেবে ফরম্যাট করা হয়: xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx। ১৫ নম্বর পজিশনে 4 ভার্সন চিহ্নিত করে। ২০ নম্বর পজিশনে y অক্ষরটি 8, 9, a, বা b-এর একটি (RFC 4122 ভেরিয়েন্ট)। বাকি ১২২ বিট র‍্যান্ডম। UUID v4 JavaScript অ্যাপ্লিকেশনে সবচেয়ে প্রচলিত ভার্সন কারণ এটির সিস্টেমের মধ্যে কোনো সমন্বয় দরকার নেই — আপনি ক্লায়েন্ট ও সার্ভারে স্বাধীনভাবে কোলিশনের চিন্তা ছাড়াই ID তৈরি করতে পারেন।

Before · javascript
After · javascript
// কোনো আইডেন্টিফায়ার নেই
const event = { action: "user.login", ts: 1711824000 };
// UUID v4 সহ
const event = {
  id: "9b1deb4d-3b7d-4bad-9bdd-2b0d7b3dcb6d",
  action: "user.login",
  ts: 1711824000
};

crypto.randomUUID() — নেটিভ JavaScript পদ্ধতি

crypto.randomUUID() Chrome 92+, Firefox 95+, Safari 15.4+ এবং Node.js 19+-এ পাওয়া যায় (Node.js 14.17.0 থেকে globalThis.crypto-এর পেছনে পরীক্ষামূলক সমর্থন সহ)। এটি একটি লোয়ারকেস ৩৬-অক্ষরের UUID v4 স্ট্রিং রিটার্ন করে। ব্রাউজার JavaScript-এ কোনো import দরকার নেই। Node.js-এ, আপনি এটি সরাসরি গ্লোবাল crypto অবজেক্টে কল করতে পারেন বা node:crypto মডিউল থেকে স্পষ্টভাবে import করতে পারেন।

JavaScript — ব্রাউজার (জিরো ইমপোর্ট)
// যেকোনো আধুনিক ব্রাউজারে কাজ করে — কোনো বিল্ড স্টেপ বা বান্ডলার দরকার নেই
const requestId = crypto.randomUUID();
console.log(requestId);
// "3e7f1a92-4b0c-4d8e-9f12-7a6b3c8d5e1f"

// যেখানে অনন্য আইডেন্টিফায়ার দরকার সেখানে ব্যবহার করুন
const telemetryEvent = {
  event_id: crypto.randomUUID(),
  action: "checkout.started",
  session_id: crypto.randomUUID(),
  timestamp: Date.now(),
  cart_total_cents: 14999,
};
console.log(JSON.stringify(telemetryEvent, null, 2));
Node.js — দুটি সমতুল্য পদ্ধতি
// পদ্ধতি ১: গ্লোবাল crypto (Node.js 19+)
const orderId = crypto.randomUUID();
console.log(orderId);
// "a1b2c3d4-e5f6-4a7b-8c9d-0e1f2a3b4c5d"

// পদ্ধতি ২: node:crypto থেকে স্পষ্ট import
import { randomUUID } from 'node:crypto';
const correlationId = randomUUID();
console.log(correlationId);
// "f7e6d5c4-b3a2-4190-8f7e-6d5c4b3a2190"

যদি আপনার কোড পুরনো ব্রাউজার বা এম্বেডেড WebView-এ চলতে পারে তাহলে crypto.randomUUID ফিচার-ডিটেক্ট করা মূল্যবান। চেকটি একটি একক typeof গার্ড:

JavaScript — ফলব্যাক সহ ফিচার ডিটেকশন
function generateUUIDv4() {
  // উপলব্ধ হলে নেটিভ API পছন্দ করুন
  if (typeof crypto !== 'undefined' && typeof crypto.randomUUID === 'function') {
    return crypto.randomUUID();
  }

  // getRandomValues ব্যবহার করে ম্যানুয়াল ফলব্যাক (পরবর্তী বিভাগ দেখুন)
  const bytes = new Uint8Array(16);
  crypto.getRandomValues(bytes);

  // ভার্সন (4) এবং ভেরিয়েন্ট (RFC 4122) সেট করুন
  bytes[6] = (bytes[6] & 0x0f) | 0x40; // version 4
  bytes[8] = (bytes[8] & 0x3f) | 0x80; // variant 10xx

  const hex = [...bytes].map(b => b.toString(16).padStart(2, '0'));
  return [
    hex.slice(0, 4).join(''),
    hex.slice(4, 6).join(''),
    hex.slice(6, 8).join(''),
    hex.slice(8, 10).join(''),
    hex.slice(10, 16).join(''),
  ].join('-');
}

console.log(generateUUIDv4());
// "9b2e4f1a-7c3d-4e8f-a5b6-0d2c1e9f8a7b"
নোট:সিকিউর কনটেক্সটে (HTTPS পেজ, localhost, ব্রাউজার এক্সটেনশন), crypto.randomUUID() সবসময় পাওয়া যায়। কিছু ব্রাউজারে নন-সিকিউর HTTP পেজে এটি এরর ছুড়ে দেয়। যদি আপনার অ্যাপ্লিকেশন ডেভেলপমেন্টের সময় প্লেইন HTTP-এ চলে, উপরে দেওয়া getRandomValues ফলব্যাক সেটি সামলায়।

লাইব্রেরি ছাড়া UUID v4 তৈরি করুন

কখনো কখনো আপনি crypto.randomUUID()-এর উপর নির্ভর করতে পারবেন না — হয়তো আপনি এমন একটি WebView টার্গেট করছেন যা crypto API সরিয়ে দেয়, অথবা আপনি বুঝতে চান ভেতরে কী হয়। ম্যানুয়াল পদ্ধতিতে crypto.getRandomValues() (IE 11 থেকে পাওয়া যায়) ব্যবহার করে ১৬ বাইট র‍্যান্ডম ডেটা পূর্ণ করা হয়, তারপর ভার্সন ও ভেরিয়েন্ট ফিল্ড সেট করতে দুটি বিটমাস্ক অপারেশন প্রয়োগ করা হয়। এই দুটি অপারেশনই UUID v4 এবং একটি বিশুদ্ধ র‍্যান্ডম বাইট স্ট্রিংয়ের মধ্যে একমাত্র পার্থক্য।

JavaScript — getRandomValues দিয়ে ম্যানুয়াল UUID v4
function uuidv4Manual() {
  const bytes = new Uint8Array(16);
  crypto.getRandomValues(bytes);

  // ভার্সন সেট করুন: byte 6-এর bits 12–15 = 0100 (version 4)
  bytes[6] = (bytes[6] & 0x0f) | 0x40;

  // ভেরিয়েন্ট সেট করুন: byte 8-এর bits 6–7 = 10 (RFC 4122)
  bytes[8] = (bytes[8] & 0x3f) | 0x80;

  const hex = [...bytes].map(b => b.toString(16).padStart(2, '0'));

  return (
    hex.slice(0, 4).join('') + '-' +
    hex.slice(4, 6).join('') + '-' +
    hex.slice(6, 8).join('') + '-' +
    hex.slice(8, 10).join('') + '-' +
    hex.slice(10, 16).join('')
  );
}

const traceId = uuidv4Manual();
console.log(traceId);
// "e4d7c2a1-3f9b-48e5-a612-9d8c7b6a5f4e"

// UUID v4 যাচাইকরণ পাস করে কিনা দেখুন
const UUID_V4_RE = /^[0-9a-f]{8}-[0-9a-f]{4}-4[0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$/i;
console.log(UUID_V4_RE.test(traceId)); // true
সতর্কতা:UUID তৈরিতে কখনো Math.random() ব্যবহার করবেন না। এটি ক্রিপ্টোগ্রাফিক্যালি নিরাপদ নয়, এর আউটপুট পিরিয়ড খুব ছোট, এবং কিছু ইঞ্জিন পূর্বাভাসযোগ্য সিকোয়েন্স তৈরি করে। সবসময় crypto.getRandomValues() বা crypto.randomUUID() ব্যবহার করুন।

uuid npm প্যাকেজ — মাল্টি-ভার্সন সমর্থন

npm-এ uuid প্যাকেজটি crypto.randomUUID() আসার আগে থেকেই JavaScript-এর গো-টু UUID লাইব্রেরি। তিনটি পরিস্থিতিতে এটি এখনো উপযুক্ত: আপনার v4 ছাড়া অন্য UUID ভার্সন দরকার (v1, v3, v5, v7), আপনি Node.js 14.17.0-এর পুরনো রানটাইম টার্গেট করছেন, অথবা আপনি validate এবং parse ইউটিলিটি ফাংশন চান। আধুনিক রানটাইমে সরল UUID v4-এর জন্য, নেটিভ API যথেষ্ট এবং আমি ডিপেন্ডেন্সি এড়িয়ে যেতাম।

bash — ইনস্টল করুন
npm install uuid
JavaScript — v4 তৈরির জন্য uuid প্যাকেজ
import { v4 as uuidv4, validate, version } from 'uuid';

// একটি UUID v4 তৈরি করুন
const paymentId = uuidv4();
console.log(paymentId);
// "1b9d6bcd-bbfd-4b2d-9b5d-ab8dfbbd4bed"

// যেকোনো UUID স্ট্রিং যাচাই করুন
console.log(validate(paymentId));    // true
console.log(validate("not-a-uuid")); // false

// UUID-এর ভার্সন সনাক্ত করুন
console.log(version(paymentId));     // 4

// টেস্ট ডেটাবেস সিড করতে ব্যাচ তৈরি করুন
const testAccounts = Array.from({ length: 5 }, () => ({
  account_id: uuidv4(),
  plan: "starter",
  created_at: new Date().toISOString(),
}));
console.log(testAccounts);
নোট:uuid প্যাকেজ ব্রাউজারে crypto.getRandomValues() এবং Node.js-এ crypto.randomBytes() অভ্যন্তরীণভাবে ব্যবহার করে, তাই এন্ট্রপি সোর্স নেটিভ API-এর মতোই। পার্থক্য শুধু অতিরিক্ত ইউটিলিটি ফাংশন এবং মাল্টি-ভার্সন সমর্থন।

যদি কোড একদমই লিখতে না চান, তাহলে UUID v4 Generator ব্যবহার করুন — এটি একটি ক্লিকেই সরাসরি আপনার ব্রাউজারে RFC 4122-সম্মত v4 আইডেন্টিফায়ার তৈরি করে।

নির্ধারণযোগ্য UUID — একটি স্ট্রিং থেকে UUID v5 তৈরি

UUID v4 সম্পূর্ণ র‍্যান্ডম — দুইবার কল করলে সবসময় আলাদা ফলাফল দেয়। কখনো কখনো আপনার বিপরীতটা দরকার: একই ইনপুট স্ট্রিং সবসময় একই UUID তৈরি করবে। UUID v5 ঠিক সেটাই করে। এটি একটি নেমস্পেস UUID এবং একটি ইনপুট স্ট্রিং SHA-1 দিয়ে হ্যাশ করে, তারপর ফলাফলটি UUID হিসেবে ফরম্যাট করে। একই নেমস্পেস + একই ইনপুট = একই আউটপুট, প্রতিবার, প্রতিটি মেশিনে। এটি URL, ইমেইল ঠিকানা বা যেকোনো স্ট্রিং থেকে স্থায়ী ID বের করার জন্য দরকারী যা ইতিমধ্যে একটি রিসোর্স আইডেন্টিফাই করে।

JavaScript — নির্ধারণযোগ্য ID-এর জন্য uuid v5
import { v5 as uuidv5 } from 'uuid';

// URL-এর জন্য বিল্ট-ইন নেমস্পেস (RFC 4122)
const URL_NAMESPACE = uuidv5.URL;
// "6ba7b811-9dad-11d1-80b4-00c04fd430c8"

// একই URL সবসময় একই UUID তৈরি করে
const pageId1 = uuidv5("https://api.warehouse.dev/products/sku-7291", URL_NAMESPACE);
const pageId2 = uuidv5("https://api.warehouse.dev/products/sku-7291", URL_NAMESPACE);
console.log(pageId1 === pageId2); // true
console.log(pageId1);
// "a6e4e1c0-7e23-5d3b-8f14-9c2a1b3d5e7f"

// আপনার অ্যাপ্লিকেশনের জন্য কাস্টম নেমস্পেস
const APP_NAMESPACE = "f47ac10b-58cc-4372-a567-0e02b2c3d479";
const tenantId = uuidv5("acme-corp", APP_NAMESPACE);
console.log(tenantId);
// "d4735e3a-265b-564e-8f32-7a1b2c3d4e5f"

সংক্ষিপ্ত নোট: UUID v3 একই কাজ করে কিন্তু SHA-1-এর পরিবর্তে MD5 ব্যবহার করে। নতুন প্রজেক্টের জন্য v5 পছন্দ করুন। MD5-এর পরিচিত কোলিশন দুর্বলতা আছে, এবং যদিও সেটা ID তৈরির ক্ষেত্রে তেমন গুরুত্বপূর্ণ নয়, SHA-1 থাকতে MD5 নেওয়ার কোনো কারণ নেই।

crypto.randomUUID() এবং সংশ্লিষ্ট API রেফারেন্স

নেটিভ crypto.randomUUID() কোনো আর্গুমেন্ট নেয় না — এটি একটি স্ট্রিং রিটার্ন করে এবং আর কিছু নয়। জিরো ডিপেন্ডেন্সি সহ RFC 4122 সম্মত আইডেন্টিফায়ার দরকার হলে এটি ব্যবহার করুন। যখন ফরম্যাটেড UUID স্ট্রিংয়ের পরিবর্তে কাঁচা র‍্যান্ডম বাইট দরকার — উদাহরণস্বরূপ, একটি typed array পূরণ করতে বা একটি কী বের করতে — সরাসরি crypto.getRandomValues() ব্যবহার করুন। UUID কাজের জন্য গুরুত্বপূর্ণ সংশ্লিষ্ট API নিচে তালিকাভুক্ত।

প্রপার্টি / মেথড
রিটার্ন টাইপ
বিবরণ
crypto.randomUUID()
string
লোয়ারকেস হেক্সাডেসিমাল ও হাইফেন সহ ৩৬-অক্ষরের UUID v4 স্ট্রিং রিটার্ন করে
crypto.getRandomValues(arr)
TypedArray
একটি typed array-কে ক্রিপ্টোগ্রাফিক্যালি র‍্যান্ডম মান দিয়ে পূর্ণ করে — ম্যানুয়াল UUID জেনারেশনের মূল ভিত্তি
URL.createObjectURL(blob)
string
একটি অনন্য blob URL তৈরি করে (UUID নয়, তবে কখনো কখনো বিভ্রান্তি হয়)

UUID v4 regex প্যাটার্নের ব্যাখ্যা:

সেগমেন্ট
প্যাটার্ন
অর্থ
[0-9a-f]{8}
xxxxxxxx
প্রথম ৮টি হেক্স ডিজিট — ৩২টি র‍্যান্ডম বিট
[0-9a-f]{4}
xxxx
পরবর্তী ৪টি হেক্স ডিজিট — ১৬টি র‍্যান্ডম বিট
4[0-9a-f]{3}
4xxx
ভার্সন নিবল ৪-এ নির্ধারিত, তারপরে ১২টি র‍্যান্ডম বিট
[89ab][0-9a-f]{3}
yxxx
ভেরিয়েন্ট নিবল ৮, ৯, a বা b-এর যেকোনো একটি — তারপরে ১২টি র‍্যান্ডম বিট
[0-9a-f]{12}
xxxxxxxxxxxx
শেষ ১২টি হেক্স ডিজিট — ৪৮টি র‍্যান্ডম বিট

Regex দিয়ে UUID v4 যাচাই করুন

একটি স্ট্রিং সঠিক UUID v4 কিনা যাচাই করা প্রায়ই দরকার হয় — আসা API রিকোয়েস্ট বডি, URL প্যারামিটার, ওয়েবহুক পেলোড। জিরো ডিপেন্ডেন্সি চাইলে এবং শুধু v4 যাচাই করতে হলে হাতে লেখা regex সঠিক পছন্দ। যদি আপনি ইতিমধ্যে uuid প্যাকেজ ব্যবহার করেন, তার validate() এক্সপোর্ট পছন্দ করুন — এটি সব UUID ভার্সন সামলায় এবং কাস্টম প্যাটার্ন রক্ষণাবেক্ষণের চেয়ে কম ভুলপ্রবণ। regex /^[0-9a-f]{8}-[0-9a-f]{4}-4[0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$/i ভার্সন নিবল (অবশ্যই 4) এবং ভেরিয়েন্ট নিবল (অবশ্যই 8, 9, a, বা b) উভয়ই পরীক্ষা করে। বুলিয়ান চেকের জন্য RegExp.prototype.test() এবং আশপাশের টেক্সট থেকে UUID বের করতে .match() ব্যবহার করুন।

JavaScript — UUID v4 যাচাইকরণ হেলপার
const UUID_V4_RE = /^[0-9a-f]{8}-[0-9a-f]{4}-4[0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$/i;

function isUUIDv4(str) {
  return UUID_V4_RE.test(str);
}

// বৈধ UUID v4
console.log(isUUIDv4("9b1deb4d-3b7d-4bad-9bdd-2b0d7b3dcb6d")); // true

// UUID v1 — ভার্সন নিবল 4 নয়, 1
console.log(isUUIDv4("550e8400-e29b-11d4-a716-446655440000")); // false

// UUID v7 — ভার্সন নিবল 7
console.log(isUUIDv4("018e4a0c-5b3f-7d12-8a9b-0c1d2e3f4a5b")); // false

// বিকৃত স্ট্রিং
console.log(isUUIDv4("not-a-uuid"));           // false
console.log(isUUIDv4(""));                      // false
console.log(isUUIDv4("9b1deb4d3b7d4bad9bdd2b0d7b3dcb6d")); // false (হাইফেন নেই)

// বড় স্ট্রিং থেকে UUID বের করুন
const logLine = 'Request req_id=9b1deb4d-3b7d-4bad-9bdd-2b0d7b3dcb6d failed with 503';
const match = logLine.match(/[0-9a-f]{8}-[0-9a-f]{4}-4[0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}/i);
console.log(match?.[0]);
// "9b1deb4d-3b7d-4bad-9bdd-2b0d7b3dcb6d"

ফাইল এবং API রেসপন্স থেকে UUID তৈরি ও সংযুক্ত করুন

বাস্তবে, আপনি crypto.randomUUID() একাকী কদাচিৎ কল করেন। দুটি প্যাটার্ন বারবার আসে: ডেটাবেসে লেখার আগে রেকর্ডে ID অ্যাসাইন করা, এবং আউটবাউন্ড API রিকোয়েস্টে কোরিলেশন ID সংযুক্ত করা যাতে আপনি লগে সার্ভিস জুড়ে রিকোয়েস্ট ট্রেস করতে পারেন।

NDJSON ফাইল পড়ুন → UUID অ্যাসাইন করুন → ফিরে লিখুন

Node.js — ফাইল থেকে রেকর্ডে UUID অ্যাসাইন করুন
import { readFileSync, writeFileSync } from 'node:fs';
import { randomUUID } from 'node:crypto';

function assignIds(inputPath, outputPath) {
  const lines = readFileSync(inputPath, 'utf-8')
    .split('\n')
    .filter(line => line.trim());

  const records = lines.map(line => {
    try {
      const record = JSON.parse(line);
      if (!record.id) {
        record.id = randomUUID();
      }
      return JSON.stringify(record);
    } catch (err) {
      console.error(`Skipping malformed line: ${err.message}`);
      return null;
    }
  }).filter(Boolean);

  writeFileSync(outputPath, records.join('\n') + '\n');
  console.log(`Assigned IDs to ${records.length} records → ${outputPath}`);
}

assignIds('warehouse-products.ndjson', 'warehouse-products-with-ids.ndjson');
// Assigned IDs to 1284 records → warehouse-products-with-ids.ndjson

আউটবাউন্ড API রিকোয়েস্টে কোরিলেশন ID সংযুক্ত করুন

Node.js — ডিস্ট্রিবিউটেড ট্রেসিংয়ের জন্য কোরিলেশন ID
import { randomUUID } from 'node:crypto';

async function createShipment(orderPayload) {
  const correlationId = randomUUID();

  try {
    const response = await fetch('https://api.logistics.dev/v2/shipments', {
      method: 'POST',
      headers: {
        'Content-Type': 'application/json',
        'X-Correlation-ID': correlationId,
        'X-Idempotency-Key': randomUUID(),
      },
      body: JSON.stringify(orderPayload),
    });

    if (!response.ok) {
      const errorBody = await response.text();
      throw new Error(`Shipment API returned ${response.status}: ${errorBody}`);
    }

    const result = await response.json();
    console.log(`Shipment created: ${result.shipment_id} (correlation: ${correlationId})`);
    return result;
  } catch (err) {
    console.error(`[correlation:${correlationId}] Shipment failed: ${err.message}`);
    throw err;
  }
}

await createShipment({
  order_id: "ord_8a3f91bc",
  destination: { city: "ঢাকা", state: "ঢাকা বিভাগ", zip: "1000" },
  items: [{ sku: "WH-7291", quantity: 2, weight_kg: 1.4 }],
});

কমান্ড-লাইনে UUID তৈরি

আপনার সবসময় স্ক্রিপ্ট দরকার নেই। Node.js সরাসরি কমান্ড লাইন থেকে UUID তৈরি করতে পারে, যা শেল স্ক্রিপ্ট, CI পাইপলাইন এবং দ্রুত অ্যাড-হক টেস্টিংয়ের জন্য কাজে আসে। -e ফ্ল্যাগ একটি একক এক্সপ্রেশন মূল্যায়ন করে।

bash — কমান্ড লাইনে UUID তৈরি করুন
# একটি UUID
node -e "console.log(crypto.randomUUID())"
# 3e7f1a92-4b0c-4d8e-9f12-7a6b3c8d5e1f

# একসাথে পাঁচটি UUID
node -e "for(let i=0;i<5;i++) console.log(crypto.randomUUID())"

# তৈরি করুন এবং শেল ভেরিয়েবলে অ্যাসাইন করুন
export REQUEST_ID=$(node -e "process.stdout.write(crypto.randomUUID())")
echo "Request ID: $REQUEST_ID"

# npx uuid ব্যবহার করুন (প্যাকেজ গ্লোবালি ইনস্টল থাকলে বা এককালীন ব্যবহারের জন্য)
npx uuid v4
# 1b9d6bcd-bbfd-4b2d-9b5d-ab8dfbbd4bed
bash — ব্রাউজার কনসোলে UUID তৈরি করুন (Node.js ছাড়া)
# যেকোনো ব্রাউজার DevTools কনসোল খুলুন এবং টাইপ করুন:
crypto.randomUUID()
# "9b1deb4d-3b7d-4bad-9bdd-2b0d7b3dcb6d"
নোট:CI পাইপলাইনে UUID দরকার হলে এবং Node.js না থাকলে, uuidgen macOS এবং বেশিরভাগ Linux ডিস্ট্রিবিউশনে প্রি-ইনস্টল থাকে। আধুনিক সিস্টেমে এটি ডিফল্টে UUID v4 তৈরি করে।

উচ্চ-পারফরম্যান্স বিকল্প — nanoid

যদি আপনি প্রতি সেকেন্ডে হাজার হাজার ID তৈরি করছেন এবং ৩৬-অক্ষরের UUID ফরম্যাট কঠোর প্রয়োজন না হয়, তাহলে nanoid বিবেচনা করুন। এটি uuid.v4()-এর চেয়ে ২x দ্রুত, ডিফল্টে ২১-অক্ষরের URL-safe ID তৈরি করে এবং মিনিফিকেশনের পর প্রায় ১ KB। আউটপুটটি UUID নয় — এটি একটি কাস্টম-অ্যালফাবেট ID — তাই যেখানে RFC 4122 সম্মতি প্রয়োজন (ডেটাবেস UUID কলাম, UUID ফরম্যাট যাচাই করা API, OpenTelemetry ট্রেস ID) সেখানে ব্যবহার করবেন না। কিন্তু অভ্যন্তরীণ কোরিলেশন ID, React কম্পোনেন্ট কী এবং URL স্লাগের জন্য, এটি উপযুক্ত।

bash — nanoid ইনস্টল করুন
npm install nanoid
JavaScript — সংক্ষিপ্ত অনন্য ID-এর জন্য nanoid
import { nanoid, customAlphabet } from 'nanoid';

// ডিফল্ট: ২১-অক্ষর URL-safe ID (A-Za-z0-9_-)
const trackingCode = nanoid();
console.log(trackingCode);
// "V1StGXR8_Z5jdHi6B-myT"

// কাস্টম দৈর্ঘ্য
const shortCode = nanoid(10);
console.log(shortCode);
// "IRFa-VaY2b"

// কাস্টম অ্যালফাবেট — শুধু সংখ্যা, ১২ ডিজিট
const numericId = customAlphabet('0123456789', 12);
console.log(numericId());
// "839274651023"

// কাস্টম অ্যালফাবেট — শুধু হেক্স, ৩২ অক্ষর (হাইফেন ছাড়া UUID v4-এর মতো এন্ট্রপি)
const hexId = customAlphabet('0123456789abcdef', 32);
console.log(hexId());
// "4f8a1b2c3d7e9f0a5b6c8d1e2f3a4b5c"

সিনট্যাক্স হাইলাইটিং সহ টার্মিনাল আউটপুট

UUID-ভারী অ্যাপ্লিকেশন ডিবাগ করার অর্থ টার্মিনালে হেক্স স্ট্রিংয়ের দেয়ালের দিকে তাকানো। রঙ-কোডিং সাহায্য করে। chalk লাইব্রেরি (বা Node.js 21.7+-এ নতুন বিল্ট-ইন node:util styleText) আপনাকে লগ আউটপুটে UUID হাইলাইট করতে দেয় যাতে সেগুলো আশপাশের টেক্সট থেকে আলাদা হয়।

Node.js — chalk দিয়ে রঙ-কোডেড UUID আউটপুট
import chalk from 'chalk';
import { randomUUID } from 'node:crypto';

function logEvent(action, metadata = {}) {
  const eventId = randomUUID();
  const timestamp = new Date().toISOString();

  console.log(
    chalk.gray(timestamp),
    chalk.cyan(eventId),
    chalk.white(action),
    Object.keys(metadata).length
      ? chalk.dim(JSON.stringify(metadata))
      : ''
  );
}

logEvent('shipment.created', { order_id: 'ord_8a3f', carrier: 'fedex' });
logEvent('payment.captured', { amount_cents: 14999, currency: 'USD' });
logEvent('webhook.delivered', { endpoint: 'https://hooks.acme.dev/orders' });
// 2026-03-27T10:15:00.000Z  a1b2c3d4-...  shipment.created  {"order_id":"ord_8a3f",...}
সতর্কতা:রঙ এস্কেপ কোড লগ ফাইল নষ্ট করে এবং JSON পার্সার ভাঙে। chalk বা styleText শুধুমাত্র টার্মিনাল আউটপুটের জন্য ব্যবহার করুন যা একজন মানুষ সরাসরি পড়ে। ফাইলে বা লগ অ্যাগ্রিগেটরে যাওয়া স্ট্রাকচার্ড লগের জন্য, প্লেইন JSON ব্যবহার করুন।

JavaScript-এ সংক্ষিপ্ত অনন্য ID তৈরি করুন

৩৬-অক্ষরের UUID কখনো কখনো বড় হয়ে যায় — URL স্লাগ, QR কোড ডেটা, SMS বার্তা এবং এম্বেডেড হার্ডওয়্যার প্রোটোকলে দৈর্ঘ্যের সীমাবদ্ধতা আছে।

JavaScript — সংক্ষিপ্ত ID-এর তিনটি কৌশল
import { randomUUID } from 'node:crypto';

// ১. UUID v4 থেকে হাইফেন সরান → ৩২-অক্ষর হেক্স স্ট্রিং
const hex32 = randomUUID().replaceAll('-', '');
console.log(hex32);
// "3e7f1a924b0c4d8e9f127a6b3c8d5e1f" (৩২ অক্ষর)

// ২. ১৬ র‍্যান্ডম বাইট Base64-এনকোড করুন → ২২-অক্ষর স্ট্রিং (URL-safe)
const bytes = new Uint8Array(16);
crypto.getRandomValues(bytes);
const base64Id = Buffer.from(bytes)
  .toString('base64url')
  .replace(/=+$/, '');
console.log(base64Id);
// "Pj8akksNTY6fEnarPIvR" (২২ অক্ষর, ১২৮ বিটের এন্ট্রপি)

// ৩. কাস্টম দৈর্ঘ্যে nanoid
import { nanoid } from 'nanoid';
const short12 = nanoid(12);
console.log(short12);
// "V1StGXR8_Z5j" (১২ অক্ষর, ~৭১ বিটের এন্ট্রপি)

কোলিশন সম্ভাবনার গণিত: একটি ১২-অক্ষরের nanoid (৬৪ অক্ষরের ডিফল্ট অ্যালফাবেট) প্রায় ৭১ বিট এন্ট্রপি দেয়। প্রতি সেকেন্ডে ১,০০০ ID তৈরিতে ১% কোলিশন সম্ভাবনায় পৌঁছাতে প্রায় ১১৬ বছর লাগবে। বেশিরভাগ অ্যাপ্লিকেশনের জন্য, এটি যথেষ্টের বেশি। যদি আপনি প্রতিদিন লক্ষ লক্ষ ID তৈরি করছেন, পূর্ণ UUID ব্যবহার করুন বা কমপক্ষে ২১ অক্ষরের nanoid ব্যবহার করুন।

UUID v7 — v4-এর টাইম-অর্ডারড বিকল্প

UUID v7 (RFC 9562-এ সংজ্ঞায়িত) প্রথম সেগমেন্টে একটি ৪৮-বিট Unix মিলিসেকেন্ড টাইমস্ট্যাম্প এম্বেড করে, তারপরে র‍্যান্ডম বিট। ফলাফলটি এমন একটি UUID যা v4-এর মতো দেখতে কিন্তু টাইম-অর্ডারড সর্ট হয়। এটি ডেটাবেস প্রাথমিক কী হিসেবে v4-এর চেয়ে ভালো পছন্দ: নতুন রো সবসময় B-tree ইনডেক্সের শেষে যায় র‍্যান্ডম পজিশনে না গিয়ে, যা পেজ স্প্লিট এবং ফ্র্যাগমেন্টেশন কমায়। যে প্রজেক্টে Postgres টেবিলের জন্য টাইম-অর্ডারড ID দরকার, আমি সাথে সাথে v7-এ চলে যাই — স্কেলে ইনডেক্স পারফরম্যান্স পার্থক্য পরিমাপযোগ্য। ToolDeck-এর UUID v7 Generator যেকোনো v7 UUID-এর এম্বেডেড টাইমস্ট্যাম্প দেখায়।

JavaScript — uuid প্যাকেজ দিয়ে UUID v7
import { v7 as uuidv7 } from 'uuid';

// তিনটি UUID v7 মান তৈরি করুন — লক্ষ্য করুন এগুলো টাইম-অর্ডারড সর্ট হয়
const id1 = uuidv7();
const id2 = uuidv7();
const id3 = uuidv7();

console.log(id1);
// "018e4a0c-5b3f-7d12-8a9b-0c1d2e3f4a5b"
console.log(id2);
// "018e4a0c-5b40-7e34-9c2d-1e4f5a6b7c8d"
console.log(id3);
// "018e4a0c-5b41-7f56-ae3f-2a5b6c7d8e9f"

// এগুলো তৈরির সময় অনুযায়ী লেক্সিকোগ্রাফিক্যালি সর্ট হয়
console.log([id3, id1, id2].sort());
// [id1, id2, id3] — তৈরির ক্রম বজায় থাকে

// যেখানে টাইমিং ফাঁস হওয়া উচিত নয় সেখানে v4 ব্যবহার করুন
import { v4 as uuidv4 } from 'uuid';
const sessionToken = uuidv4(); // সম্পূর্ণ র‍্যান্ডম, কোনো টাইমিং তথ্য নেই
নোট:uuid প্যাকেজ সংস্করণ 9.0.0 থেকে v7 সমর্থন করে। যদি আপনি পুরনো সংস্করণে থাকেন, আপগ্রেড করতে npm install uuid@latest চালান।

বিল্ড স্টেপ ছাড়া ব্রাউজারে UUID v4

কোনো বান্ডলার নেই, কোনো npm নেই, কোনো ট্রান্সপাইলার নেই। শুধু একটি প্লেইন HTML ফাইল। এটি ক্লায়েন্ট-সাইড JavaScript-এ UUID তৈরির সবচেয়ে সহজ উপায়। এটি কাজ করে কারণ crypto.randomUUID() একটি বিল্ট-ইন ব্রাউজার API।

HTML — ন্যূনতম ব্রাউজার UUID জেনারেটর
<!DOCTYPE html>
<html lang="en">
<head><meta charset="utf-8"><title>UUID Generator</title></head>
<body>
  <p>Your UUID: <strong id="output"></strong></p>
  <button onclick="document.getElementById('output').textContent = crypto.randomUUID()">
    Generate
  </button>
  <script>
    // পেজ লোডে একটি তৈরি করুন
    document.getElementById('output').textContent = crypto.randomUUID();
  </script>
</body>
</html>

এটাই পুরো ফাইল। কোনো CDN import নেই, লাইব্রেরি টেনে আনার কোনো স্ক্রিপ্ট ট্যাগ নেই। আরো জটিল কিছুর জন্য — ব্যাচ তৈরি, যাচাইকরণ, নির্ধারণযোগ্য ID — আপনার uuid প্যাকেজ বা আগে দেখানো ম্যানুয়াল ফলব্যাক লাগবে। কিন্তু একটি দ্রুত প্রোটোটাইপ বা অভ্যন্তরীণ টুলের জন্য, এটুকুই যথেষ্ট।

সাধারণ ভুলসমূহ

পুরনো ব্লগ পোস্ট থেকে Math.random()-ভিত্তিক UUID কোড কপি করে প্রোডাকশনে দেওয়ার ঘটনা আমি অনেকবার দেখেছি। এই প্যাটার্নগুলো যে বাগ তৈরি করে তা নীরব: কোনো রানটাইম এরর নেই, শুধু সূক্ষ্মভাবে ভুল আচরণ যা পরে লোডের মধ্যে বা নিরাপত্তা পর্যালোচনায় প্রকাশ পায়।

UUID তৈরিতে Math.random() ব্যবহার করা

সমস্যা: Math.random() ক্রিপ্টোগ্রাফিক্যালি নিরাপদ নয়। কিছু ইঞ্জিনে এর আউটপুট পূর্বাভাসযোগ্য, এবং কম এন্ট্রপি সঠিক CSPRNG-এর চেয়ে কোলিশন অনেক বেশি সম্ভব করে।

সমাধান: সবসময় crypto.randomUUID() বা crypto.getRandomValues() ব্যবহার করুন। উভয়ই অপারেটিং সিস্টেমের CSPRNG ব্যবহার করে।

Before · JavaScript
After · JavaScript
// অনিরাপদ — পূর্বাভাসযোগ্য, কম এন্ট্রপি
function badUuid() {
  return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(
    /[xy]/g,
    c => {
      const r = Math.random() * 16 | 0;
      return (c === 'x' ? r : (r & 0x3 | 0x8)).toString(16);
    }
  );
}
// নিরাপদ — OS CSPRNG ব্যবহার করে
const id = crypto.randomUUID();

// বা ম্যানুয়াল ফলব্যাক প্রয়োজন হলে:
function secureUuid() {
  const bytes = new Uint8Array(16);
  crypto.getRandomValues(bytes);
  bytes[6] = (bytes[6] & 0x0f) | 0x40;
  bytes[8] = (bytes[8] & 0x3f) | 0x80;
  const h = [...bytes].map(b => b.toString(16).padStart(2, '0'));
  return `${h.slice(0,4).join('')}-${h.slice(4,6).join('')}-${h.slice(6,8).join('')}-${h.slice(8,10).join('')}-${h.slice(10).join('')}`;
}
কেস-সেন্সিটিভ সমতা দিয়ে UUID তুলনা করা

সমস্যা: crypto.randomUUID() লোয়ারকেস হেক্স রিটার্ন করে, কিন্তু অন্য সিস্টেম (ডেটাবেস, API, ইউজার ইনপুট) থেকে UUID আপারকেস ব্যবহার করতে পারে। কেস আলাদা হলে সরাসরি === তুলনা ব্যর্থ হয়।

সমাধান: তুলনার আগে উভয় দিককে লোয়ারকেসে নর্মালাইজ করুন।

Before · JavaScript
After · JavaScript
const fromApi = "9B1DEB4D-3B7D-4BAD-9BDD-2B0D7B3DCB6D"; // API থেকে আপারকেস
const local  = "9b1deb4d-3b7d-4bad-9bdd-2b0d7b3dcb6d";  // crypto থেকে লোয়ারকেস

if (fromApi === local) { /* কখনো চলে না */ }
const fromApi = "9B1DEB4D-3B7D-4BAD-9BDD-2B0D7B3DCB6D";
const local  = "9b1deb4d-3b7d-4bad-9bdd-2b0d7b3dcb6d";

if (fromApi.toLowerCase() === local.toLowerCase()) {
  // সঠিকভাবে মেলে
}
UUID স্ট্রিংয়ের পরিবর্তে অবজেক্ট হিসেবে সংরক্ষণ করা

সমস্যা: কিছু UUID লাইব্রেরি (বিশেষত অন্য ভাষায়) UUID অবজেক্ট রিটার্ন করে। JavaScript-এ দুর্ঘটনাক্রমে UUID স্ট্রিংকে অবজেক্টে মোড়ানো সমতা চেক, JSON সিরিয়ালাইজেশন এবং ডেটাবেস কোয়েরি নষ্ট করে।

সমাধান: সবসময় UUID সরল স্ট্রিং হিসেবে সংরক্ষণ ও পাস করুন। কোনো লাইব্রেরি অবজেক্ট রিটার্ন করলে সাথে সাথে .toString() কল করুন বা স্ট্রিং প্রপার্টি অ্যাক্সেস করুন।

Before · JavaScript
After · JavaScript
// অপ্রয়োজনীয় র‍্যাপার তৈরি করা
class UUID {
  constructor(value) { this.value = value; }
}
const id = new UUID(crypto.randomUUID());
console.log(id === id); // true, কিন্তু...
console.log(JSON.stringify({ id })); // {"id":{"value":"..."}}
// শুধু একটি স্ট্রিং ব্যবহার করুন
const id = crypto.randomUUID();
console.log(JSON.stringify({ id }));
// {"id":"3e7f1a92-4b0c-4d8e-9f12-7a6b3c8d5e1f"}
UUID v4-কে সর্টযোগ্য মনে করা

সমস্যা: UUID v4 সম্পূর্ণ র‍্যান্ডম। UUID v4 দিয়ে সর্ট করলে নির্বিচার ক্রম পাওয়া যায়, তৈরির ক্রম নয়। এটি অপ্রত্যাশিত পেজিনেশন, বিভ্রান্তিকর অ্যাডমিন UI এবং খারাপ ডেটাবেস ইনডেক্স পারফরম্যান্স ঘটায়।

সমাধান: টাইম-অর্ডারড আইডেন্টিফায়ার দরকার হলে UUID v7 ব্যবহার করুন। UUID v4 টোকেন এবং কোরিলেশন ID-এর জন্য রাখুন যেখানে সর্ট ক্রম অপ্রাসঙ্গিক।

Before · JavaScript
After · JavaScript
// খারাপ: v4-কে সর্টযোগ্য প্রাথমিক কী হিসেবে ব্যবহার করা
const rows = [
  { id: crypto.randomUUID(), created: "2026-03-27" },
  { id: crypto.randomUUID(), created: "2026-03-26" },
];
rows.sort((a, b) => a.id.localeCompare(b.id));
// সর্ট ক্রম র‍্যান্ডম — তৈরির তারিখ অনুযায়ী নয়
import { v7 as uuidv7 } from 'uuid';
// ভালো: v7 তৈরির সময় অনুযায়ী সর্ট হয়
const rows = [
  { id: uuidv7(), created: "2026-03-27" },
  { id: uuidv7(), created: "2026-03-26" },
];
rows.sort((a, b) => a.id.localeCompare(b.id));
// সর্ট ক্রম তৈরির সময়ের সাথে মেলে

crypto.randomUUID() বনাম uuid বনাম nanoid — দ্রুত তুলনা

পদ্ধতি
আউটপুট ফরম্যাট
UUID ভার্সন
বান্ডেল সাইজ
কাস্টম টাইপ
ইনস্টল প্রয়োজন
crypto.randomUUID()
৩৬-অক্ষর UUID v4
শুধু v4
০ KB
N/A
না (বিল্ট-ইন)
uuid npm প্যাকেজ
৩৬-অক্ষর UUID
v1, v3, v4, v5, v6, v7
~৬.৫ KB
N/A
npm install
nanoid
২১-অক্ষর URL-safe ID
কাস্টম (UUID নয়)
~১ KB
N/A
npm install
ম্যানুয়াল getRandomValues
৩৬-অক্ষর UUID v4
শুধু v4
০ KB
N/A
না (বিল্ট-ইন)
crypto.randomBytes (Node)
Buffer → ৩৬-অক্ষর UUID v4
শুধু v4
০ KB
N/A
না (Node বিল্ট-ইন)
uuidv7 npm প্যাকেজ
৩৬-অক্ষর UUID v7
শুধু v7
~২ KB
N/A
npm install

বেশিরভাগ JavaScript প্রজেক্টের জন্য: শুধু UUID v4 দরকার হলে এবং রানটাইম যথেষ্ট আধুনিক হলে crypto.randomUUID() ব্যবহার করুন। v5 (নির্ধারণযোগ্য) বা v7 (টাইম-অর্ডারড) সমর্থন দরকার হলে uuid প্যাকেজ নিন। nanoid ব্যবহার করুন যখন ৩৬-অক্ষরের UUID-এর চেয়ে একটি সংক্ষিপ্ত, URL-safe ID বেশি ব্যবহারিক — তবে মনে রাখবেন nanoid আউটপুট UUID-সম্মত নয় এবং RFC 4122 ফরম্যাট প্রত্যাশী যেকোনো সিস্টেমে যাচাই ব্যর্থ হবে।

নো-কোড বিকল্পের জন্য, ব্রাউজারে তাৎক্ষণিকভাবে আইডেন্টিফায়ার তৈরি করতে UUID v4 Generator ব্যবহার করুন। একটি বিদ্যমান UUID পরীক্ষা করতে, এর ভার্সন, ভেরিয়েন্ট এবং যেকোনো এম্বেডেড টাইমস্ট্যাম্প ডেটা দেখতে এটি UUID Decoder-এ পেস্ট করুন।

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

JavaScript-এ UUID v4 কীভাবে তৈরি করবো?

যেকোনো আধুনিক ব্রাউজারে (Chrome 92+, Firefox 95+, Safari 15.4+) বা Node.js 19+-এ crypto.randomUUID() কল করুন। এটি "3e7f1a92-4b0c-4d8e-9f12-7a6b3c8d5e1f"-এর মতো লোয়ারকেস স্ট্রিং রিটার্ন করে। ব্রাউজারে কোনো import দরকার নেই কারণ crypto একটি বিল্ট-ইন গ্লোবাল; Node.js-এ আপনি explicitly import করতে import { randomUUID } from "node:crypto" ব্যবহার করতে পারেন। Node.js 19-এর পুরনো রানটাইমের জন্যও গ্লোবালে crypto.randomUUID() কল করা যায় — এটি Node.js 14.17.0 থেকে পরীক্ষামূলকভাবে পাওয়া যাচ্ছিল। যদি নো-কোড অপশন চান, /en/uuid/v4-এ UUID v4 Generator একটি ক্লিকেই RFC-সম্মত আইডেন্টিফায়ার তৈরি করে।

JavaScript
const sessionId = crypto.randomUUID();
console.log(sessionId);
// "3e7f1a92-4b0c-4d8e-9f12-7a6b3c8d5e1f"

crypto.randomUUID() কি ক্রিপ্টোগ্রাফিক্যালি নিরাপদ?

হ্যাঁ। crypto.randomUUID() একই CSPRNG (ক্রিপ্টোগ্রাফিক্যালি সিকিউর সিউডোর্যান্ডম নম্বর জেনারেটর) ব্যবহার করে যা crypto.getRandomValues()-কে সমর্থন করে। UUID v4-এর ১২২টি র‍্যান্ডম বিট সব ব্যবহারিক উদ্দেশ্যে কোলিশনের সম্ভাবনাকে নগণ্য করে তোলে — একটি একক কোলিশনের ৫০% সম্ভাবনায় পৌঁছাতে প্রায় ২.৭১ কুইন্টিলিয়ন UUID তৈরি করতে হবে। এন্ট্রপি আসে অপারেটিং সিস্টেমের র‍্যান্ডম সোর্স থেকে (Linux-এ /dev/urandom, Windows-এ BCryptGenRandom), Math.random() থেকে নয়, যা স্পষ্টতই ক্রিপ্টোগ্রাফিক্যালি নিরাপদ নয়। এর মানে হলো UUID v4 মান সেশন টোকেন, CSRF টোকেন এবং অন্যান্য নিরাপত্তা-সংবেদনশীল আইডেন্টিফায়ার হিসেবে ব্যবহারের জন্য নিরাপদ যেখানে পূর্বাভাসযোগ্যতা এড়ানো জরুরি। নিরাপত্তা প্রসঙ্গে কখনো Math.random()-ভিত্তিক UUID জেনারেটর ব্যবহার করবেন না।

UUID v4 কি ডেটাবেস প্রাথমিক কী হিসেবে ব্যবহার করা যায়?

পারবেন, তবে একটি উল্লেখযোগ্য পারফরম্যান্স ট্রেড-অফ আছে। UUID v4 সম্পূর্ণ র‍্যান্ডম, তাই B-tree ইনডেক্স খারাপভাবে ফ্র্যাগমেন্ট হয় কারণ প্রতিটি নতুন রো ইনডেক্সের শেষে না গিয়ে একটি র‍্যান্ডম পজিশনে ঢোকে। রাইট-হেভি টেবিলে এটি অতিরিক্ত পেজ স্প্লিট এবং ক্যাশ মিস ঘটায়, যা INSERT এবং রেঞ্জ-স্ক্যান পারফরম্যান্স কমায়। যদি আপনার ডেটাবেস সমর্থন করে (PostgreSQL, MySQL 8.0+, SQL Server), UUID v7 (টাইম-অর্ডারড) একটি ভালো প্রাথমিক কী কারণ নতুন রো সবসময় ইনডেক্সের শেষে যোগ হয়। UUID v4 সেশন টোকেন, OAuth স্টেট প্যারামিটার, আইডেম্পোটেন্সি কী, কোরিলেশন ID এবং যেকোনো ক্ষেত্রে সঠিক পছন্দ যেখানে তৈরির সময় লুকানো কাম্য।

JavaScript
// UUID v4 — র‍্যান্ডম, সর্টযোগ্য নয়
const correlationId = crypto.randomUUID();

// UUID v7 — টাইম-অর্ডারড, DB প্রাথমিক কী হিসেবে ভালো
import { v7 as uuidv7 } from 'uuid';
const rowId = uuidv7();

UUID v4 এবং UUID v7-এর পার্থক্য কী?

UUID v4 ১২২ বিট র‍্যান্ডম ডেটা দিয়ে পূর্ণ — প্রতিটি সেগমেন্ট কার্যকরভাবে এলোমেলো। UUID v7 (RFC 9562, ২০২৪ সালে প্রকাশিত) প্রথম সেগমেন্টে ৪৮-বিট Unix মিলিসেকেন্ড টাইমস্ট্যাম্প, দ্বিতীয় সেগমেন্টে ১২ বিট সাব-মিলিসেকেন্ড নির্ভুলতা এবং বাকিতে র‍্যান্ডম বিট এনকোড করে। উভয়ই মোট ১২৮ বিট এবং একই ৩৬-অক্ষরের হাইফেনেটেড ফরম্যাট ব্যবহার করে, তাই স্টোরেজ স্তরে পরস্পর পরিবর্তনযোগ্য। UUID v7 তৈরির সময় অনুযায়ী লেক্সিকোগ্রাফিক্যালি সর্টযোগ্য, যা B-tree ইনডেক্সকে কমপ্যাক্ট রাখে এবং টাইম উইন্ডোতে রেঞ্জ কোয়েরি দক্ষ করে। UUID v4 বেছে নিন যখন ID তৈরির সময় প্রকাশ করা উচিত নয় — উদাহরণস্বরূপ, পাবলিক-ফেসিং টোকেন যেখানে টাইমিং তথ্য কাজে লাগানো যেতে পারে — এবং ডেটাবেস প্রাথমিক কী, অডিট লগ এবং ইভেন্ট স্ট্রিমের জন্য UUID v7 বেছে নিন।

JavaScript-এ UUID v4 স্ট্রিং কীভাবে যাচাই করবো?

regex /^[0-9a-f]{8}-[0-9a-f]{4}-4[0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$/i-এর বিপরীতে পরীক্ষা করুন। ১৫ নম্বর পজিশনে (০-ইনডেক্সড) আক্ষরিক "4" ভার্সন নিবল নিশ্চিত করে; ২০ নম্বর পজিশনে অক্ষরটি — ৮, ৯, a বা b-এর একটি — RFC 4122 ভেরিয়েন্ট বিট এনকোড করে। এই regex সঠিকভাবে UUID v1, v7 এবং যেকোনো বিকৃত স্ট্রিং প্রত্যাখ্যান করে। i ফ্ল্যাগ এটিকে কেস-ইনসেন্সিটিভ করে, তাই অন্য সিস্টেম থেকে আসা আপারকেস হেক্স ডিজিট নর্মালাইজেশন ছাড়াই যাচাই পাস করে। যদি শুধু জানতে চান কোনো স্ট্রিং বৈধ UUID কিনা (ভার্সন নির্বিশেষে), পরিবর্তে আরো শিথিল প্যাটার্ন /^[0-9a-f]{8}-[0-9a-f]{4}-[1-8][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$/i ব্যবহার করুন।

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

UUID_V4_RE.test("550e8400-e29b-41d4-a716-446655440000"); // true
UUID_V4_RE.test("550e8400-e29b-11d4-a716-446655440000"); // false (v1)
UUID_V4_RE.test("not-a-uuid"); // false

JavaScript-এ সংক্ষিপ্ত অনন্য ID কীভাবে তৈরি করবো?

৩২-অক্ষরের হেক্স স্ট্রিং পেতে UUID v4 থেকে হাইফেন সরিয়ে ফেলুন: crypto.randomUUID().replaceAll("-", "")। আরো ছোট কিছুর জন্য, nanoid ব্যবহার করুন যা ডিফল্টে ২১-অক্ষরের URL-safe ID (A–Z, a–z, 0–9, _ এবং -) তৈরি করে পূর্ণ UUID-এর মতো কোলিশন প্রতিরোধ ক্ষমতা সহ। ট্রেড-অফ সহজ: ছোট ID-এর কোলিশন সম্ভাবনা বেশি, তবে ২১ অক্ষরের nanoid এখনো ১২৬ বিট এন্ট্রপি দেয়, যা কার্যত প্রতিটি বাস্তব-জীবন প্রয়োগের জন্য যথেষ্টের বেশি। URL স্লাগ এবং QR কোড পেলোডের জন্য সাধারণ জেনারেশন রেটে কোলিশন সম্ভাবনা উদ্বেগজনক হওয়ার আগে nanoid দিয়ে ১০–১২ অক্ষর পর্যন্ত যেতে পারেন। কাঁচা UUID কে Base64-এনকোড করে ট্রাংকেট করা এড়িয়ে চলুন — ট্রাংকেশন বিটগুলির পরিসংখ্যানগত স্বাধীনতা নষ্ট করে এবং কোলিশন বিশ্লেষণ কঠিন করে তোলে।

JavaScript
// UUID v4 থেকে ৩২-অক্ষরের হেক্স স্ট্রিং
const hexId = crypto.randomUUID().replaceAll('-', '');
// "3e7f1a924b0c4d8e9f127a6b3c8d5e1f"

// nanoid দিয়ে ২১-অক্ষরের URL-safe ID
import { nanoid } from 'nanoid';
const shortId = nanoid();
// "V1StGXR8_Z5jdHi6B-myT"

সংশ্লিষ্ট টুলসমূহ

এছাড়াও পাওয়া যায়:Python
SL
Sophie LaurentTypeScript & Full-stack Developer

Sophie is a full-stack developer focused on TypeScript across the entire stack — from React frontends to Express and Fastify backends. She has a particular interest in type-safe API design, runtime validation, and the patterns that make large JavaScript codebases stay manageable. She writes about TypeScript idioms, Node.js internals, and the ever-evolving JavaScript module ecosystem.

MW
Marcus Webbপ্রযুক্তিগত পর্যালোচক

Marcus specialises in JavaScript performance, build tooling, and the inner workings of the V8 engine. He has spent years profiling and optimising React applications, working on bundler configurations, and squeezing every millisecond out of critical rendering paths. He writes about Core Web Vitals, JavaScript memory management, and the tools developers reach for when performance really matters.