Neli põhirežiimi
Iga režiim vahetab märkide ulatuse tiheduse vastu. Numbriline režiim käsitleb ainult numbreid, kuid pakib kolm neist 10 bitti, baidirežiim käsitleb mis tahes baiti, kuid kulutab igaühele 8 bitti.
Tähtnumbriline režiim katab 45-märgilise komplekti: numbrid 0–9, suurtähed A–Z, tühik ning sümbolid $ % * + - . / ja koolon. Väiketähti komplektis pole, mistõttu võib ainult suurtähtedest URL anda väiksema koodi kui sama URL väiketähtedega.
- Numbriline: numbrid 0–9, 10 bitti 3 numbri kohta
- Tähtnumbriline: 45 märki, 11 bitti 2 märgi kohta
- Bait: mis tahes 8-bitine väärtus, 8 bitti baidi kohta
- Kanji: Shift JIS kahebaidised märgid, 13 bitti igaüks
Režiimi indikaatorid ja segmendid
Iga andmelõik algab 4-bitise režiimi indikaatori ja märkide arvuga, mille pikkus sõltub režiimist ja versioonist. Kood võib sisaldada mitut sellist segmenti, näiteks numbrilist pika numbrireana ja baidirežiimi ülejäänu jaoks, mis võib tulemust väiksemaks teha.
Teised 4-bitised indikaatorid märgivad funktsioone, mitte märgistikke: ECI märgistiku deklareerimiseks, structured append andmete jagamiseks koodide vahel ning FNC1 GS1 ja teiste tööstusandmevormingute jaoks. Andmed lõpetab nelja nullbiti terminaator.
- Numbriline 0001, tähtnumbriline 0010, bait 0100, kanji 1000
- ECI 0111, structured append 0011
- FNC1 esimene positsioon 0101, teine positsioon 1001
- Terminaator 0000
Baidirežiim ja märgistikud
Standardi vaikimisi tõlgendus baidirežiimile on ISO-8859-1 (Latin-1), kuid enamik generaatoreid kirjutab tänapäeval UTF-8, et rõhumärgiga tähed, teised kirjasüsteemid ja emojid säiliksid. Lugejad tuvastavad UTF-8 tavaliselt baitide kontrollimisega.
Kui märgistik peab olema üheselt mõistetav, saab ECI-päis selle selgesõnaliselt deklareerida. Ilma selleta võib lugeja aeg-ajalt valesti arvata ja kuvada moonutatud märke.