ToolDeck

CUID জেনারেটর

সংঘর্ষ-প্রতিরোধী অনন্য ID তৈরি করুন (CUID v1)

সংখ্যা

তৈরি করা CUID

CUID তৈরি করতে Generate-এ ক্লিক করুন

CUID v1 একটি লিগেসি ফরম্যাট। নতুন প্রকল্পের জন্য CUID2 ব্যবহার করুন।

CUID কী?

CUID (Collision-Resistant Unique Identifier) হল একটি ওপেন-সোর্স অ্যালগরিদম যা ডিস্ট্রিবিউটেড সিস্টেমে কেন্দ্রীয় সমন্বয়কারী ছাড়াই অনন্য ID তৈরি করে। সাধারণ UUID-এর বিপরীতে, CUID হরিজন্টালি স্কেলেবল হওয়ার জন্য ডিজাইন করা হয়েছে — একাধিক সার্ভার বা ব্রাউজার ট্যাব স্বাধীনভাবে ID তৈরি করতে পারে, সংঘর্ষের ঝুঁকি ন্যূনতম।

প্রতিটি CUID ছোট হাতের অক্ষর c দিয়ে শুরু হয়, যা ফরম্যাটটি এক নজরে চেনা যায়। বাকি অক্ষরগুলো সব ছোট হাতের আলফানিউমেরিক (base36), তাই CUID URL-নিরাপদ এবং অতিরিক্ত এনকোডিং ছাড়াই সরাসরি URL পাথ সেগমেন্ট বা ডেটাবেজ প্রাথমিক কী হিসেবে ব্যবহার করা যায়।

মূল CUID স্পেসিফিকেশন (v1) Eric Elliott তৈরি করেছিলেন এবং cuid npm প্যাকেজের মাধ্যমে জনপ্রিয় হয়েছিল। এটি এখন CUID v2 দ্বারা প্রতিস্থাপিত, যা ক্রিপ্টোগ্রাফিক নিরাপত্তা প্রদান করে। এই পৃষ্ঠা — এবং উপরের জেনারেটর — CUID v1 ID তৈরি করে, যা প্রোডাকশন কোডবেসে এখনও ব্যাপকভাবে পাওয়া যায়।

CUID-এর গঠন

একটি CUID v1 প্রায় ২৫ অক্ষর দীর্ঘ এবং পাঁচটি সংযুক্ত অংশ নিয়ে গঠিত, প্রতিটি অংশ ভিন্ন ধরনের এনট্রপি বহন করে:

উদাহরণ: clrc4gkwz001ag2hs3k7f9m2q
cপ্রিফিক্সসবসময় "c" অক্ষর — CUID চিহ্নিত করে
lrc4gkwzটাইমস্ট্যাম্পbase36-এ মিলিসেকেন্ড টাইমস্ট্যাম্প (~৮ অক্ষর)
001aকাউন্টার৪ অক্ষরের base36 কাউন্টার — একই মিলিসেকেন্ডে সংঘর্ষ প্রতিরোধ করে
g2hsফিঙ্গারপ্রিন্ট৪ অক্ষরের base36 হোস্ট ফিঙ্গারপ্রিন্ট (ব্রাউজার/পরিবেশের তথ্য)
3k7f9m2qর‍্যান্ডম৮ অক্ষরের base36 র‍্যান্ডম ব্লক — দুটি ৩২-বিট মান

অংশগুলো শুধু একত্রে যুক্ত করা হয় — কোনো বিভাজক নেই। বর্তমান টাইমস্ট্যাম্প মানের উপর নির্ভর করে মোট দৈর্ঘ্য সামান্য পরিবর্তিত হয় তবে প্রায় ২৫ অক্ষরে থাকে।

CUID কীভাবে সংঘর্ষ প্রতিরোধ করে

সংঘর্ষ প্রতিরোধ আসে স্বাধীন এনট্রপির উৎসগুলোকে স্তরে স্তরে সাজানোর মাধ্যমে, যাতে সবচেয়ে খারাপ পরিস্থিতিতেও (প্রতি মিলিসেকেন্ডে হাজার হাজার ID তৈরি অনেক মেশিনে) দুটি অভিন্ন ID-এর সম্ভাবনা অত্যন্ত ক্ষুদ্র থাকে।

মিলিসেকেন্ড টাইমস্ট্যাম্প
প্রথম অংশটি base36-এ বর্তমান সময় এনকোড করে। বিভিন্ন মুহূর্তে তৈরি ID স্বয়ংক্রিয়ভাবে তৈরির সময় অনুযায়ী লেক্সিকোগ্রাফিক্যালি সাজানো হয় — পেজিনেশন এবং ডিবাগিংয়ের জন্য উপকারী।
মনোটোনিক কাউন্টার
একই প্রক্রিয়ার মধ্যে, প্রতিটি তৈরি ID-এর সাথে ৪ অক্ষরের কাউন্টার বৃদ্ধি পায়। একই মেশিনে একই মিলিসেকেন্ডে দুটি কল হলেও কাউন্টার প্রতি মিলিসেকেন্ডে ৬৫,৫৩৬টি ID পর্যন্ত অনন্যতা নিশ্চিত করে।
মেশিন ফিঙ্গারপ্রিন্ট
পরিবেশ-নির্দিষ্ট ডেটা থেকে নেওয়া একটি হ্যাশ (Node.js-এ প্রক্রিয়া ID + হোস্টনেম; ব্রাউজারে স্ক্রিন মাত্রা + নেভিগেটর তথ্য)। এটি একই মিলিসেকেন্ডে একই কাউন্টার মান নিয়ে আলাদা হোস্টে তৈরি ID-গুলোকে আলাদা করে।
র‍্যান্ডম ব্লক
শেষের ৮ অক্ষর base36-এ এনকোড করা দুটি স্বাধীন ৩২-বিট র‍্যান্ডম মান থেকে আসে। এটি এনট্রপির একটি চূড়ান্ত স্তর যোগ করে যা দুটি মেশিনের ফিঙ্গারপ্রিন্ট একই হ্যাশে পরিণত হলেও সংঘর্ষ থেকে সুরক্ষা দেয়।

CUID বনাম UUID v4

CUID এবং UUID v4 উভয়ই ক্লায়েন্ট-সাইড ID তৈরির জন্য ব্যাপকভাবে ব্যবহৃত। তারা একই সমস্যায় ভিন্ন পদ্ধতি নেয়:

বৈশিষ্ট্যCUID v1UUID v4
ফরম্যাটc + base36 (~২৫ অক্ষর)হেক্স গ্রুপ (ড্যাশসহ ৩৬ অক্ষর)
সাজানোযোগ্যপ্রায় (টাইমস্ট্যাম্প প্রিফিক্স)না
URL-নিরাপদহ্যাঁ (শুধু আলফানিউমেরিক)বেশিরভাগ (ড্যাশ URL-এ ঠিক আছে)
সংঘর্ষ প্রতিরোধউচ্চ — টাইমস্ট্যাম্প + কাউন্টার + ফিঙ্গারপ্রিন্ট + র‍্যান্ডমউচ্চ — ১২২ বিট র‍্যান্ডম
পূর্বানুমানযোগ্যতাআংশিক (টাইমস্ট্যাম্প দৃশ্যমান)নেই (বিশুদ্ধ র‍্যান্ডম)
দৈর্ঘ্য~২৫ অক্ষর৩৬ অক্ষর
সমন্বয় প্রয়োজননানা

নিরাপত্তা-সংবেদনশীল পরিস্থিতিতে UUID v4 নিরাপদ কারণ এটি কোনো সময় তথ্য প্রকাশ করে না। CUID সুবিধাজনক যখন আপনি সাজানোযোগ্য, ছোট এবং হাইফেনমুক্ত ID চান — URL, ফাইলনেম বা লগে রেকর্ড কখন তৈরি হয়েছে তা দ্রুত শনাক্ত করতে কাজে আসে।

CUID v1 বনাম CUID2

CUID স্পেসিফিকেশন উল্লেখযোগ্যভাবে পরিমার্জিত হয়েছে। পার্থক্য বোঝা আপনাকে প্রকল্পের জন্য সঠিক সংস্করণ বেছে নিতে সাহায্য করবে:

দিকCUID v1CUID v2
অ্যালগরিদমডিটার্মিনিস্টিক উপাদানSHA-3 ভিত্তিক, সম্পূর্ণ অস্বচ্ছ
ক্রিপ্টোগ্রাফিকনাহ্যাঁ
টাইমস্ট্যাম্প দৃশ্যমানহ্যাঁনা
ফরম্যাট"c" দিয়ে শুরু"c" দিয়ে শুরু (কনফিগারযোগ্য)
npm প্যাকেজ@paralleldrive/cuid (বাতিল)@paralleldrive/cuid2
দৈর্ঘ্য~২৫ অক্ষর২৪ অক্ষর (ডিফল্ট, কনফিগারযোগ্য)

নতুন প্রকল্পের জন্য CUID v2 প্রস্তাবিত। এর SHA-3 ভিত্তিক নির্মাণের মানে আউটপুট অস্বচ্ছ — ID থেকে কোনো টাইমস্ট্যাম্প, কাউন্টার বা ফিঙ্গারপ্রিন্ট বের করা যায় না। CUID v1 শুধুমাত্র তখন ব্যবহার করুন যখন বিদ্যমান ডেটাসেটের সাথে পশ্চাৎ-সামঞ্জস্য প্রয়োজন বা নির্ভরতামুক্ত বাস্তবায়ন চান।

ব্যবহারের ক্ষেত্র

ডিস্ট্রিবিউটেড ডেটাবেজ
একাধিক ডেটাবেজ শার্ড বা মাইক্রোসার্ভিস সিকোয়েন্স টেবিল বা কেন্দ্রীয় ID সার্ভিস ছাড়াই স্বাধীনভাবে প্রাথমিক কী তৈরি করতে পারে, ব্যর্থতার একক বিন্দু দূর করে।
ক্লায়েন্ট-সাইড ID তৈরি
একটি ব্রাউজার সার্ভারে পাঠানোর আগেই নতুন রেকর্ডে CUID নির্ধারণ করতে পারে, অপ্টিমিস্টিক UI আপডেট সম্ভব করে এবং সার্ভার-নির্ধারিত ID আনতে রাউন্ড-ট্রিপ দূর করে।
অফলাইন-ফার্স্ট অ্যাপ
সংযোগ ছাড়া কাজ করা মোবাইল বা PWA অ্যাপ স্থিতিশীল ID দিয়ে রেকর্ড তৈরি করতে পারে যা সিঙ্কের পরেও টিকে থাকে — ডিভাইস অনলাইন হলে কোনো সংঘাত নেই।
URL স্লাগ
CUID-এ শুধুমাত্র আলফানিউমেরিক অক্ষর থাকে, তাই পার্সেন্ট-এনকোডিং ছাড়াই সরাসরি URL পাথে যুক্ত করা নিরাপদ। টাইমস্ট্যাম্প প্রিফিক্স একটি মোটামুটি তৈরির সময় ক্রম যোগ করে।
ইভেন্ট / লগ সম্পর্ক
টাইমস্ট্যাম্প প্রথম অংশে এনকোড থাকায় CUID-ট্যাগকৃত লগ এন্ট্রি ডিস্ট্রিবিউটেড লগ অ্যাগ্রিগেটর জুড়েও তৈরির সময় অনুযায়ী মোটামুটি সাজানো যায়।
ORM / Prisma ডিফল্ট
Prisma String প্রাথমিক কীর জন্য ডিফল্ট @id কৌশল হিসেবে CUID ব্যবহার করে — @default(cuid()) — এটি JavaScript ইকোসিস্টেমে সবচেয়ে বেশি ব্যবহৃত ID ফরম্যাটগুলোর একটি।

কোড উদাহরণ

অফিসিয়াল CUID v2 প্যাকেজ ইন্সটল করুন (প্রস্তাবিত) বা নির্ভরতা ছাড়া একটি ন্যূনতম v1 বাস্তবায়ন লিখুন:

JavaScript / TypeScript
// npm install @paralleldrive/cuid2  (recommended — CUID v2)
import { createId } from '@paralleldrive/cuid2'

const id = createId()
// → 'tz4a98xxat96iws9zmbrgj3a'

// Custom length
import { init } from '@paralleldrive/cuid2'
const createShortId = init({ length: 10 })
createShortId() // → 'zxp1l6mf4c'

যদি আপনি v1 অ্যালগরিদমের একটি নির্ভরতামুক্ত Node.js বাস্তবায়ন পছন্দ করেন:

Node.js (no dependencies)
// Pure Node.js — CUID v1 style (no dependencies)
let counter = 0

function pad(str, size) {
  return str.padStart(size, '0').slice(-size)
}

function fingerprint() {
  const os = require('os')
  const source = [process.pid, os.hostname().length].join('')
  let hash = 0
  for (const c of source) {
    hash = ((hash << 5) - hash) + c.charCodeAt(0)
    hash |= 0
  }
  return pad(Math.abs(hash).toString(36), 4)
}

function cuid() {
  const timestamp = Date.now().toString(36)
  const cnt       = pad((counter++ & 0xffff).toString(36), 4)
  const fp        = fingerprint()
  const rnd       = pad(Math.floor(Math.random() * 0xffffffff).toString(36), 4)
              + pad(Math.floor(Math.random() * 0xffffffff).toString(36), 4)
  return 'c' + timestamp + cnt + fp + rnd
}

console.log(cuid()) // → 'clrc4gkwz001ag2hs3k7f9m2q'

Prisma এবং PostgreSQL দিয়ে ডেটাবেজ প্রাথমিক কী হিসেবে CUID ব্যবহার:

Prisma / SQL
-- Use CUID as a primary key in PostgreSQL
CREATE TABLE users (
  id   TEXT        PRIMARY KEY DEFAULT gen_cuid(),
  name TEXT        NOT NULL,
  created_at TIMESTAMPTZ DEFAULT now()
);

-- Prisma schema (auto-generates CUID by default)
model User {
  id        String   @id @default(cuid())
  name      String
  createdAt DateTime @default(now())
}

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

CUID কি URL-নিরাপদ?
হ্যাঁ। CUID v1 শুধুমাত্র ছোট হাতের অক্ষর এবং সংখ্যা (base36 এনকোডিং) ব্যবহার করে, যা সব URL-নিরাপদ অক্ষর। URL পাথ বা কোয়েরি প্যারামিটারে CUID ব্যবহার করতে পার্সেন্ট-এনকোডিং লাগে না।
CUID কি ক্রিপ্টোগ্রাফিকভাবে নিরাপদ?
না। CUID v1 Math.random() ব্যবহার করে এবং একটি দৃশ্যমান টাইমস্ট্যাম্প প্রিফিক্স প্রকাশ করে। সেশন টোকেন বা পাসওয়ার্ড-রিসেট লিংকের মতো নিরাপত্তা-সংবেদনশীল কাজে এটি উপযুক্ত নয়। সেই ক্ষেত্রে crypto.randomUUID() বা CUID v2 ব্যবহার করুন।
CUID বনাম NanoID — কোনটি বেছে নেব?
NanoID ক্রিপ্টোগ্রাফিকভাবে নিরাপদ, ছোট (ডিফল্টে ২১ অক্ষর) এবং কাস্টমাইজযোগ্য অ্যালফাবেট ব্যবহার করে। যখন নিরাপত্তা গুরুত্বপূর্ণ বা ছোট ID দরকার তখন NanoID বেছে নিন। যখন মোটামুটি সাজানোযোগ্য, টাইমস্ট্যাম্প-প্রিফিক্সযুক্ত এবং মানুষের পক্ষে ডিবাগযোগ্য ID চান তখন CUID বেছে নিন।
CUID v1 না CUID v2 ব্যবহার করব?
CUID v2 বর্তমান প্রস্তাবিত সংস্করণ। এটি ক্রিপ্টোগ্রাফিকভাবে নিরাপদ, সময় তথ্য ফাঁস করে না এবং সক্রিয়ভাবে রক্ষণাবেক্ষণ করা হয়। CUID v1 কার্যকর যখন সহজ নির্ভরতামুক্ত বাস্তবায়ন বা লিগেসি সিস্টেম রক্ষণাবেক্ষণ করতে হয়। এই জেনারেটর CUID v1 ID তৈরি করে।
CUID বনাম ULID — পার্থক্য কী?
উভয়ই টাইমস্ট্যাম্প-প্রিফিক্সযুক্ত এবং লেক্সিকোগ্রাফিক্যালি সাজানোযোগ্য। ULID Crockford base32 ব্যবহার করে (মোট ১২৮ বিট, ৪৮-বিট টাইমস্ট্যাম্প + ৮০-বিট র‍্যান্ডম), যা এটিকে কিছুটা বেশি র‍্যান্ডম করে। CUID একটি মেশিন ফিঙ্গারপ্রিন্ট এবং মনোটোনিক কাউন্টার যোগ করে, যা একই হোস্টে একই মিলিসেকেন্ডে সংঘর্ষ প্রতিরোধ উন্নত করে। ULID আরও নির্ভরযোগ্যভাবে সাজানো যায় কারণ টাইমস্ট্যাম্প সম্পূর্ণ উচ্চ-ক্রম অংশ দখল করে।
CUID কি অনন্য হওয়ার নিশ্চয়তা দেয়?
কেন্দ্রীয় সমন্বয়কারী ছাড়া কোনো ID পদ্ধতি গাণিতিক নিশ্চয়তা দিতে পারে না। CUID চারটি স্বাধীন এনট্রপি উৎস একত্রিত করে সংঘর্ষকে অত্যন্ত অসম্ভব করে তোলে: টাইমস্ট্যাম্প, প্রক্রিয়া-স্তরের কাউন্টার, মেশিন ফিঙ্গারপ্রিন্ট এবং র‍্যান্ডম ডেটা। ব্যবহারিক ক্ষেত্রে সংঘর্ষের সম্ভাবনা হার্ডওয়্যার ব্যর্থতার চেয়ে অনেক কম।