Código Azteca

El Código Azteca es un código matricial inventado por Andrew Longacre, Jr. y Robert Hussey en 1995. El código fue publicado por AIM, Inc. en 1997. Aunque el Código Azteca fue patentado, ese La patente se hizo oficialmente de dominio público. El Código Azteca también está publicado como estándar ISO/IEC 24778:2008. El código Aztec, que lleva el nombre del parecido del patrón del buscador central con una pirámide azteca, tiene el potencial de utilizar menos espacio que otros códigos de barras matriciales porque no requiere una "zona tranquila" en blanco a su alrededor.
Estructura
El símbolo está construido sobre una cuadrícula cuadrada con un patrón de diana en el centro para ubicar el código. Los datos se codifican en anillos cuadrados concéntricos alrededor del patrón de diana. La diana central tiene 9×9 o 13×13 píxeles, y una fila de píxeles alrededor codifica los parámetros de codificación básicos, produciendo un "núcleo" de 11×11 o 15×15 cuadrados. Los datos se agregan en "capas", cada una de las cuales contiene dos anillos de píxeles, lo que da tamaños totales de 15 × 15, 19 × 19, 23 × 23, etc.
Las esquinas del núcleo incluyen marcas de orientación, lo que permite leer el código si se gira o se refleja. La decodificación comienza en la esquina con tres píxeles negros y continúa 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 silenciosa" en blanco, aunque algunos lectores de códigos de barras sí lo requieren.
El núcleo del código azteca compacto (escote diagonal ascendente rojo), mostrando el ojo central del toro, las cuatro marcas de orientación (azul diagonal cross-hatching), y espacio para 28 bits (7 bits por lado) de la información de codificación (escotilla horizontal verde). El primer anillo de datos comienza fuera de eso (desciende gris embravecido diagonal).
El núcleo del código azteca completo. 40 bits están disponibles entre las marcas de orientación para parámetros de codificación.
Los datos del mensaje se colocan en un patrón espiral alrededor del núcleo. El mensaje de modo comienza "01011100", indicando 012+1 = 2 capas, y 0111002+1 = 29 palabras clave de datos (de 6 bits cada uno).
El núcleo compacto del código azteca puede estar rodeado por de 1 a 4 capas, produciendo símbolos desde 15×15 (espacio para 13 dígitos o 12 letras) hasta 27×27. Además, hay una "runa" especial de 11 × 11; que codifica un byte de información. El núcleo completo admite hasta 32 capas, 151 × 151 píxeles, que pueden codificar 3832 dígitos, 3067 letras o 1914 bytes de datos.
Cualquier parte del símbolo que no se use para los datos básicos se usa para la corrección de errores de Reed-Solomon, y la división es completamente configurable, entre límites de 1 palabra de datos y 3 palabras de verificación. La cantidad recomendada de palabras de verificación es el 23 % de la capacidad de símbolos más 3 palabras de código.
Se supone que Aztec Code produce códigos legibles con varias tecnologías de impresión. También es muy adecuado para pantallas de teléfonos móviles y otros dispositivos móviles.
Codificación
El proceso de codificación consta de los siguientes pasos:
- Convertir el mensaje fuente en una cadena de bits
- Computing the necessary symbol size and mode message, which determines the Reed–Solomon codeword size
- Profundizar el mensaje en las palabras clave Reed–Solomon
- Padding el mensaje a un límite de la palabra clave
- Appendiendo las palabras clave del cheque
- Arreglando el mensaje completo en una espiral alrededor del núcleo
Toda la conversión entre cadenas de bits y otras formas se realiza de acuerdo con la convención de Big-endian (más significativamente primera).
Conjunto de caracteres
Todos los valores de 8 bits se pueden codificar, además de dos códigos de escape:
- FNC1, un símbolo de escape utilizado para marcar la presencia de un identificador de aplicación, de la misma manera que en la norma GS1-128.
- ECI, un escape seguido de un código de interpretación de canales extendidos de 6 dígitos, que especifica el carácter utilizado para interpretar los bytes siguientes.
De forma predeterminada, los códigos 0–127 se interpretan según ANSI X3.4 (ASCII) y 128–255 se interpretan según ISO/IEC 8859-1: Alfabeto latino n.º 1. Esto corresponde a ECI 000003.
Los bytes se traducen a códigos de 4 y 5 bits, según el modo de decodificación actual, con códigos de desplazamiento y bloqueo para cambiar de modo. Los valores de bytes que no están disponibles de esta manera pueden codificarse utilizando un "desplazamiento binario" código, al que le sigue una longitud y un número de códigos de 8 bits.
Para cambiar los modos, un cambio afecta sólo la interpretación del código único siguiente, mientras que un latch afecta a todos los siguientes códigos. La mayoría de los modos usan códigos de 5 bits, pero el modo Digit utiliza códigos de 4 bits.
| Código | Modo | Código | Modo | ||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|
| Alto | Bajo | Mezcla | Punct | Digit | Alto | Bajo | Mezcla | Punct | |||
| 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 | ¿Qué? | c) | |
| 8 | G | g | ^ G | # | 6 | 24 | W | w | ` | = | |
| 9 | H | h | ^ H | $ | 7 | 25 | X | x | Silencio | ■ | |
| 10 | I | i | ^ I | % | 8 | 26 | Y | Sí. | ~ | ? | |
| 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 | |
- El modo inicial es "Upper"
- x/S = Cambio a modo x para un personaje; B/S = cambio a binario de 8 bits
- x/L = Cierre al modo x para caracteres siguientes
- Códigos Punct 2-5 codifican dos bytes cada uno
- La tabla enumera los caracteres ASCII, pero son los valores byte los que están codificados, incluso si un conjunto de caracteres no ASCII está en uso
B/S (desplazamiento binario) va seguido de una longitud de 5 bits. Si es distinto de cero, esto indica que le siguen entre 1 y 31 bytes de 8 bits. Si es cero, 11 bits de longitud adicionales codifican el número de bytes siguientes menos 31. (Tenga en cuenta que para 32 a 62 bytes, dos secuencias de desplazamiento de bytes de 5 bits son más compactas que una de 11 bits). Al final de la secuencia binaria, Se reanuda el modo anterior.
FLG(n) es seguido por un 3-bit n valor. n=0 codifica FNC1. n=1–6 es seguido por 1–6 dígitos (en modo dígitos) que son de cero para hacer un identificador ECI de 6 bits. n=7 está reservada y actualmente ilegal.
Modo mensaje
El mensaje de modo codifica el número de capas (L capas codificadas como el número entero L-1) y el número de palabras de código de datos (D palabras en código, codificadas como el número entero D-1) en el mensaje. Todas las palabras de código restantes se utilizan como palabras de código de verificación.
Para códigos aztecas 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, lo que da como resultado una palabra en modo de 8 bits. Para códigos aztecas 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, lo que genera una palabra en modo de 16 bits.
La palabra de modo se divide en 2 o 4 palabras de código de 4 bits en GF(16) y se añaden 5 o 6 palabras de verificación Reed-Solomon, lo que genera un mensaje de modo de 28 o 40 bits, que está envuelto en un Capa de 1 píxel alrededor del núcleo.
Debido a que un código Aztec compacto de capa L+1 puede contener más datos que un código completo de capa L, rara vez se utilizan códigos completos con menos de 4 capas.
Lo más importante es que el número de capas determina el tamaño de las palabras en clave Reed-Solomon utilizadas. Esto varía de 6 a 12 bits:
| Bits | Campo | Polynomial | Usado para |
|---|---|---|---|
| 4 | GF(16) | x4+x+ 1 | Modo de mensaje |
| 6 | GF(64) | x6+x+ 1 | 1–2 capas |
| 8 | GF(256) | x8+x5+x3+x2+ 1 | 3-8 capas |
| 10 | GF(1024) | x10+x3+ 1 | 9–22 capas |
| 12 | GF(4096) | x12+x6+x5+x3+ 1 | 23–32 capas |
El tamaño de la palabra de código b es el número par más pequeño que garantiza que el número total de palabras de código en el símbolo sea menor que el límite de 2b sup>−1 que puede corregirse mediante un código Reed-Solomon.
Como se mencionó anteriormente, se recomienda que al menos el 23% de las palabras en clave disponibles, más 3, estén reservadas para corrección, y se elija un tamaño de símbolo tal que el mensaje quepa en el espacio disponible.
Un poco de relleno
Los bits de datos se dividen en palabras clave, correspondiendo el primer bit al coeficiente más significativo. Al hacer esto, las palabras de código de todo ceros y todos unos se evitan mediante el relleno de bits: si los primeros b−1 bits de una palabra de código tienen el mismo valor, se agrega un bit adicional con el valor complementario. se inserta en el flujo de datos. Esta inserción se produce independientemente de que el último bit de la palabra de código hubiera tenido el mismo valor o no.
Además, tenga en cuenta que esto solo se aplica a cadenas de b-1 bits al principio de una palabra de código. Se permiten cadenas más largas de bits idénticos siempre que se encuentren a ambos lados de un límite de palabra de código.
Al decodificar, una palabra de código de todo cero o todo uno puede asumirse como un borrado y corregirse de manera más eficiente que un error general.
Este proceso alarga el mensaje y el número final de palabras de código de datos registradas en el mensaje de modo no se conoce hasta que se completa. En casos excepcionales, puede ser necesario saltar al siguiente símbolo más grande y comenzar el proceso nuevamente para mantener la fracción mínima de palabras de verificación.
Relleno
Después del relleno de bits, la cadena de datos se rellena hasta el siguiente límite de palabra de código agregando 1 bit. Si esto da como resultado una palabra de código de todos unos, el último bit se cambia a cero (y el decodificador lo ignorará como un bit de relleno de bits). Al decodificar, los bits de relleno pueden decodificarse como códigos de desplazamiento y enclavamiento, pero eso no afectará el contenido del mensaje. El lector debe aceptar e ignorar un código parcial al final del mensaje, siempre que sea todo unos.
Además, si el número total de bits de datos disponibles en el símbolo no es un múltiplo del tamaño de la palabra de código, la cadena de datos tiene como prefijo un número apropiado de 0 bits para ocupar el espacio adicional. Estos bits no se incluyen en el cálculo de la palabra de verificación.
Compruebe las palabras clave
Tanto la palabra de modo como los datos deben tener palabras de verificación adjuntas para completar el espacio disponible. Esto se calcula agregando K palabras de verificación de modo que todo el mensaje sea un múltiplo del polinomio de Reed-Solomon (x−2)(x −4)...(x−2K).
Tenga en cuenta que las palabras de verificación no están sujetas a relleno de bits y pueden ser solo ceros o todos uno. Por tanto, no es posible detectar el borrado de una palabra de verificación.
Diseñar el mensaje

Un símbolo de código azteca completo tiene, además del núcleo, una "cuadrícula de referencia" de píxeles alternos en blanco y negro que ocupan cada 16ª fila y columna. Estos píxeles conocidos permiten al lector mantener la alineación con la cuadrícula de píxeles sobre símbolos grandes. Para hasta 4 capas (31×31 píxeles), esto consiste únicamente en líneas individuales que se extienden hacia afuera desde el núcleo, continuando el patrón alterno. Sin embargo, dentro de la quinta capa, se insertan filas y columnas adicionales de píxeles alternos a ±16 píxeles del centro, por lo que la quinta capa está ubicada a ±17 y ±18 píxeles del centro, y un símbolo de cinco capas mide 37×37 píxeles..
Del mismo modo, se insertan filas y columnas adicionales de la cuadrícula de referencia a ±32 píxeles del centro, lo que genera un símbolo de 12 capas de 67×67 píxeles. En este caso, la capa 12 ocupa anillos ±31 y ±33 píxeles desde el centro. El patrón continúa indefinidamente hacia afuera, con bloques de datos de 15 píxeles separados por filas y columnas de la cuadrícula de referencia.
Una forma de construir el símbolo es eliminar la cuadrícula de referencia por completo y comenzar con un núcleo de 14×14 píxeles centrado en un cuadrado blanco de 2×2 píxeles. Luego divídalo en bloques de 15×15 píxeles e inserte la cuadrícula de referencia entre ellos.
El mensaje de modo comienza en la esquina superior izquierda del núcleo y se envuelve alrededor de él girando el reloj en una capa de 1 bit de espesor. Comienza con la parte más significativa del número de capas y termina con las palabras de verificación. Para un código azteca compacto, se divide en cuatro piezas de 7 bits para dejar espacio para las marcas de orientación. Para un código azteca completo, se divide en cuatro piezas de 10 bits, y esas piezas se dividen en la mitad por la rejilla de referencia.
En algunos casos, la capacidad total de la matriz no se divide uniformemente entre las palabras de código completas. En tales casos, el mensaje principal se rellena con 0 bits al principio. Estos bits no se incluyen en el cálculo de la palabra de verificación y deben omitirse durante la decodificación. La capacidad total de la matriz para un símbolo completo se puede calcular como (112+16*L)*L para un código azteca completo y (88+16*L)*L para un código azteca compacto, donde L es el tamaño del símbolo en capas.. A modo de ejemplo, la capacidad total de la matriz de un código azteca compacto de 1 capa es de 104 bits. Dado que las palabras de código son de seis bits, esto da 17 palabras de código y dos bits adicionales. Se anteponen dos bits cero al mensaje como relleno y deben omitirse durante la decodificación.
El mensaje principal acolchado comienza en la parte superior izquierda exterior de todo el símbolo y gira en espiral alrededor de él en el sentido contrario a las agujas del reloj en una capa de 2 bits de espesor, terminando directamente encima de la esquina superior izquierda del núcleo. Esto coloca las palabras de datos repletas de bits, para las cuales se pueden detectar borrados, en las capas más externas del símbolo, que es más propenso a borrarse. Las palabras de verificación se almacenan más cerca del núcleo. La última palabra de verificación termina justo encima de la esquina superior izquierda de la diana.
Con el núcleo en su orientación estándar, el primer bit de la primera palabra de datos se coloca en la esquina superior izquierda, con bits adicionales colocados en una columna de 2 bits de ancho de izquierda a derecha y de arriba a abajo. abajo. Esto continúa hasta 2 filas desde la parte inferior del símbolo cuando el patrón gira 90 grados en sentido antihorario y continúa en una fila de 2 bits de altura, de abajo hacia arriba y de izquierda a derecha. Después de 4 cuartos de capa del mismo tamaño, la espiral continúa con la esquina superior izquierda de la siguiente capa interna y finalmente termina un píxel por encima de la esquina superior izquierda del núcleo.
Finalmente, 1 bit se imprime como cuadrados negros y 0 bits se imprimen como cuadrados blancos.
Uso

Transporte
Los códigos aztecas se utilizan ampliamente para la emisión de billetes de transporte.
El Código Azteca ha sido seleccionado por la industria aérea (estándar BCBP de IATA) para tarjetas de embarque electrónicas. Varias aerolíneas envían códigos Aztec a los pasajeros; teléfonos móviles que actúan como tarjetas de embarque. Estos suelen estar integrados con aplicaciones en los teléfonos de los pasajeros. teléfonos, incluido Apple Wallet.
Los códigos aztecas también se utilizan en el ferrocarril, incluso en el Metro de Teherán, el British National Rail, Eurostar, Deutsche Bahn, TCDD Taşımacılık, DSB, SJ, České dráhy, Slovak Railways, Slaven Railways, Croatian Railways, Trenitalia, Nederlandse Spoorwegen, Pasažieru. vilciens, PKP Intercity, VR Group, National Rail, Via Rail, Swiss Federal Railways, SNCB y SNCF para billetes vendidos online e impresos por los clientes o mostrados en las pantallas de los teléfonos móviles. El personal del tren o en el torniquete escanea el código azteca mediante un escáner portátil para validar el billete.
Gubernamental
Los documentos de matriculación de automóviles en Polonia llevan un resumen, comprimido mediante el algoritmo NRV2E, codificado como Código Azteca. Se están realizando trabajos para permitir que las compañías de seguros de automóviles completen automáticamente la información relevante basándose en fotografías digitales del documento como primer paso para cerrar un nuevo contrato de seguro.
El Servicio Federal de Impuestos de Rusia codifica la información de pago en los avisos de impuestos como Código Azteca.
Comercial
Muchos proyectos de ley en Canadá también utilizan esta tecnología, incluidos EastLink, Shaw Cable y Bell Aliant.