Čtyři hlavní režimy
Každý režim vyměňuje rozsah znaků za hustotu. Číselný režim zvládá jen číslice, ale vtěsná tři do 10 bitů, zatímco bajtový režim zvládá libovolný bajt, ale na každý spotřebuje 8 bitů.
Alfanumerický režim pokrývá sadu 45 znaků: číslice 0–9, velká písmena A–Z, mezeru a symboly $ % * + - . / a dvojtečku. Malá písmena v sadě nejsou, proto může adresa URL psaná celá velkými písmeny dát menší kód než stejná adresa malými písmeny.
- Číselný: číslice 0–9, 10 bitů na 3 číslice
- Alfanumerický: 45 znaků, 11 bitů na 2 znaky
- Bajtový: libovolná 8bitová hodnota, 8 bitů na bajt
- Kanji: dvoubajtové znaky Shift JIS, 13 bitů na znak
Indikátory režimu a segmenty
Každý úsek dat začíná 4bitovým indikátorem režimu a počtem znaků, jehož délka závisí na režimu a verzi. Kód může obsahovat několik takových segmentů, například číselný pro dlouhou řadu číslic a bajtový pro zbytek, což může výsledek zmenšit.
Další 4bitové indikátory signalizují funkce, ne sady znaků: ECI pro deklaraci kódování znaků, structured append pro rozdělení dat mezi více kódů a FNC1 pro formáty dat GS1 a další odvětvové formáty. Data ukončuje terminátor ze čtyř nulových bitů.
- Číselný 0001, alfanumerický 0010, bajtový 0100, kanji 1000
- ECI 0111, structured append 0011
- FNC1 první pozice 0101, druhá pozice 1001
- Terminátor 0000
Bajtový režim a sady znaků
Výchozí výklad bajtového režimu podle normy je ISO-8859-1 (Latin-1), ale většina dnešních generátorů zapisuje UTF-8, aby přežila písmena s diakritikou, jiná písma a emoji. Čtečky obvykle rozpoznají UTF-8 prohlédnutím bajtů.
Tam, kde musí být sada znaků jednoznačná, ji může výslovně deklarovat hlavička ECI. Bez ní může čtečka občas hádat špatně a zobrazit zkomolené znaky.