Los cuatro modos principales
Cada modo cambia variedad de caracteres por densidad. El modo numérico solo maneja dígitos, pero empaqueta tres en 10 bits, mientras que el modo de bytes maneja cualquier byte pero gasta 8 bits en cada uno.
El modo alfanumérico abarca un conjunto de 45 caracteres: los dígitos 0–9, las letras mayúsculas A–Z, el espacio y los símbolos $ % * + - . / y los dos puntos. Las letras minúsculas no están en el conjunto, y por eso una URL toda en mayúsculas puede dar un código más pequeño que la misma URL en minúsculas.
- Numérico: dígitos 0–9, 10 bits por cada 3 dígitos
- Alfanumérico: 45 caracteres, 11 bits por cada 2 caracteres
- Bytes: cualquier valor de 8 bits, 8 bits por byte
- Kanji: caracteres de doble byte Shift JIS, 13 bits cada uno
Indicadores de modo y segmentos
Cada tramo de datos empieza con un indicador de modo de 4 bits y un recuento de caracteres, cuya longitud depende del modo y de la versión. Un código puede contener varios segmentos así, por ejemplo numérico para una tira larga de dígitos y de bytes para el resto, lo que puede hacer el resultado más pequeño.
Otros indicadores de 4 bits señalan funciones y no juegos de caracteres: ECI para declarar una codificación de caracteres, structured append para repartir los datos entre varios códigos y FNC1 para GS1 y otros formatos de datos de la industria. Un terminador de cuatro bits a cero pone fin a los datos.
- Numérico 0001, alfanumérico 0010, bytes 0100, kanji 1000
- ECI 0111, structured append 0011
- FNC1 en primera posición 0101, en segunda posición 1001
- Terminador 0000
Modo de bytes y juegos de caracteres
La interpretación por defecto del estándar para el modo de bytes es ISO-8859-1 (Latin-1), pero la mayoría de los generadores actuales escriben UTF-8 para que sobrevivan las letras con acentos, otros alfabetos y los emojis. Los lectores suelen detectar UTF-8 examinando los bytes.
Cuando el juego de caracteres tiene que ser inequívoco, una cabecera ECI puede declararlo de forma explícita. Sin ella, un lector puede equivocarse de vez en cuando al adivinar y mostrar caracteres ininteligibles.