Standards & Formats

QR Code Encoding Modes: Numeric, Alphanumeric, Byte, Kanji

QR codes pick an encoding mode to pack data efficiently. Learn how numeric, alphanumeric, byte and Kanji modes work.

QR code encoding modes are the four different "packing methods" a QR code can use to turn your content into bits — numeric, alphanumeric, byte, and Kanji — and choosing the right one is how a code squeezes the most data into the smallest square.

Not all data is created equal. A phone number is just digits; a web address mixes letters, slashes, and dots; a message might contain accented letters or Japanese characters. QR codes handle this with four specialized encoding modes, each optimized for a particular kind of content. Understanding them explains why some codes are denser than others — and why URLs behave the way they do. Let's dig in. 🐾

Why have different modes at all?

The whole point of encoding modes is efficiency. If a QR code knows it only needs to store digits, it can use far fewer bits per character than if it had to be ready for any possible symbol. Fewer bits means a smaller, denser code that scans faster and more reliably. So the standard offers a menu of modes, and an encoder picks whichever one fits your data best. Our guide on how QR codes work shows where this fits in the bigger picture.

Mode 1: Numeric — pure digits

Numeric mode handles the ten digits 0 through 9 and nothing else. It's the most compact mode by far, storing 3 digits in just 10 bits. That works out to about 3.33 bits per digit — far tighter than the 8 bits a plain character would normally take.

Numeric mode is ideal for phone numbers, product codes, serial numbers, reference IDs, and anything that's purely numbers. Because it's so efficient, a QR code full of digits can hold up to roughly 7,089 of them at the largest size.

Mode 2: Alphanumeric — a 45-character set

Alphanumeric mode covers a specific set of 45 characters: the digits 0–9, the uppercase letters A–Z, the space, and a handful of symbols ($ % * + - . / :). It packs 2 characters into 11 bits, about 5.5 bits each — still much better than 8.

Notice what's not there: lowercase letters, most punctuation, and any accented or non-Latin characters. This is why some short codes and reference numbers are written in all capitals — it lets them use this efficient mode. It's also why a link written entirely in uppercase can sometimes make a slightly smaller code.

Mode 3: Byte — the everyday workhorse

Byte mode (also called 8-bit mode) stores raw bytes, 8 bits per character. It's the catch-all: anything that doesn't fit the numeric or alphanumeric sets goes here. By default the bytes are usually interpreted as ISO-8859-1 (Latin-1), and UTF-8 is commonly used for wider character support, often signalled with ECI (more on that below).

Byte mode is less compact than the others, but it can represent almost anything — lowercase letters, full punctuation, accented characters, and more. Our article on character encoding and QR codes explains what those byte values actually mean as text.

Mode 4: Kanji — compact Japanese

Kanji mode is a specialist. It stores Japanese Shift-JIS characters in 13 bits each, which is more efficient than encoding the same characters as multiple UTF-8 bytes in byte mode. Given that QR codes were invented in Japan, it makes sense that the standard built in a dedicated, space-saving mode for the local writing system. For most Western users it's rarely triggered, but it's a big win for Japanese text.

ModeHandlesBit efficiencyBest for
Numeric0–910 bits / 3 digitsPhone numbers, IDs
Alphanumeric45-char set (caps, digits, few symbols)11 bits / 2 charsShort codes, reference numbers
ByteAny byte (Latin-1 / UTF-8)8 bits / charURLs, general text
KanjiShift-JIS Japanese13 bits / charJapanese text

Why do URLs use byte mode?

This surprises people: web addresses almost always encode in byte mode, even though they look like they could be alphanumeric. The reason is the character set. A typical URL contains lowercase letters (https://qr.puppy) and symbols that aren't in the 45-character alphanumeric set. Because alphanumeric mode is strictly limited to uppercase and a short symbol list, any lowercase letter or disallowed character forces the encoder into byte mode.

Want a slightly denser QR code for a link? Some URLs can be shortened, and a few systems accept uppercase paths — but for most real-world addresses, byte mode is simply the honest choice.

The practical takeaway: keep URLs short. Fewer characters in byte mode means a smaller code that scans more easily. Our guide to QR code data capacity shows how length affects the code's size.

Mode switching within one code

Here's a clever detail: a single QR code doesn't have to commit to one mode. The encoder can switch modes partway through the data. Each segment starts with a small "mode indicator" and a length count, then the encoder can jump to a different mode for the next segment.

Imagine a payload like ORDER- followed by a long number followed by a lowercase note. A smart encoder might use alphanumeric for the prefix, numeric for the digits, and byte for the note — using the tightest mode for each part. The cost of switching (a few extra bits per segment) is usually worth it when segments are long enough. Good QR generators do this optimization automatically.

ECI: telling the scanner which character set to use

Byte mode stores raw numbers, but a scanner needs to know what those numbers mean as text. Is byte value 233 an "é" in Latin-1, or part of a multi-byte UTF-8 sequence? That's where ECI comes in — Extended Channel Interpretation. ECI is a mechanism that lets a QR code declare which character set or encoding its bytes use, so the reader interprets them correctly.

Without an explicit ECI, scanners fall back on assumptions (often Latin-1, sometimes auto-detecting UTF-8), which is why accented letters and emojis occasionally garble across different apps. Our piece on character encoding and QR codes explains why that happens and how ECI helps.

How encoders choose a mode

You don't normally pick a mode by hand. When you type content into a generator, it analyzes your text and selects the most efficient valid mode — or a mix of modes — automatically. It also decides the smallest version (size) that fits, and applies your chosen error-correction level. The result is the compact, scannable square you see. To understand the sizing side, see data capacity and the anatomy of a QR code.

Curious to see modes in action? You can create a free QR code with QR Puppy — type digits, a link, or text, and watch the code adjust to fit.

Frequently asked questions

Which encoding mode is the most efficient?

Numeric mode is the tightest at 10 bits per 3 digits, so codes made of pure numbers pack in the most characters. Alphanumeric is next, then byte mode. Kanji is efficient specifically for Japanese Shift-JIS characters.

Why does making my link uppercase sometimes shrink the code?

Because uppercase letters and digits can fit alphanumeric mode (11 bits per 2 characters), while lowercase letters force byte mode (8 bits each but a bigger character set). If a URL's host or path tolerates uppercase, it may qualify for the more efficient mode — though most real URLs still end up in byte mode.

Do I need to choose the mode myself?

No. Any decent QR generator analyzes your content and picks the best mode automatically, even switching modes within a single code to save space. You just enter your data.

What is ECI in simple terms?

ECI (Extended Channel Interpretation) is a label inside the code that tells the scanner which character set the bytes use — for example UTF-8. It helps accented characters and non-Latin text decode correctly instead of turning into garbled symbols.

Can one QR code mix numbers, letters, and symbols?

Absolutely. A code can contain multiple segments, each in its own mode, so a payload with a code prefix, a number, and free text can use alphanumeric, numeric, and byte modes together for maximum efficiency.

Make a QR code the honest way 🐾

Free forever, no tracking, no expiry — generated right in your browser.

🎨 Create a QR code →