Qraft

Alphanumeric Mode

Alphanumeric Mode is the second most data-efficient of the four QR code encoding modes. It supports 45 characters: digits 0-9, uppercase letters A-Z, space, and the symbols $, %, *, +, -, ., /, and :. Notably, lowercase letters are not included.

The compression pairs two characters into 11 bits. Each character is assigned a value from 0 to 44; the first character's value is multiplied by 45 and added to the second character's value, then encoded in 11 bits. A trailing single character uses 6 bits. This allows up to 4,296 characters at error correction level L.

The full 45-character set

GroupCharactersValues
Digits (10)0 1 2 3 4 5 6 7 8 90-9
Uppercase letters (26)A-Z10-35
Space (1)(space)36
Symbols (8)$ % * + - . / :37-44

The value 0-44 assigned to each character feeds the pair compression formula (first character × 45 + second character, stored in 11 bits). Characters missing from this table - such as underscore (_), question mark (?), or ampersand (&) - cannot be encoded in Alphanumeric Mode.

A concrete capacity comparison

Take the 32-character URL "HTTPS://QRAFT.CC/JA/GLOSSARY/QR/" written in uppercase: encoded in Alphanumeric Mode, the data payload takes 16 pairs × 11 bits = 176 bits. The same 32 characters with lowercase letters fall back to Byte Mode at 8 bits per character, requiring 256 bits. When that difference crosses a version boundary, the printed QR code visibly grows one size step.

URLs are one use case, but there is a practical trick: URLs that contain lowercase letters default to Byte Mode. Converting the URL to uppercase before generating the QR code triggers Alphanumeric Mode, cutting the data payload by roughly 30% (8 bits per character down to 5.5). HTTP schemes and domain names are case-insensitive, so uppercase conversion works safely, though care is needed if the server's path or query parameters are case-sensitive.