Base32 Crockford Encoder/Decoder

Douglas Crockford's human-friendly Base32 without I, L, O, U

Free Crockford Base32 encoder and decoder — uses the 0-9 A-Z alphabet minus I, L, O and U so encoded strings are easy to read aloud and type. Case-insensitive decoding with O→0 and I/L→1, all in your browser. It runs free in your browser on Gera Tools, with nothing uploaded.

Last updated Source: Gera Tools

How is Crockford Base32 different from standard Base32?

It uses the alphabet 0–9 and A–Z but removes the four visually confusing letters I, L, O and U. That leaves 32 symbols chosen so encoded values are easy to read aloud, write down, and type without errors.

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

PropertyCrockford Base32RFC 4648 Base32
Alphabet0–9, A–Z minus I, L, O, UA–Z, 2–7
PaddingNone= to nearest 8
Case-sensitive decodeNo — forgivingStrictly uppercase
Ambiguity correctionO→0, I/L→1None
Typical useULIDs, licence keys, human-read IDsTOTP 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.