Štyri hlavné režimy
Každý režim vymieňa rozsah znakov za hustotu. Numerický režim zvláda len číslice, ale uloží tri z nich do 10 bitov, zatiaľ čo bajtový režim zvláda ľubovoľný bajt, ale na každý minie 8 bitov.
Alfanumerický režim pokrýva sadu 45 znakov: číslice 0 – 9, veľké písmená A – Z, medzeru a symboly $ % * + - . / a dvojbodku. Malé písmená v sade nie sú, a preto môže mať adresa URL úplne veľkými písmenami menší kód než tá istá adresa malými.
- Numerický: číslice 0 – 9, 10 bitov na 3 číslice
- Alfanumerický: 45 znakov, 11 bitov na 2 znaky
- Bajtový: ľubovoľná 8-bitová hodnota, 8 bitov na bajt
- Kandži: dvojbajtové znaky Shift JIS, 13 bitov každý
Indikátory režimu a segmenty
Každý úsek údajov sa začína 4-bitovým indikátorom režimu a počtom znakov, ktorého dĺžka závisí od režimu a verzie. Kód môže obsahovať niekoľko takýchto segmentov, napríklad numerický pre dlhý rad číslic a bajtový pre zvyšok, čo môže výsledok zmenšiť.
Iné 4-bitové indikátory signalizujú funkcie, nie znakové sady: ECI na deklarovanie kódovania znakov, structured append na rozdelenie údajov medzi viac kódov a FNC1 pre GS1 a iné priemyselné dátové formáty. Ukončovač zo štyroch nulových bitov údaje ukončí.
- Numerický 0001, alfanumerický 0010, bajtový 0100, kandži 1000
- ECI 0111, structured append 0011
- FNC1 prvá pozícia 0101, druhá pozícia 1001
- Ukončovač 0000
Bajtový režim a znakové sady
Predvolený výklad bajtového režimu podľa normy je ISO-8859-1 (Latin-1), ale väčšina dnešných generátorov zapisuje UTF-8, aby prežili písmená s diakritikou, iné písma a emoji. Čítačky zvyčajne zistia UTF-8 kontrolou bajtov.
Tam, kde musí byť znaková sada jednoznačná, ju môže výslovne deklarovať hlavička ECI. Bez nej môže čítačka občas hádať nesprávne a zobraziť skomolené znaky.