Generate CUID

A 25-character lowercase identifier starting with “c”, composed of a base36 timestamp, a session counter, a generator fingerprint, and a random suffix — the original collision-resistant ID format from Parallel Drive.

Browser extensions can read all data on this page. Use a private/incognito window with extensions disabled.

Generated · 0 IDs

Options

This ID

Length 25 chars
Bits ~125 (timestamp · counter · fingerprint · random)
Collision risk negligible
Features
Time-sortable URL-safe
Watch out
Legacy

Collision

1% collision chance after ≈ 304,463,440 IDs
Random part 62 random bits
Counted together Independent browser sessions in one millisecond
Built-in guard 1,679,616 IDs per millisecond per tab

Within one tab the counter prevents same-millisecond repeats. Across tabs, a collision needs the same millisecond plus a matching fingerprint and random tail.

Validate and parse CUID

Paste an ID

About CUID

Use when: you maintain a system that already uses CUID v1.

Avoid when: this is a new project. CUID v1 has been deprecated by its author in favour of CUID2.

How it is generated

A CUID v1 is always 25 lowercase base36 characters, and it always starts with the letter "c" so it can never be parsed as a number.

After the "c" you get four concatenated fields: timestamp, session counter, generator fingerprint, and a random tail. The counter guards against same-millisecond collisions within one tab, and the fingerprint distinguishes browser sessions minting IDs at the same time.

The random tail comes from crypto.getRandomValues via rejection sampling; the generator fingerprint is also seeded from crypto.getRandomValues, shared within a batch and re-randomized on each Regenerate.

  1. 01 Start the output with the literal character "c".
  2. 02 Append Date.now().toString(36), left-padded with zeros to 8 characters.
  3. 03 Append the session counter as 4 base36 characters; increment afterwards, wrap at 36⁴ = 1,679,616.
  4. 04 Append the generator fingerprint as 4 base36 characters (from crypto.getRandomValues; shared within a batch and re-randomized on each Regenerate).
  5. 05 Append two independent 4-character base36 random blocks from crypto.getRandomValues.
  6. 06 Result is always 1 + 8 + 4 + 4 + 4 + 4 = 25 characters.
c kkrabb0o 0000 qzrm 3a2g3y8a       (visual spaces for clarity;
│ └──┬───┘ └─┬┘ └─┬┘ └──┬───┘        actual ID is 25 chars no spaces)
│    │       │    │     └── 8 random base36 chars (two 4-char blocks)
│    │       │    └──────── 4-char generator fingerprint (per batch, re-rolled on Regenerate)
│    │       └───────────── 4-char session counter (++ per call, wraps at 36⁴)
│    └───────────────────── 8-char Unix-ms timestamp in base36
└────────────────────────── literal "c" prefix

Alphabet: 0-9 a-z (lowercase base36). Always exactly 25 chars.

All of this runs in your browser. Random bytes come from crypto.getRandomValues, timestamps come from the system clock, and nothing about the generated ID leaves the tab.

YouShallNotPass.io

Practical security tools. We never see your secrets. Open source. No accounts. No tracking.

Support YouShallNotPass.io by starring us on GitHub and sharing it with coworkers and friends.

Sister sites

© 2026 YouShallNotPass.io