ULID

ULID Parser

Parse ULID timestamp and randomness

Validation
🔒 100% client-side — your data never leaves this page
Maintained by Evan•Updated: September 30, 2026
Options
Input

Paste one ULID per line and inspect timestamps plus validity first; random-segment display and copy options can be adjusted in Advanced mode.

Output
ULID parse result will appear here
🔒 Processed locally in your browser · ULID timestamp decoder
Page reading mode

The full guide also includes pitfalls, worked examples, snippets, FAQs, and related tools for checking results or troubleshooting.

About this tool

Parse one ULID per line using the 26-character Crockford Base32 alphabet and the 128-bit maximum 7ZZZZZZZZZZZZZZZZZZZZZZZZZ. Input is case-insensitive; the uppercase option changes output text, not validity. Valid rows show the encoded 48-bit timestamp and optional 80-bit random segment as 20 hex digits. Extracted timestamps are not proof of creation time or cross-system order. Input and settings are stored in this browser until cleared.

Production Snippets

Example

text

7ZZZZZZZZZZZZZZZZZZZZZZZZZ → valid maximum
80000000000000000000000000 → overflow

Failure Clinic (Common Pitfalls)

A matching alphabet is insufficient

Cause: A 26-character Base32 string can carry two bits too many for ULID.

Fix: Check the first-character bound and reject overflow instead of masking it.

Scenario Recipes

01

Check ULID boundaries before trusting a timestamp

Goal: Separate valid encoded values from oversized Base32 strings.

  1. Paste the all-zero ULID, 7ZZZZZZZZZZZZZZZZZZZZZZZZZ and 80000000000000000000000000 on separate lines.
  2. Parse and confirm the first two pass while the third reports a 128-bit limit.
  3. Turn off random hex before copying a timestamp-only result.

Result: The parser reports encoded time and format validity, not verified event provenance.

Frequently Asked Questions

Which ULID strings are accepted?

Exactly 26 Crockford Base32 characters, case-insensitive, excluding I, L, O and U. The first character must be 0–7 so the encoded value fits 128 bits.

Why is a value starting with 8 invalid?

Twenty-six Base32 characters can encode 130 bits, but ULID only has 128. Values above 7ZZZZZZZZZZZZZZZZZZZZZZZZZ must be rejected.

Does the timestamp prove when an ID was created?

No. It is the timestamp encoded in the supplied ID. A caller can choose that value and clocks may differ or move backwards.

Does disabling uppercase reject lowercase input?

No. ULIDs remain case-insensitive. Disabling uppercase preserves the input’s casing in the result.

What does Show random hex affect?

It controls the displayed random segment and copied result text. When off, both row-copy and Copy all omit the random hex segment.

Can I parse a batch locally?

Yes, one ID per line; blank lines are skipped and invalid rows are marked independently. Input and options are saved in localStorage, and Clear deletes that draft. Input contents are not uploaded.

Keep browsing