Crockford Base32, designed by Douglas Crockford, is a Base32 variant tuned for humans rather than machines. By dropping the letters I, L, O and U, it produces strings that are hard to misread and easy to dictate, which is why it underpins identifiers like ULIDs and many license-key schemes. This tool encodes text into Crockford Base32 and decodes it back, with forgiving, case-insensitive input handling.
How it works
The encoder treats your text as a stream of UTF-8 bytes and regroups those bits into 5-bit chunks, because 2⁵ = 32. Each chunk maps to one symbol from the alphabet 0123456789ABCDEFGHJKMNPQRSTVWXYZ — note the missing I, L, O and U. Leftover bits at the end are left-padded with zeros to complete the final symbol; unlike RFC 4648 Base32, no = padding is appended.
The decoder reverses this. It ignores hyphens and whitespace, uppercases each symbol, and applies Crockford’s forgiving rules — O becomes 0, and I or L become 1 — before looking the symbol up. The recovered 5-bit values are reassembled into bytes and decoded as UTF-8, with a clear error if an illegal symbol appears or the bytes are not valid text.
Why remove I, L, O and U specifically?
Each removed letter has a specific confusion risk:
- O looks like digit 0 in almost every font and at small sizes.
- I and L both look like digit 1, especially in sans-serif typefaces used in monospace fields.
- U was removed to avoid the encoding accidentally spelling out obscene words — a practical concern for user-facing codes that appear in support tickets or licence keys.
The remaining 32 symbols are chosen to minimise ambiguity in optical character recognition, handwriting, and spoken-over-the-phone scenarios.
Comparing Crockford Base32 to RFC 4648 Base32
| Property | Crockford Base32 | RFC 4648 Base32 |
|---|---|---|
| Alphabet | 0–9, A–Z minus I, L, O, U | A–Z, 2–7 |
| Padding | None | = to nearest 8 |
| Case-sensitive decode | No — forgiving | Strictly uppercase |
| Ambiguity correction | O→0, I/L→1 | None |
| Typical use | ULIDs, licence keys, human-read IDs | TOTP secrets, DNS-safe data |
Real-world use: ULIDs
A ULID (Universally Unique Lexicographically Sortable Identifier) is a popular alternative to UUID that encodes a 48-bit millisecond timestamp and 80 bits of randomness as a 26-character Crockford Base32 string. Because the timestamp is encoded first, ULIDs sort chronologically as strings — which is useful for database indexing — while remaining compact and human-readable. If you are generating or debugging ULIDs, this tool can encode and decode the underlying data.
Example
Encoding the word Hello yields 91JPRV3F. Because decoding is forgiving, typing it back as 9ljprv3f (all lowercase, with l standing in for 1) still decodes to Hello.
Crockford Base32 also defines optional check symbols (*~$=U) for error detection. This tool focuses on the core encode/decode and does not append a check digit. Everything runs locally in your browser — your data is never uploaded.