CUID Generator

Generate collision-resistant unique IDs (CUID v1)

Počet

Vygenerovaná CUID

Klikněte na Generovat pro vytvoření CUID

CUID v1 je starší formát. Pro nové projekty použijte CUID2.

Co je CUID?

CUID (Collision-resistant Unique IDentifier) je globálně jedinečný identifikátor navržený pro horizontálně škálovatelné aplikace.

Vždy začíná písmenem c, za nímž následuje časové razítko, čítač, otisk hostitele a náhodný segment — vše zakódováno v base36.

ID jsou bezpečná pro URL, kompaktní a čitelná, vhodná pro databázová ID, URL a generování relací.

Struktura CUID

Každý CUID se skládá z pěti různých sekcí zajišťujících jedinečnost napříč stroji, procesy a časem:

Příklad:: clrc4gkwz001ag2hs3k7f9m2q
cPrefixKonstantní znak 'c' jako označení typu
lrc4gkwzČasové razítkoUnix čas v milisekundách, zakódovaný v base36
001aČítačSekvenční čítač pro zabránění kolizím ve stejnou milisekundu
g2hsOtiskJedinečný otisk hostitele z PID a názvu hostitele
3k7f9m2qNáhodnýNáhodný segment pro další jedinečnost

Toto hierarchické uspořádání zajišťuje chronologické řazení ID při zachování dostatečné náhodné entropie pro distribuované systémy.

Odolnost vůči kolizím

CUID kombinuje několik mechanismů pro zajištění jedinečnosti:

Časová přesnost
Přesnost na milisekundy znamená, že ID vytvořená v různých vláknech provádění obvykle začínají různými hodnotami.
Sekvenční čítač
Dokonce i když jsou dvě ID vytvořena ve stejnou milisekundu, čítač se inkrementuje, čímž zaručuje jedinečnost v rámci jednoho procesu.
Otisk hostitele
Otisk odvozený z PID a názvu hostitele rozlišuje ID vydaná z různých serverů.
Náhodná entropie
Náhodný segment přidává další vrstvu obrany proti zbývajícím kolizím.

CUID vs UUID

CUID i UUID řeší problém jedinečnosti, ale s různými přístupy:

VlastnostCUID v1UUID v4
FormátMalá alfanumerická písmenaHexadecimální s pomlčkami
TříditelnýČástečně (nejdříve časové razítko)Ne (v4 náhodné)
Bezpečný pro URLAnoAno (s pomlčkami)
Odolnost vůči kolizímVysoká (strukturální)Vysoká (statistická)
PředvídatelnostNízká (viditelné časové razítko)Velmi nízká
Délka25 znaků36 znaků
Vyžaduje koordinaciNeNe

CUID je lepší pro viditelná databázová ID a URL; UUID je rozšířenější a má širší podporu.

CUID v1 vs CUID v2

CUID v2 je kompletní přepsání algoritmu řešící bezpečnostní problémy CUID v1:

AspektCUID v1CUID v2
AlgoritmusVlastníSHA3 + CSPRNG
KryptografickýNe (předvídatelný)Ano (kryptograficky bezpečný)
Časové razítkoJasně viditelnéSkryté v hashu
FormátVždy začíná 'c'Přizpůsobitelný prefix
npm balíčekcuid@paralleldrive/cuid2
DélkaPevných 25 znakůPřizpůsobitelná (výchozí 24)

Pro nové projekty se doporučuje CUID v2, který poskytuje silnější bezpečnostní záruky při zachování snadného použití.

Běžné případy použití

Databázová ID
Ideální jako primární klíče — čitelná, kompaktní, bezpečná pro URL bez kódování.
Správa relací
Generování jedinečných ID relací pro webové aplikace s odolností vůči hádání.
ID požadavků
Sledování požadavků napříč distribuovanými systémy s jedinečným ID, které lze logovat a trasovat.
ID souborů
Generování jedinečných názvů souborů pro nahraný obsah nebo dočasné soubory.
Synchronizace dat
Synchronizace dat na více zařízeních nebo distribuovaných databázích s jistotou jedinečnosti.
Identifikátory URL
Vytváření krátkých odkazů nebo ID videí se zárukou minimálních kolizí.

Příklady kódu

Instalace a základní použití:

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'

Integrace Node.js a běžných databází:

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'

Použití databázového omezení:

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())
}

Nejčastěji kladené otázky

Je CUID skutečně jedinečný napříč různými servery?
Ano — mechanismus otisku (PID + název hostitele) zajišťuje, že ID vydaná z různých serverů se liší v části otisku. Časový čítač a náhodný segment poskytují další ochranu.
Lze CUID používat v prohlížeči?
Ano — knihovna CUID je kompatibilní s prohlížečem i Node.js. V prostředí prohlížeče otisk používá informace navigátoru a další data místo dat o procesu.
Jak velký je CUID ve srovnání s alternativami?
CUID v1 má pevnou délku 25 znaků. UUID v4 má 36 znaků s pomlčkami. NanoID je přizpůsobitelné, obvykle 21 znaků. CUID v2 je přizpůsobitelné, výchozí 24 znaků.
Je CUID kryptograficky bezpečný?
CUID v1 není kryptograficky bezpečný — časové razítko je viditelné a některé komponenty jsou předvídatelné. CUID v2 používá SHA3 a CSPRNG, takže je vhodný pro bezpečnostně citlivé případy.
Jaký je hlavní rozdíl mezi CUID a NanoID?
NanoID se zaměřuje na malou velikost a kryptografickou bezpečnost s plně přizpůsobitelnými velikostmi. CUID upřednostňuje částečnou chronologickou tříditelnost a vizuální rozlišitelnost. CUID v2 kombinuje bezpečnost s rozpoznatelnou identitou.
Jak CUID zpracovává kolize?
Kolize jsou teoreticky možné, ale statisticky velmi nepravděpodobné. Čítač brání kolizím v rámci jednoho procesu; otisk odděluje různé stroje; náhodný segment zpracovává hraniční případy. Algoritmus je navržen pro produkční systémy v reálném světě.