Die vier Hauptmodi
Jeder Modus tauscht Zeichenumfang gegen Dichte. Der numerische Modus verarbeitet nur Ziffern, packt aber drei davon in 10 Bit, während der Byte-Modus jedes beliebige Byte verarbeitet, dafür aber 8 Bit pro Byte braucht.
Der alphanumerische Modus deckt einen Zeichensatz mit 45 Zeichen ab: die Ziffern 0–9, die Großbuchstaben A–Z, das Leerzeichen und die Symbole $ % * + - . / sowie den Doppelpunkt. Kleinbuchstaben gehören nicht dazu. Deshalb kann eine URL in reinen Großbuchstaben einen kleineren Code ergeben als dieselbe URL in Kleinbuchstaben.
- Numerisch: Ziffern 0–9, 10 Bit pro 3 Ziffern
- Alphanumerisch: 45 Zeichen, 11 Bit pro 2 Zeichen
- Byte: beliebiger 8-Bit-Wert, 8 Bit pro Byte
- Kanji: Shift-JIS-Doppelbyte-Zeichen, je 13 Bit
Modusindikatoren und Segmente
Jede Datenfolge beginnt mit einem 4-Bit-Modusindikator und einer Zeichenanzahl, deren Länge vom Modus und der Version abhängt. Ein Code kann mehrere solcher Segmente enthalten, zum Beispiel numerisch für eine lange Ziffernfolge und Byte für den Rest, was das Ergebnis kleiner machen kann.
Andere 4-Bit-Indikatoren zeigen Funktionen statt Zeichensätze an: ECI zum Deklarieren einer Zeichenkodierung, Structured Append zum Aufteilen von Daten auf mehrere Codes und FNC1 für GS1 und andere branchenspezifische Datenformate. Ein Abschluss aus vier Nullbits beendet die Daten.
- Numerisch 0001, alphanumerisch 0010, Byte 0100, Kanji 1000
- ECI 0111, Structured Append 0011
- FNC1 erste Position 0101, zweite Position 1001
- Abschluss 0000
Byte-Modus und Zeichensätze
Die Standardauslegung des Byte-Modus in der Norm ist ISO-8859-1 (Latin-1), doch die meisten Generatoren schreiben heute UTF-8, damit Umlaute, andere Schriften und Emojis erhalten bleiben. Lesegeräte erkennen UTF-8 meist durch Prüfen der Bytes.
Wo der Zeichensatz eindeutig sein muss, kann ein ECI-Header ihn ausdrücklich angeben. Ohne einen kann ein Lesegerät gelegentlich falsch raten und verstümmelte Zeichen anzeigen.