thumb|184px|Ejemplo de Código Aztec

El Código Aztec es un tipo de código inventado y patentado por los estadounidenses Andrew Longacre Jr. y Robert Hussey en 1995. El código fue publicado por la Association for Automatic Identification and Mobility de Estados Unidos en el año 1997. Aunque el código Aztec fue patentado, la patente fue dedicada al dominio público, como ocurrió con otros códigos bidimensionales, por deseo expreso de los inventores. El código Aztec es también publicado como estándar internacional bajo el número ISO/IEC 24778:2008. Nombrado por su semejanza con la vista aérea de una pirámide azteca, el código Aztec usa menos espacio que otros códigos matriciales porque no requiere una "zona tranquila" o de silencio circundante.

Estructura El símbolo se construye sobre una cuadrícula con un patrón de "ojo de buey" en su centro para localizar el código. Los datos son codificados en anillos cuadrados concéntricos alrededor del "ojo" el cual es de 9 × 9 o 13 × 13 píxeles de tamaño y está rodeado de una fila de píxeles que representa los parámetros básicos de codificación, produciendo un "núcleo" cuadrado de 11 × 11 píxeles denominado "Runa Aztec". Los datos se añaden en "capas", cada una conteniendo dos anillos de píxeles, dando símbolos de dos tamaños diferentes: Compacto: Símbolo de 15 x 15 hasta 27 x 27 píxeles, con incrementos en pasos de 4 píxeles en cada dirección. Completo: Símbolo de 19 x 19 hasta 151 x 151 píxeles, incrementos en pasos de 4 píxeles en cada dirección y hasta 6 en cierto casos para permitir la existencia de una cuadrícula de referencia. Las esquinas del núcleo incluyen marcas de orientación, permitiendo que el código se lea si se gira o se refleja. La decodificación comienza en la esquina con tres píxeles negros, y procede en el sentido de las agujas del reloj hasta las esquinas con dos, uno y cero píxeles negros. Los píxeles variables en el núcleo central codifican el tamaño, por lo que no es necesario marcar el límite del código con una "zona tranquila" en blanco, aunque algunos lectores de código de barras requieren una.

El núcleo del código Aztec compacto puede estar rodeado de 1 a 4 capas, produciendo símbolos de 15 × 15 (espacio para 13 dígitos o 12 letras) hasta 27 × 27. El núcleo completo admite hasta 32 capas y 151 × 151 píxeles, que pueden codificar 3832 dígitos, 3067 letras o 1914 bytes de datos. Cualquier parte del símbolo no utilizada para los datos básicos se usa para la corrección de errores Reed-Solomon, y es completamente configurable, entre los límites de 1 palabra de datos, y 3 palabras de verificación. El número recomendado de palabras de verificación es el 23% de la capacidad del símbolo más 3 palabras de código.

El código Aztec se supone que produce códigos legibles con varias tecnologías de impresora. También es adecuado para pantallas de teléfonos celulares y otros dispositivos móviles.

Codificación El proceso de codificación consta de los siguientes pasos: Conversión del mensaje de origen en una cadena de bits. Cálculo del tamaño de símbolo y el mensaje de modo necesarios, lo cual determina el tamaño de la palabra de código Reed-Solomon. Rellenado de bits del mensaje en palabras de código Reed-Solomon. Relleno del mensaje a un límite de palabra de código. Adición de palabras de código de verificación. Disposición del mensaje completo en una espiral alrededor del núcleo.

Todas las conversiones entre cadenas de bits y otras formas se realizan de acuerdo con la convención big-endian (bit más significativo primero).

Capacidad de almacenamiento Según el tamaño y la cantidad de capas, un Código Aztec puede almacenar determinada cantidad de información. La siguiente tabla muestra algunos de los casos posibles, tanto en los casos de códigos compactos como completos. Número de capasTamaño del símboloCapacidad de datos1 (compacto)15x1513 dígitos, 12 letras, 6 bytes1 (completo)19x1918 dígitos, 15 letras, 8 bytes2 (compacto)19x1940 dígitos, 33 letras, 19 bytes2 (completo)23x2349 dígitos, 40 letras, 24 bytes3 (compacto)23x2370 dígitos, 57 letras, 33 bytes1057x57516 dígitos, 414 letras, 256 bytes20101x1011653 dígitos, 1324 letras, 824 bytes32151x1513832 dígitos, 3067 letras, 1914 bytes

Conjunto de caracteres Cada símbolo del Código Aztec consta de valores de 8 bits (1 byte, desde 0 hasta 255 en base decimal) los cuales son codificables. Por defecto, los códigos desde el 0 hasta el 127 se interpretan como caracteres ASCII y desde el 128 hasta el 255 son caracteres del Alfabeto Latino N°1 establecidos en el estándar ISO 8859-1. Los bytes se traducen en códigos de 4 y 5 bits, con códigos de desplazamiento (shift, en idioma inglés) y de retención (latch) para cambiar modos. Los valores de byte no disponibles de esta manera pueden codificarse usando un código general de "desplazamiento binario", el cual es seguido por una longitud y un número de códigos de 8 bits. Además se codifican dos caracteres que no son de datos: FNC1 (Function Code One, Código de función 1 en castellano), un símbolo usado para identificar y separar los campos para identificadores de aplicación de longitud variable. ECI, un símbolo de escape seguido de un código de 6 dígitos de protocolo Extended Channel Interpretation (Interpretación de Canal Extendido, en castellano) que especifica el conjunto de caracteres utilizado para interpretar los bytes siguientes.

Cada uno de los bytes que conforma el símbolo se codifica en uno de 5 conjuntos de códigos posibles: Superior (valor inicial por defecto), Inferior, Mixto, Puntuación y Dígito. Los dos primeros conjuntos se refieren a caracteres alfabéticos en mayúsculas y minúsculas, respectivamente; el conjunto mixto contiene una mezcla de caracteres de control y de puntuación; el conjunto de puntuación contiene caracteres de puntuación y sus combinaciones y el conjunto de dígitos contiene números y algunos caracteres de puntuación. Para cambiar entre los conjuntos de códigos, un código de desplazamiento afecta solamente a la interpretación del código siguiente, mientras que un código de retención afecta a todos los códigos siguientes. La mayoría de los modos utiliza códigos de 5 bits, pero el modo Dígito utiliza códigos de 4 bits. La siguiente tabla describe la codificación de caracteres con el código Aztec al como se describe en el estándar ISO/IEC 24778:2008.

+ Codificación de caracteres en el Código Aztec Código Modo Código Modo Superior (S) Inferior (L) Mixto (M) Puntuación (P) Dígito (D) Superior (S) Inferior (I) Mixto (M) Puntuación (P) 0 P/S P/S P/S FLG(n) P/S 16 O o ^\ + 1 SP SP SP CR SP 17 P p ^] , 2 A a ^A CR LF 0 18 Q q ^^ - 3 B b ^B . SP 1 19 R r ^_ . 4 C c ^C , SP 2 20 S s @ / 5 D d ^D : SP 3 21 T t \ : 6 E e ^E ! 4 22 U u ^ ; 7 F f ^F " 5 23 V v _ < 8 G g ^G # 6 24 W w ` = 9 H h ^H $ 7 25 X x | > 10 I i ^I % 8 26 Y y ~ ? 11 J j ^J & 9 27 Z z ^? [ 12 K k ^K ' , 28 L/L U/S L/L ] 13 L l ^L ( . 29 M/L M/L U/L { 14 M m ^M ) U/L 30 D/L D/L P/L } 15 N n ^[ * U/S 31 B/S B/S B/S U/L Donde: x/S = Conjunto "x" de caracteres desplazado que solo afecta a un carácter. "x" representa cualquiera de los conjuntos de caracteres (U, L, M, P y D) x/L = Conjunto "x" de caracteres retenido que afecta a los siguientes caracteres. B/S = Desplazamiento a binario de 8 bits.

B/S (binary shift, desplazamiento binario) es seguido por una longitud de 5 bits. Si no es cero, esto indica que se siguen los códigos 1 a 31 son de 8 bits. Si es cero, 11 bits de longitud adicional codifican el número de bytes siguientes menos el código 31. Al final de la secuencia binaria, se reanuda el modo anterior.

FLG(n) es una "bandera" donde n es un valor de 3 bits. N = 0 codifica a FNC1. Si n va de 1 a 6, es seguido por los dígitos del 1 al 6 (en modo de dígito) que son rellenados con ceros para hacer un identificador de 6-bit ECI. El valor n = 7 está reservado y actualmente es ilegal.

Mensaje de modo El mensaje de modo es una cadena de bits que rodea el patrón de búsqueda del código y que Incluye bits que indican el tamaño del símbolo, la longitud del mensaje, y bits que proporcionan el mensaje de modo con redundancia de errores. El mensaje de modo codifica el número de capas (L capas codificadas como el entero L-1), y el número de palabras de código de datos (D palabras de código, codificadas como el entero D-1) en el mensaje. Todas las palabras clave restantes se utilizan como palabras clave de verificación. Para los códigos Aztec compactos, el número de capas se codifica como un valor de 2 bits y el número de palabras de código de datos como un valor de 6 bits, dando como resultado una palabra de modo de 8 bits. Para los códigos Aztec completos, el número de capas se codifica en 5 bits, y el número de palabras de código de datos se codifica en 11 bits, haciendo una palabra de modo de 16 bits.

La palabra de modo se divide en 2 o 4 palabras de código de 4 bits en un campo finito de 16 bits, y se añaden 5 o 6 palabras de verificación de Reed-Solomon, haciendo un mensaje de modo de 28 o 40 bits, que está "envuelto" en una capa de 1 píxel alrededor del núcleo. Debido a que una capa L + 1 del código Aztec compacto puede contener más datos que un código completo de capa L, los códigos completos con menos de 4 capas se utilizan raramente. Lo más importante es que el número de capas determina el tamaño de las palabras clave Reed-Solomon utilizadas el cual es función de los polinomios de error, detallados en la tabla que sigue: + Polinomios de campo finito del Código Aztec Palabra de Código (bits) Campo finito (bits) Polinomio Capas 4 16 x4+x+1 Mensaje de modo 6 64 x6+x+1 1 a 2 8 256 x8+x5+x3+x2+1 3 a 8 10 1024 x10+x3+1 9 a 22 12 4096 x12+x6+x5+x3+1 23 a 32 El tamaño de la palabra de código es el número par más pequeño que asegura que el número total de palabras de código en el símbolo es menor que el límite de que puede ser corregido por un código Reed-Solomon. Como se mencionó anteriormente, se recomienda que al menos el 23% de las palabras de código disponibles, más 3, estén reservados para la corrección, y se elija un tamaño de símbolo tal que el mensaje se ajuste al espacio disponible.

Relleno de bits Los bits de datos se dividen en palabras de código, correspondiendo el primer bit al coeficiente más significativo. Al hacer esto, se evitan las palabras de código de todos-ceros y de todos-unos mediante el relleno de bits: si los primeros bits de una palabra de código tienen el mismo valor, se inserta un bit adicional con el valor complementario en el flujo de datos. Esta inserción tiene lugar independientemente de si el último bit de la palabra de código hubiera tenido o no el mismo valor. Esto sólo se aplica a cadenas de bits al principio de una palabra de código. Se permiten cadenas más largas de bits idénticos siempre y cuando eludan un límite de palabra de código.

Cuando se descodifica, se puede suponer que una palabra de código de todos-ceros o de todos-unos es un borrado y se corrige más eficientemente que un error general. Este proceso hace que el mensaje sea más largo y el número final de palabras de código de datos grabadas en el mensaje de modo no se conoce hasta que se complete. En casos raros, puede ser necesario saltar al siguiente símbolo más grande y comenzar el proceso de nuevo para mantener la fracción mínima de palabras de verificación.

Relleno