Skip to content
UseQR
ESC

Jump to

MOVEOPEN50 places

Reference tables

QR character set reference: modes, values and indicators

Alphanumeric mode covers exactly 45 characters with values 0–44. Digits 0–9 map to values 0–9, letters A–Z to 10–35, then space, $, %, *, +, -, ., / and : take 36–44. Lowercase letters are not in the set, so one lowercase character pushes the whole segment into byte mode.

View as MarkdownPaste this page into any AI assistant. It is plain, portable Markdown.

The alphanumeric table, values 0–44

Each character has a numeric value. Characters are taken in pairs: the pair encodes as 45 × (first value) + (second value), an 11-bit number. A trailing single character takes 6 bits alone.

Value Char Value Char Value Char
0 0 15 F 30 U
1 1 16 G 31 V
2 2 17 H 32 W
3 3 18 I 33 X
4 4 19 J 34 Y
5 5 20 K 35 Z
6 6 21 L 36 space
7 7 22 M 37 $
8 8 23 N 38 %
9 9 24 O 39 *
10 A 25 P 40 +
11 B 26 Q 41 -
12 C 27 R 42 .
13 D 28 S 43 /
14 E 29 T 44 :

Worked example: QR = 45 × 27 + 28 = 1243 = 10011011011 in 11 bits.

Note what is missing: lowercase letters, ?, =, &, #, _, ~ and @. A URL with a query string cannot stay in alphanumeric mode past the first =, which is why HTTPS://EXAMPLE.COM/ABC encodes ~31% smaller than its lowercase twin but a tracking URL gains nothing. Details in data encoding modes.

Numeric mode

Digits 0-9 only. Groups of 3 digits → 10 bits; a trailing pair takes 7 bits and a trailing single digit 4 bits. That is 3.33 bits per digit against 8 in byte mode: the reason a numeric-only payload reaches 7,089 characters while bytes stop at 2,953. One stray character (a + before a phone number, a space) disqualifies the whole segment.

Byte mode

8 bits per byte, any value. The ISO/IEC 18004 default interpretation is ISO 8859-1 (Latin-1), but near-universal practice is to store UTF-8 and rely on the decoder to detect it: every mainstream phone does. A strictly conforming encoder would announce UTF-8 with an ECI header, yet ECI itself confuses some older readers, so most generators (UseQR included) write plain UTF-8 bytes with no ECI. See UTF-8 and Unicode in QR codes.

Kanji mode

13 bits per character, for double-byte Shift-JIS characters in the ranges 0x8140–0x9FFC and 0xE040–0xEBBF. A compaction of Shift-JIS, not of Unicode: see kanji mode explained.

Mode indicators and count field widths

Every segment starts with a 4-bit mode indicator, then a character count whose width depends on the version:

Mode Indicator Count bits v1–9 v10–26 v27–40
Numeric 0001 10 12 14
Alphanumeric 0010 9 11 13
Byte 0100 8 16 16
Kanji 1000 8 10 12
ECI 0111 n/a n/a n/a
Structured append 0011 n/a n/a n/a
Terminator 0000 n/a n/a n/a

A single code may switch modes mid-stream, encoders segment the input and use the cheapest mode for each run. To see which mode a real code ended up in, decode it and read the reported mode, or start from a plain text code and vary the characters.

FAQ

What characters can a QR code contain?

Anything: byte mode stores arbitrary 8-bit data, in practice UTF-8, so all of Unicode is representable. The numeric and alphanumeric modes are optimisations for restricted character sets, not limits on what QR codes can hold.

Does a QR code support lowercase letters?

Yes, via byte mode at 8 bits per character. Only the 45-character alphanumeric set (digits, uppercase A–Z and nine symbols) qualifies for the cheaper 5.5-bit encoding.

What is the QR alphanumeric character set?

Exactly 45 characters: 0–9 (values 0–9), A–Z (10–35), space (36), then $, %, *, +, -, ., / and : (37–44). Pairs encode as 45 × first + second in 11 bits.

Why does an uppercase URL make a smaller QR code?

Uppercase letters sit in the alphanumeric set, so the segment encodes at 5.5 bits per character instead of 8. Schemes and hostnames are case-insensitive, making HTTPS://EXAMPLE.COM safe; paths are frequently case-sensitive, so leave them alone.

Try it: free, no signup