Empat mode utama
Setiap mode menukar rentang karakter dengan kepadatan. Mode numerik hanya menangani digit tetapi mengemas tiga digit ke dalam 10 bit, sedangkan mode byte menangani byte apa pun tetapi memakai 8 bit untuk masing-masingnya.
Mode alfanumerik mencakup set 45 karakter: digit 0–9, huruf kapital A–Z, spasi, dan simbol $ % * + - . / serta titik dua. Huruf kecil tidak termasuk dalam set ini, itulah sebabnya URL yang seluruhnya huruf kapital bisa menghasilkan kode lebih kecil daripada URL yang sama dalam huruf kecil.
- Numerik: digit 0–9, 10 bit per 3 digit
- Alfanumerik: 45 karakter, 11 bit per 2 karakter
- Byte: nilai 8-bit apa pun, 8 bit per byte
- Kanji: karakter dua-byte Shift JIS, masing-masing 13 bit
Mode indicator dan segmen
Setiap rangkaian data diawali mode indicator 4-bit dan jumlah karakter, yang panjangnya bergantung pada mode dan versi. Sebuah kode bisa berisi beberapa segmen semacam itu, misalnya numerik untuk deretan panjang digit dan byte untuk sisanya, yang dapat membuat hasilnya lebih kecil.
Indikator 4-bit lain menandakan fitur, bukan set karakter: ECI untuk menyatakan encoding karakter, structured append untuk membagi data ke beberapa kode, dan FNC1 untuk GS1 serta format data industri lainnya. Terminator berupa empat bit nol mengakhiri data.
- Numerik 0001, alfanumerik 0010, byte 0100, kanji 1000
- ECI 0111, structured append 0011
- FNC1 posisi pertama 0101, posisi kedua 1001
- Terminator 0000
Mode byte dan set karakter
Interpretasi bawaan standar untuk mode byte adalah ISO-8859-1 (Latin-1), tetapi sebagian besar generator kini menulis UTF-8 agar huruf beraksen, aksara lain, dan emoji tetap utuh. Pembaca biasanya mendeteksi UTF-8 dengan memeriksa byte-nya.
Jika set karakter harus tidak ambigu, header ECI dapat menyatakannya secara eksplisit. Tanpa itu, pembaca kadang salah menebak dan menampilkan karakter kacau.