CUID Generator

Generate collision-resistant unique IDs (CUID v1)

Кількість

Згенеровані CUID

Натисніть «Згенерувати» для створення CUID

CUID v1 — застарілий формат. Для нових проєктів використовуйте CUID2.

Що таке CUID?

CUID (Collision-resistant Unique IDentifier) — це глобально унікальний ідентифікатор, розроблений для горизонтально масштабованих застосунків.

Завжди починається з літери c, далі йде мітка часу, лічильник, відбиток хоста та випадковий сегмент — усе закодоване в base36.

ID є безпечними для URL, компактними та зрозумілими, що робить їх придатними для ідентифікаторів баз даних, URL і генерації сесій.

Структура CUID

Кожен CUID складається з п'яти різних секцій, що забезпечують унікальність на різних машинах, процесах і в часі:

Приклад:: clrc4gkwz001ag2hs3k7f9m2q
cПрефіксКонстантний символ 'c' як маркер типу
lrc4gkwzМітка часуUnix-час у мілісекундах, закодований у base36
001aЛічильникПослідовний лічильник для запобігання колізіям в одну мілісекунду
g2hsВідбитокУнікальний відбиток хоста з PID та імені хоста
3k7f9m2qВипадковийВипадковий сегмент для додаткової унікальності

Ця ієрархічна конструкція забезпечує хронологічне впорядкування ID зі збереженням достатньої випадкової ентропії для розподілених систем.

Стійкість до колізій

CUID поєднує кілька механізмів для гарантування унікальності:

Часова точність
Точність до мілісекунди означає, що ID, створені в різних потоках виконання, зазвичай починаються з різних значень.
Послідовний лічильник
Навіть якщо два ID створені в одну мілісекунду, лічильник збільшується, гарантуючи унікальність в межах одного процесу.
Відбиток хоста
Відбиток, отриманий з PID та імені хоста, розрізняє ID, видані з різних серверів.
Випадкова ентропія
Випадковий сегмент додає додатковий рівень захисту від можливих колізій.

CUID проти UUID

Як CUID, так і UUID вирішують проблему унікальності, але з різними підходами:

ФункціяCUID v1UUID v4
ФорматРядкові буквено-цифрові символиШістнадцятковий з дефісами
СортуванняЧастково (мітка часу спочатку)Ні (v4 випадковий)
Безпечний для URLТакТак (з дефісами)
Стійкість до колізійВисока (структурна)Висока (статистична)
ПередбачуваністьНизька (видима мітка часу)Дуже низька
Довжина25 символів36 символів
Потребує координаціїНіНі

CUID краще підходить для видимих ідентифікаторів бази даних та URL; UUID більш поширений і має ширшу підтримку.

CUID v1 проти CUID v2

CUID v2 — це повне переписання алгоритму, що усуває проблеми безпеки в CUID v1:

АспектCUID v1CUID v2
АлгоритмВласнийSHA3 + CSPRNG
КриптографічнийНі (передбачуваний)Так (криптографічно безпечний)
Мітка часуЧітко видимаПрихована в хеші
ФорматЗавжди починається з 'c'Налаштовуваний префікс
npm-пакетcuid@paralleldrive/cuid2
ДовжинаФіксована 25 символівНалаштовувана (за замовчуванням 24)

Для нових проектів рекомендується CUID v2, який забезпечує більш надійні гарантії безпеки зі збереженням простоти використання.

Поширені сценарії використання

Ідентифікатори баз даних
Ідеальні як первинні ключі — зрозумілі, компактні, безпечні для URL без кодування.
Управління сесіями
Генерація унікальних ідентифікаторів сесій для веб-застосунків зі стійкістю до вгадування.
Ідентифікатори запитів
Відстеження запитів у розподілених системах з унікальним ID, який можна логувати та відстежувати.
Ідентифікатори файлів
Генерація унікальних імен файлів для завантаженого контенту або тимчасових файлів.
Синхронізація даних
Синхронізація даних між кількома пристроями або розподіленими базами даних з впевненістю у унікальності.
Ідентифікатори URL
Створення коротких посилань або ідентифікаторів відео із гарантованою мінімальною колізією.

Приклади коду

Встановлення та базове використання:

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'

Інтеграція 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 / 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 дійсно унікальним на різних серверах?
Так — механізм відбитку (PID + ім'я хоста) гарантує, що ID, видані з різних серверів, відрізняються в частині відбитку. Часовий лічильник та випадковий сегмент забезпечують додатковий захист.
Чи можна використовувати CUID у браузері?
Так — бібліотека CUID сумісна як з браузером, так і з Node.js. У браузерному середовищі відбиток використовує інформацію навігатора та інші дані замість даних процесу.
Наскільки великий CUID порівняно з альтернативами?
CUID v1 має фіксовану довжину 25 символів. UUID v4 має 36 символів з дефісами. NanoID є налаштовуваним, зазвичай 21 символ. CUID v2 є налаштовуваним, за замовчуванням 24 символи.
Чи є CUID криптографічно безпечним?
CUID v1 не є криптографічно безпечним — мітка часу видима, а деякі компоненти передбачувані. CUID v2 використовує SHA3 та CSPRNG, що робить його придатним для безпечно-критичних випадків.
Яка головна відмінність між CUID та NanoID?
NanoID орієнтований на малий розмір і криптографічну безпеку з повністю налаштовуваними розмірами. CUID надає пріоритет частковому хронологічному впорядкуванню та візуальній відмінності. CUID v2 поєднує безпеку з розпізнаваною ідентичністю.
Як CUID обробляє колізії?
Колізії теоретично можливі, але статистично малоймовірні. Лічильник запобігає колізіям у межах одного процесу; відбиток відокремлює різні машини; випадковий сегмент обробляє граничні випадки. Алгоритм розроблений для реальних виробничих систем.