Чотири основні режими
Кожен режим обмінює діапазон символів на щільність. Цифровий режим обробляє лише цифри, але пакує по три з них у 10 бітів, тоді як байтовий режим обробляє будь-який байт, але витрачає 8 бітів на кожен.
Буквено-цифровий режим охоплює набір із 45 символів: цифри 0-9, великі літери A-Z, пробіл і символи $ % * + - . / та двокрапку. Малих літер у наборі немає, тому адреса, написана лише великими літерами, може дати менший код, ніж та сама адреса малими.
- Цифровий: цифри 0-9, 10 бітів на 3 цифри
- Буквено-цифровий: 45 символів, 11 бітів на 2 символи
- Байтовий: будь-яке 8-бітове значення, 8 бітів на байт
- Кандзі: двобайтові символи Shift JIS, по 13 бітів кожен
Індикатори режиму та сегменти
Кожна серія даних починається з 4-бітового індикатора режиму та лічильника символів, довжина якого залежить від режиму й версії. Код може містити кілька таких сегментів, наприклад цифровий для довгої серії цифр і байтовий для решти, що може зменшити результат.
Інші 4-бітові індикатори сигналізують про функції, а не про набори символів: ECI для оголошення кодування символів, structured append для розбиття даних між кількома кодами та FNC1 для GS1 та інших галузевих форматів даних. Дані завершує термінатор із чотирьох нульових бітів.
- Цифровий 0001, буквено-цифровий 0010, байтовий 0100, кандзі 1000
- ECI 0111, structured append 0011
- FNC1 перша позиція 0101, друга позиція 1001
- Термінатор 0000
Байтовий режим і набори символів
Стандартне тлумачення байтового режиму за стандартом це ISO-8859-1 (Latin-1), але більшість генераторів сьогодні записують UTF-8, щоб літери з діакритикою, інші писемності й емодзі збереглися. Зчитувачі зазвичай розпізнають UTF-8 за аналізом байтів.
Там, де набір символів має бути однозначним, його можна явно оголосити заголовком ECI. Без нього зчитувач іноді може вгадати неправильно й показати спотворені символи.