Četiri glavna režima
Svaki režim menja raspon znakova za gustinu. Numerički režim obrađuje samo cifre, ali pakuje po tri u 10 bitova, dok bajtni režim obrađuje bilo koji bajt, ali troši 8 bitova na svaki.
Alfanumerički režim pokriva skup od 45 znakova: cifre 0–9, velika slova A–Z, razmak i simbole $ % * + - . / i dvotačku. Mala slova nisu u skupu, zbog čega URL napisan samo velikim slovima može dati manji kod od istog URL-a pisanog malim slovima.
- Numerički: cifre 0–9, 10 bitova na 3 cifre
- Alfanumerički: 45 znakova, 11 bitova na 2 znaka
- Bajtni: bilo koja 8-bitna vrednost, 8 bitova po bajtu
- Kanji: Shift JIS dvobajtni znakovi, 13 bitova po znaku
Indikatori režima i segmenti
Svaki niz podataka počinje 4-bitnim indikatorom režima i brojem znakova, čija dužina zavisi od režima i verzije. Kod može sadržati nekoliko takvih segmenata, na primer numerički za dugačak niz cifara i bajtni za ostalo, što može dati manji rezultat.
Drugi 4-bitni indikatori signaliziraju funkcije, a ne skupove znakova: ECI za deklarisanje kodiranja znakova, structured append za deljenje podataka na više kodova i FNC1 za GS1 i druge industrijske formate podataka. Završnik od četiri nulta bita završava podatke.
- Numerički 0001, alfanumerički 0010, bajtni 0100, kanji 1000
- ECI 0111, structured append 0011
- FNC1 prva pozicija 0101, druga pozicija 1001
- Završnik 0000
Bajtni režim i skupovi znakova
Podrazumevano tumačenje bajtnog režima u standardu je ISO-8859-1 (Latin-1), ali većina današnjih generatora upisuje UTF-8 da bi slova sa dijakriticima, druga pisma i emodžiji preživeli. Čitači obično prepoznaju UTF-8 pregledom bajtova.
Tamo gde skup znakova mora biti nedvosmislen, ECI zaglavlje ga može izričito deklarisati. Bez njega čitač povremeno može pogrešno da pretpostavi i prikaže izobličene znakove.