CUID Generator
Generate collision-resistant unique IDs (CUID v1)
Genererade CUIDs
CUID v1 är ett legacy-format. Använd CUID2 för nya projekt.
Vad är CUID?
CUID (Collision-resistant Unique IDentifier) är ett globalt unikt ID utformat för horisontellt skalbara applikationer.
Börjar alltid med bokstaven c, följt av en tidsstämpel, räknare, värdavtryck och ett slumpmässigt segment — allt kodat i base36.
ID:n är URL-säkra, kompakta och läsbara, lämpliga för databas-ID:n, URL:er och sessionsgenerering.
CUID-struktur
Varje CUID består av fem olika sektioner som säkerställer unikhet över maskiner, processer och tid:
Denna hierarkiska design säkerställer att ID:n är kronologiskt ordnade samtidigt som tillräcklig slumpentropi bibehålls för distribuerade system.
Kollisionsresistens
CUID kombinerar flera mekanismer för att garantera unikhet:
CUID vs UUID
Både CUID och UUID löser uniktetsproblemet men med olika tillvägagångssätt:
| Funktion | CUID v1 | UUID v4 |
|---|---|---|
| Format | Alfanumeriska gemener | Hex med bindestreck |
| Sorterbar | Delvis (tidsstämpel först) | Nej (v4 slumpmässig) |
| URL-säker | Ja | Ja (med bindestreck) |
| Kollisionsresistens | Hög (strukturell) | Hög (statistisk) |
| Förutsägbarhet | Låg (synlig tidsstämpel) | Mycket låg |
| Längd | 25 tecken | 36 tecken |
| Kräver koordinering | Nej | Nej |
CUID är bättre för synliga databas-ID:n och URL:er; UUID är mer vitt antagen och har bredare stöd.
CUID v1 vs CUID v2
CUID v2 är en komplett algoritmomskrivning som åtgärdar säkerhetsproblem i CUID v1:
| Egenskap | CUID v1 | CUID v2 |
|---|---|---|
| Algoritm | Anpassad | SHA3 + CSPRNG |
| Kryptografisk | Nej (förutsägbar) | Ja (kryptografiskt säker) |
| Tidsstämpel | Tydligt synlig | Dold i hash |
| Format | Börjar alltid med 'c' | Anpassningsbart prefix |
| npm-paket | cuid | @paralleldrive/cuid2 |
| Längd | Fast 25 tecken | Anpassningsbar (standard 24) |
För nya projekt rekommenderas CUID v2 som ger starkare säkerhetsgarantier med bibehållen användarvänlighet.
Vanliga användningsfall
minimal kollision.Kodexempel
Installation och grundläggande användning:
// 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 och vanlig databasintegration:
// 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'Användning av databasbegränsning:
-- 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())
}