Cele patru moduri principale
Fiecare mod schimbă gama de caractere pe densitate. Modul numeric tratează doar cifre, dar împachetează trei dintre ele în 10 biți, în timp ce modul octet tratează orice octet, dar cheltuiește 8 biți pentru fiecare.
Modul alfanumeric acoperă un set de 45 de caractere: cifrele 0–9, literele mari A–Z, spațiul și simbolurile $ % * + - . / și două puncte. Literele mici nu fac parte din set, de aceea un URL scris integral cu majuscule poate da un cod mai mic decât același URL scris cu litere mici.
- Numeric: cifrele 0–9, 10 biți pentru 3 cifre
- Alfanumeric: 45 de caractere, 11 biți pentru 2 caractere
- Octet: orice valoare pe 8 biți, 8 biți per octet
- Kanji: caractere Shift JIS pe doi octeți, 13 biți fiecare
Indicatori de mod și segmente
Fiecare șir de date începe cu un indicator de mod de 4 biți și un număr de caractere, a cărui lungime depinde de mod și de versiune. Un cod poate conține mai multe astfel de segmente, de exemplu numeric pentru un șir lung de cifre și octet pentru restul, ceea ce poate face rezultatul mai mic.
Alți indicatori de 4 biți semnalează funcții, nu seturi de caractere: ECI pentru declararea unei codări de caractere, structured append pentru împărțirea datelor pe mai multe coduri și FNC1 pentru GS1 și alte formate de date industriale. Un terminator de patru biți zero încheie datele.
- Numeric 0001, alfanumeric 0010, octet 0100, kanji 1000
- ECI 0111, structured append 0011
- FNC1 prima poziție 0101, a doua poziție 1001
- Terminator 0000
Modul octet și seturile de caractere
Interpretarea implicită a standardului pentru modul octet este ISO-8859-1 (Latin-1), dar cele mai multe generatoare scriu astăzi UTF-8, astfel încât literele cu diacritice, alte alfabete și emoji să se păstreze. Cititoarele detectează de obicei UTF-8 inspectând octeții.
Acolo unde setul de caractere trebuie să fie fără echivoc, un antet ECI îl poate declara explicit. Fără el, un cititor poate ghici uneori greșit și poate afișa caractere încurcate.