De fyra huvudlägena
Varje läge byter teckenomfång mot täthet. Numeriskt läge hanterar bara siffror men packar tre av dem i 10 bitar, medan byteläge hanterar vilken byte som helst men lägger 8 bitar på var och en.
Alfanumeriskt läge omfattar en teckenuppsättning på 45 tecken: siffrorna 0–9, versalerna A–Z, mellanslag och symbolerna $ % * + - . / samt kolon. Gemener ingår inte i uppsättningen, och därför kan en webbadress helt i versaler ge en mindre kod än samma adress i gemener.
- Numeriskt: siffrorna 0–9, 10 bitar per 3 siffror
- Alfanumeriskt: 45 tecken, 11 bitar per 2 tecken
- Byte: vilket 8-bitarsvärde som helst, 8 bitar per byte
- Kanji: tecken i Shift JIS med två byte, 13 bitar vardera
Lägesindikatorer och segment
Varje datasekvens börjar med en lägesindikator på 4 bitar och ett teckenantal, vars längd beror på läget och versionen. En kod kan innehålla flera sådana segment, till exempel numeriskt för en lång rad siffror och byte för resten, vilket kan göra resultatet mindre.
Andra indikatorer på 4 bitar signalerar funktioner snarare än teckenuppsättningar: ECI för att ange en teckenkodning, structured append för att dela data över flera koder och FNC1 för GS1 och andra branschspecifika dataformat. En avslutare på fyra nollbitar avslutar data.
- Numeriskt 0001, alfanumeriskt 0010, byte 0100, kanji 1000
- ECI 0111, structured append 0011
- FNC1 första position 0101, andra position 1001
- Avslutare 0000
Byteläge och teckenuppsättningar
Standardens förvalda tolkning av byteläge är ISO-8859-1 (Latin-1), men de flesta generatorer skriver i dag UTF-8 så att bokstäver med accenter, andra skriftsystem och emojis klarar sig. Läsare upptäcker oftast UTF-8 genom att undersöka byten.
Där teckenuppsättningen måste vara entydig kan en ECI-rubrik ange den uttryckligen. Utan en sådan kan en läsare ibland gissa fel och visa förvrängda tecken.