ToolDeck

CUID2 Generator

নিরাপদ পরবর্তী প্রজন্মের CUID2 আইডেন্টিফায়ার তৈরি করুন

সংখ্যা
দৈর্ঘ্য

জেনারেট করা CUID2

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

CUID2 কী?

CUID2 (Collision-resistant Unique ID, সংস্করণ 2) হল CUID v1-এর উত্তরসূরি, যা ডেটাবেস, URL এবং ডিস্ট্রিবিউটেড সিস্টেমে প্রাথমিক কী হিসেবে ব্যবহারের জন্য নিরাপদ — সংক্ষিপ্ত, ক্রিপ্টোগ্রাফিকভাবে নিরাপদ, অস্বচ্ছ আইডি তৈরি করতে ডিজাইন করা হয়েছে।

পূর্ববর্তী সংস্করণের বিপরীতে, CUID2 তৈরির সময়, হোস্ট মেশিন বা জেনারেটিং প্রক্রিয়া সম্পর্কে কোনো তথ্য প্রকাশ করে না। প্রতিটি আইডি একটি র‍্যান্ডম স্ট্রিং যা একটি এলোমেলো ছোট হাতের অক্ষর দিয়ে শুরু হয় এবং তারপরে SHA-512 থেকে প্রাপ্ত base-36 হ্যাশ থাকে। ডিফল্ট দৈর্ঘ্য 24 অক্ষর, তবে আপনি আপনার স্টোরেজের সীমাবদ্ধতা অনুযায়ী 2 থেকে 32 অক্ষরের মধ্যে যেকোনো দৈর্ঘ্য কনফিগার করতে পারেন।

CUID2 আধুনিক ডেটাবেস টুলকিট দ্বারা ব্যাপকভাবে সুপারিশকৃত। Prisma এটি তার @default(cuid()) স্কেলারের জন্য ডিফল্ট আইডি কৌশল হিসেবে গ্রহণ করেছে, এবং PlanetScale, Neon এবং অন্যান্য সার্ভারলেস ডেটাবেস প্রদানকারীরা স্পষ্টভাবে CUID2-কে পছন্দের আইডি ফরম্যাট হিসেবে তালিকাভুক্ত করেছে, কারণ এটি অটো-ইনক্রিমেন্ট পূর্ণসংখ্যার sequential scan দুর্বলতা এড়ায় এবং UUID-এর চেয়ে ছোট ও বেশি পাঠযোগ্য।

কেন CUID2 CUID v1-কে প্রতিস্থাপন করেছে

Eric Elliott কর্তৃক 2012 সালে প্রকাশিত CUID v1, ক্লায়েন্ট-সাইড আইডি জেনারেশনের জন্য সাধারণ UUID-এর তুলনায় একটি বড় উন্নতি ছিল। তবে, নিরাপত্তা গবেষকরা এর ডিজাইনে দুটি মৌলিক সমস্যা আবিষ্কার করেছিলেন:

  • ফিঙ্গারপ্রিন্টিং: প্রতিটি CUID v1 মানে এমবেড করা হোস্ট ফিঙ্গারপ্রিন্ট মেশিন বা প্রক্রিয়া চিহ্নিত করতে ব্যবহার করা যেত, যা আইডি পর্যবেক্ষণকারী যে কেউর কাছে অপারেশনাল মেটাডেটা ফাঁস করত।
  • পূর্বানুমানযোগ্যতা: CUID v1 একটি ক্রমবর্ধমান কাউন্টার এবং একটি টাইমস্ট্যাম্প সেগমেন্ট অন্তর্ভুক্ত করত বলে, কিছু আইডি পর্যবেক্ষণকারী আক্রমণকারী ভবিষ্যৎ আইডির আনুমানিক পরিসর অনুমান করতে পারত, যা আইডিকে একমাত্র অনুমোদন পরীক্ষা হিসেবে ব্যবহারকারী API-এর বিরুদ্ধে এনুমারেশন আক্রমণ সক্ষম করত।
  • অ-ক্রিপ্টোগ্রাফিক হ্যাশ: CUID v1 একটি সাধারণ অ-ক্রিপ্টোগ্রাফিক হ্যাশিং পদক্ষেপ ব্যবহার করত যা আধুনিক নিরাপত্তা মানদণ্ড পূরণ করত না।

মূল লেখক Eric Elliott আনুষ্ঠানিকভাবে CUID v1 বাতিল করেছেন এবং এই সব সমস্যা সমাধানের জন্য স্ক্র্যাচ থেকে CUID2 তৈরি করেছেন। নতুন অ্যালগরিদম Web Crypto API (SHA-512) ব্যবহার করে এবং সমস্ত নির্ধারণমূলক উপাদান বাদ দেয়, প্রতিটি আইডিকে পরিসংখ্যানগতভাবে অন্য সবার থেকে স্বাধীন করে তোলে।

CUID2 ডিজাইন নীতি

অপ্রত্যাশিত
কোনো টাইমস্ট্যাম্প, কাউন্টার বা হোস্ট ফিঙ্গারপ্রিন্ট এমবেড করা হয় না। প্রতিটি আইডি SHA-512-এর সাথে মিলিত একটি নতুন ক্রিপ্টোগ্রাফিক র‍্যান্ডম সল্ট থেকে তৈরি হয়।
সমতল বিতরণ
SHA-512 ডাইজেস্টের base-36 এনকোডিং প্রায়-সমান অক্ষর বিতরণ তৈরি করে, B-tree ডেটাবেসে ইন্ডেক্সিং হটস্পট হ্রাস করে।
ডিফল্টভাবে URL-নিরাপদ
বর্ণমালা ছোট হাতের a–z এবং সংখ্যা 0–9-এ সীমাবদ্ধ — কোনো হাইফেন, আন্ডারস্কোর বা মিশ্র কেস নেই — percent-encoding ছাড়াই URL-এ আইডি নিরাপদ করে তোলে।
কনফিগারযোগ্য দৈর্ঘ্য
আপনি দৈর্ঘ্য বেছে নিন (2–32)। ছোট আইডি মানে বেশি সংঘর্ষের সম্ভাবনা; প্রস্তাবিত ডিফল্ট 24 প্রায় 4 × 10³⁷ অনন্য মান দেয়।
সর্বদা অক্ষর দিয়ে শুরু
প্রথম অক্ষরটি সর্বদা একটি এলোমেলো ছোট হাতের অক্ষর, যা নিশ্চিত করে যে CUID2 মান এস্কেপিং ছাড়াই বৈধ HTML এলিমেন্ট আইডি এবং CSS সিলেক্টর।
কোনো সার্ভার প্রয়োজন নেই
CUID2 শুধুমাত্র সব আধুনিক ব্রাউজার এবং Node.js 15+-এ উপলব্ধ Web Crypto API-এর উপর নির্ভর করে, তাই সার্ভারের মতো একই নিরাপত্তা গ্যারান্টি সহ ক্লায়েন্টে আইডি তৈরি করা যায়।

CUID2 বনাম CUID v1 — তুলনা

নিচের টেবিলটি CUID2 এবং এখন-বাতিল CUID v1-এর মধ্যে প্রধান পার্থক্যগুলি সংক্ষিপ্ত করে। আপনি যদি বর্তমানে CUID v1 ব্যবহার করছেন, CUID2-এ মাইগ্রেশন দৃঢ়ভাবে সুপারিশ করা হয়।

বৈশিষ্ট্যCUID2CUID v1
নিরাপত্তাক্রিপ্টোগ্রাফিক (SHA-512)অ-ক্রিপ্টোগ্রাফিক (ফিঙ্গারপ্রিন্ট-ভিত্তিক)
পূর্বানুমানযোগ্যতাঅস্বচ্ছ — কোনো মেটাডেটা ফাঁস নেইTimestamp + ফিঙ্গারপ্রিন্ট আইডিতে দৃশ্যমান
দৈর্ঘ্যকনফিগারযোগ্য (2–32 অক্ষর)নির্দিষ্ট 25 অক্ষর
প্রিফিক্সএলোমেলো a–z অক্ষরসর্বদা "c" দিয়ে শুরু
বিতরণসমতল / অভিন্নক্রমবর্ধমান সেগমেন্ট
অবস্থাসক্রিয়ভাবে রক্ষণাবেক্ষণকৃতমূল লেখক কর্তৃক বাতিল

CUID2 বনাম UUID v4 — তুলনা

UUID v4 হল এলোমেলো অনন্য আইডির প্রভাবশালী মান। CUID2 নিরাপত্তা না হারিয়ে UUID v4-এর তুলনায় বেশ কিছু ব্যবহারিক সুবিধা প্রদান করে।

বৈশিষ্ট্যCUID2UUID v4
ডিফল্ট দৈর্ঘ্য24 অক্ষর36 অক্ষর (হাইফেনসহ)
URL-নিরাপদহ্যাঁ — ছোট হাতের a–z + 0–9এনকোডিং প্রয়োজন (হাইফেন রয়েছে)
কাস্টম দৈর্ঘ্যহ্যাঁ (2–32)না — সর্বদা 128 বিট / 36 অক্ষর
বাছাইযোগ্যনা (ডিজাইন অনুযায়ী)না (v4 এলোমেলো)
এন্ট্রপির উৎসSHA-512 + Web CryptoCSPRNG
অক্ষর সেটBase-36 (a–z, 0–9)Hex + হাইফেন

মূল ট্রেডঅফ হলো পরিচিতি: UUID v4 হল একটি IETF মান (RFC 4122) যা প্রায় প্রতিটি ডেটাবেস, প্রোগ্রামিং ভাষা এবং API ফ্রেমওয়ার্ক সরাসরি সাপোর্ট করে। CUID2 একটি কমিউনিটি মান যার ক্রমবর্ধমান সমর্থন থাকলেও এটি সর্বজনীন নয়। বাহ্যিক সিস্টেমের সাথে আন্তঃকার্যক্ষমতা যখন সর্বোচ্চ গুরুত্বপূর্ণ তখন UUID v4 বেছে নিন; যখন আপনি উভয় প্রান্ত নিয়ন্ত্রণ করেন এবং ছোট, URL-নিরাপদ আইডি পছন্দ করেন তখন CUID2 বেছে নিন।

CUID2 কে ব্যবহার করে

CUID2 JavaScript এবং TypeScript ইকোসিস্টেম জুড়ে দ্রুত জনপ্রিয় হয়েছে:

  • Prisma — সবচেয়ে জনপ্রিয় TypeScript ORM Prisma Schema v2+-এ @default(cuid()) সহ @id ফিল্ডের জন্য প্রস্তাবিত ডিফল্ট হিসেবে CUID2 ব্যবহার করে।
  • PlanetScale — তাদের ডকুমেন্টেশন এবং স্টার্টার টেমপ্লেটগুলি তাদের ডিস্ট্রিবিউটেড MySQL প্ল্যাটফর্মে ক্রমিক স্ক্যানের পারফরম্যান্স সমস্যা এড়াতে অ্যাপ্লিকেশন-জেনারেটেড প্রাথমিক কীগুলির জন্য CUID2 সুপারিশ করে।
  • Drizzle ORM — কলাম সংজ্ঞার জন্য একটি অন্তর্নির্মিত cuid2() ডিফল্ট হেল্পার প্রদান করে।
  • tRPC boilerplates — অনেক কমিউনিটি tRPC + Prisma স্টার্টার টেমপ্লেট প্রাথমিক কী কৌশল হিসেবে CUID2 সহ আসে।
  • T3 Stack — create-t3-app স্ক্যাফোল্ডিং টুল তৈরি করা স্কিমা ফাইলে CUID2 ডিফল্ট সহ Prisma ব্যবহার করে।

কোড উদাহরণ

অফিসিয়াল @paralleldrive/cuid2 npm প্যাকেজ একটি সহজ API প্রদান করে:

JavaScript (npm — @paralleldrive/cuid2)
import { createId } from '@paralleldrive/cuid2'

// Generate a single CUID2 (default length: 24)
const id = createId()
console.log(id) // e.g. "tz4a98xxat96iws9zmbrgj3a"

// Custom length
import { init } from '@paralleldrive/cuid2'
const createShortId = init({ length: 16 })
const shortId = createShortId()
console.log(shortId) // e.g. "tz4a98xxat96iws9"

Prisma স্কিমার সাথে CUID2 ব্যবহার করা:

Prisma Schema
model User {
  id        String   @id @default(cuid())
  email     String   @unique
  name      String?
  createdAt DateTime @default(now())
  updatedAt DateTime @updatedAt
}

npm প্যাকেজ ছাড়াই Node.js-এ CUID2 তৈরি করা (শুধুমাত্র Web Crypto API ব্যবহার করে, যেমন এই টুলটি ব্রাউজারে করে):

Node.js (Web Crypto — no dependencies)
async function generateCuid2(length = 24) {
  const alphabet = 'abcdefghijklmnopqrstuvwxyz'

  // Random prefix letter
  const firstByte = crypto.getRandomValues(new Uint8Array(1))[0]
  const firstChar = alphabet[firstByte % 26]

  // Random 32-byte salt
  const salt = crypto.getRandomValues(new Uint8Array(32))
  const saltHex = [...salt].map(b => b.toString(16).padStart(2, '0')).join('')

  // SHA-512 of timestamp + salt
  const input = Date.now().toString(36) + saltHex
  const hashBuffer = await crypto.subtle.digest(
    'SHA-512',
    new TextEncoder().encode(input)
  )

  // Encode hash bytes as base-36 string
  const bytes = new Uint8Array(hashBuffer)
  let hash = ''
  for (let i = 0; i < bytes.length; i += 8) {
    let chunk = 0n
    for (let j = 0; j < 8 && i + j < bytes.length; j++) {
      chunk = (chunk << 8n) | BigInt(bytes[i + j])
    }
    hash += chunk.toString(36)
  }

  return (firstChar + hash).slice(0, length)
}

// Usage
const id = await generateCuid2()
console.log(id) // e.g. "m7k3r9p2nxq8zt5a6cwj4bvd"

সচরাচর জিজ্ঞাসিত প্রশ্ন

CUID2 কি CUID v1-এর সাথে পশ্চাৎমুখী সামঞ্জস্যপূর্ণ?
না। CUID2 আইডি CUID v1 আইডির থেকে সম্পূর্ণ আলাদা দেখায়। CUID v1 সর্বদা "c" অক্ষর দিয়ে শুরু হয় এবং 25 অক্ষরের একটি নির্দিষ্ট দৈর্ঘ্য থাকে। CUID2 একটি এলোমেলো অক্ষর দিয়ে শুরু হয় এবং একটি কনফিগারযোগ্য দৈর্ঘ্য থাকে (ডিফল্ট 24)। আপনি যদি একটি বিদ্যমান ডেটাবেস মাইগ্রেট করেন, তাহলে আপনাকে উভয় ফরম্যাট পরিচালনা করতে হবে বা সমস্ত CUID v1 মান প্রতিস্থাপন করতে একটি মাইগ্রেশন চালাতে হবে।
আমার কোন দৈর্ঘ্য ব্যবহার করা উচিত?
বেশিরভাগ অ্যাপ্লিকেশনের জন্য 24 অক্ষরের ডিফল্ট প্রস্তাবিত পছন্দ। এটি প্রায় 4 × 10³⁷ অনন্য মান প্রদান করে, যা বিশাল স্কেলেও সংঘর্ষকে পরিসংখ্যানগতভাবে অসম্ভব করে তোলে। যদি স্টোরেজ গুরুত্বপূর্ণ হয় এবং আপনার ডেটাসেট কয়েক বিলিয়ন রেকর্ডের কম হয় তাহলে 16 অক্ষর ব্যবহার করুন। সর্বোচ্চ নিরাপত্তা মার্জিনের জন্য 32 অক্ষর ব্যবহার করুন।
CUID2 কি তৈরির সময় অনুসারে বাছাইযোগ্য?
না — এবং এটি ইচ্ছাকৃত। CUID2 ইচ্ছাকৃতভাবে এনুমারেশন আক্রমণ এবং ফিঙ্গারপ্রিন্টিং প্রতিরোধ করতে সমস্ত টেম্পোরাল তথ্য বাদ দেয়। আপনার যদি সময়-ক্রমানুযায়ী আইডির প্রয়োজন হয়, তাহলে পরিবর্তে ULID বা UUID v7 বিবেচনা করুন। CUID2 নিরাপত্তা এবং অস্বচ্ছতার জন্য বাছাইযোগ্যতা ত্যাগ করে।
CUID2 বনাম NanoID — কোনটি বেছে নেওয়া উচিত?
উভয়ই নিরাপদ এবং URL-নিরাপদ। NanoID ডিফল্টভাবে 21 অক্ষরে সামান্য ছোট এবং একটি বড় বর্ণমালা (A–Za–z0–9_-) ব্যবহার করে যা প্রতি অক্ষরে বেশি এন্ট্রপি দেয়। CUID2 একটি সীমাবদ্ধ বর্ণমালা (a–z, 0–9) ব্যবহার করে যা CSS সিলেক্টরে বেশি নিরাপদ এবং সর্বদা একটি অক্ষর দিয়ে শুরু হয়। সর্বোচ্চ এন্ট্রপি ঘনত্ব চাইলে NanoID বেছে নিন; Prisma/ORM ইন্টিগ্রেশন বা CSS-নিরাপদ আইডি গুরুত্বপূর্ণ হলে CUID2 বেছে নিন।
CUID2 কি URL-নিরাপদ?
হ্যাঁ। CUID2 শুধুমাত্র ছোট হাতের অক্ষর (a–z) এবং সংখ্যা (0–9) ব্যবহার করে। এতে কোনো হাইফেন, আন্ডারস্কোর, প্লাস চিহ্ন, স্ল্যাশ বা সমান চিহ্ন নেই, তাই এটি কোনো এনকোডিং ছাড়াই URL, HTML id অ্যাট্রিবিউট, CSS সিলেক্টর এবং ফাইল নামে সরাসরি এমবেড করা যায়।
আমি কি CUID2 একটি ডেটাবেস প্রাথমিক কী হিসেবে ব্যবহার করতে পারি?
হ্যাঁ, এবং এটি প্রাথমিক ব্যবহারের ক্ষেত্রগুলির একটি। CUID2 অটো-ইনক্রিমেন্ট পূর্ণসংখ্যার ক্রমিক প্যাটার্ন এড়ায় (যা সারির সংখ্যা ফাঁস করতে এবং এনুমারেশন সক্ষম করতে পারে), UUID-এর চেয়ে ছোট (ইন্ডেক্স স্পেস সাশ্রয় করে) এবং URL-নিরাপদ। বেশিরভাগ ডেটাবেস এটি VARCHAR(24) বা TEXT কলাম হিসেবে সংরক্ষণ করে। মনে রাখবেন যে ULID বা UUID v7-এর মতো নয়, CUID2 মান সময়-ক্রমানুযায়ী নয়, তাই আপনার কোয়েরি যদি ইনসার্শন-অর্ডার স্ক্যানের উপর ব্যাপকভাবে নির্ভর করে তাহলে আপনি একটি বাছাইযোগ্য বিকল্প পছন্দ করতে পারেন।