INTRODUCCION
Los códigos de barras son un sistema de codificación de datos que emplea símbolos geométricos para representar diferentes tipos de datos, los cuales pueden ser leídos en forma automatizada por un escáner óptico u otro dispositivo de decodificación. Existen diversos tipos de códigos de barras: unidimensionales y bidimensionales. Los códigos de barras unidimensionales están compuestos por barras paralelas con diferentes anchos, altura y espaciados. Este tipo convencional de código de barras se conoce también como código lineal ya que posee información que puede ser leída horizontalmente en una sola dirección analizando el ancho y el espacio entre las barras 1. Existen diversos formatos y generaciones de códigos de barras lineales que difieren según las áreas de aplicación y el tipo de caracteres codificables; estos códigos se diferencian de los códigos de barras bidimensionales por su menor capacidad para almacenar caracteres alfanuméricos 2. En la Figura 1 se muestra un código de barras lineal formato EAN (European Article Numbering) utilizado en la mayoría de los productos comerciales europeos y que permite codificar hasta 13 dígitos.
Los códigos bidimensionales QR (Quick Response) o códigos de respuesta rápida son los más populares y ampliamente usados en distintos campos 3. De acuerdo con la empresa denso Wave, los inventores del código QR, hay seis tipos diferentes de estos códigos: Código QR Modelo 1 y 2; Código Micro QR; Código iQR; Código SQRC y Código Frame QR4.
Este artículo se basará específicamente en el Código QR Modelo 2; este tipo de código, a diferencia de los códigos de barra lineales, permiten guardar datos codificados que pueden ser leídos tanto en dirección vertical como horizontal 1. Es una tecnología de identificación automática que fue inicialmente desarrollada por la industria automotriz con la finalidad de identificar de manera rápida las autopartes durante el proceso de fabricación de vehículos y eliminar de esta manera el potencial error humano. Los códigos QR fueron desarrollados en el año 1994 por la corporación japonesa Denso-Wave, una filial de Toyota, la cual posee los derechos de patente sobre los mismos, pero dado que su formato es libre, está permitido el uso de la simbología sin franquicia.
Funcionalidad: A partir de su creación los códigos QR comenzaron a ganar una amplia popularidad y tener altos niveles de aceptación gracias a la gran difusión de los teléfonos inteligentes. Independientemente de su alta capacidad para almacenar datos, lo más importante de estos códigos es la posibilidad de brindar al usuario acceso de manera rápida (por eso su nombre de códigos de respuesta rápida) a todo tipo de información disponible en un medio online eliminando de esta forma cualquier limitación de tiempo y espacio 5. Los códigos QR son una nueva tecnología que se está empleando en áreas de la educación conocida como realidad aumentada. La realidad aumentada integra el mundo real con el mundo digital, permitiendo incorporar la información virtual a la información analógica o física del mundo real al actuar como un puente analógico-digital. Mediante esta tecnología los usuarios pueden interactuar en tiempo real con el fin de mejorar su experiencia pudiendo pasar de un contenido educativo estático a un contenido dinámico como por ejemplo un video.
Los códigos QR, también conocidos como códigos matriciales, son símbolos de forma cuadrada compuestos por pequeños elementos denominados módulos también de forma cuadrada que forman una matriz similar a un crucigrama 6. En el caso de tratarse de un código QR estático, una vez codificados los datos en el símbolo éstos no podrán ser modificados, mientras que en los denominados códigos QR dinámicos, los datos y el contenido pueden ser editados las veces que el usuario lo desee.
La matriz de un código QR es una zona de almacenamiento de datos que contiene un grupo de elementos modulares organizados en filas y columnas denominado Matriz de Datos (Data Matrix). La Matriz de Datos es una estructura bidimensional que utiliza dos índices para acceder a cada elemento individual (módulo): un índice correspondiente a las filas y el otro a las columnas, así cada módulo dentro de la matriz tiene una posición que se identifica mediante esos dos índices. Es importante recordar que el recuento de bits en un índice comienza en 0, así en el caso de los bytes, que poseen 8 bits, el primer bit estaría ubicado en la posición 0 y el último bit en la posición 7 7. En el caso de una matriz bidimensional con dos índices (filas y columnas), éstos también inician desde cero (0); por lo tanto, en un código QR Versión 3 que posee una matriz compuesta de 29 filas y 29 columnas la primera fila comienza a contar en cero (0) y termina en el tamaño de las filas menos 1 (fila-1), en este caso 28 (29-1) (Figura 2). El mismo concepto se aplica para las columnas que en este ejemplo empiezan en cero (0) y terminan en 28 (29 - 1).
Versiones y tamaños del símbolo de un código QR: La Organización Internacional de Normalización o Estandarización (organismo encargado de la creación de estándares internacionales, conocida por su acrónimo en inglés ISO) en su tercera edición ISO/IEC 18004:2015 da cuenta de la existencia de cuarenta tamaños diferentes de símbolos QR, los cuales son referidos como Versión 1, Versión 2 y así sucesivamente hasta la Versión 40 8. La versión indica el tamaño del código o sea la cantidad de módulos que lo componen, los cuales se expresan en cantidad de módulos de ancho (columnas) por cantidad de módulos de alto (filas). El tamaño de los códigos QR es fijo y pueden ir desde 21 filas y columnas en la Versión 1 (21 X 21 módulos) hasta 177 filas y columnas para la Versión 40. Los índices correspondientes a las filas y las columnas van aumentando de a cuatro módulos a medida que se pasa de una versión a la siguiente así, por ejemplo, en la Versión 3 tendríamos 29 X 29 módulos, en la Versión 4: 33 X 33, en la Versión 5: 37 X 37, en la Versión 6: 41 X 41, en la Versión 7: 45 X 45 y así sucesivamente llegar a la Versión 40 con 177 X 177 módulos equivalente a un total de 31329 módulos) 9. A cada una de estas configuraciones se las denomina Versión (Figura 3).
Cuantas más filas / columnas (módulos) más datos puede almacenar el código, por lo tanto, la versión de un símbolo QR estará determinada por la cantidad de datos proporcionados, el tipo de caracteres y el nivel de corrección de errores. En base a estos datos la interfaz de programación de aplicaciones (generador de códigos QR) determinará qué versión usar y por ende la cantidad de módulos al momento de generar el símbolo.
La unidad elemental: La representación bidimensional de un código QR se denomina símbolo. El símbolo QR está compuesto por una combinación de elementos cuadrados de color claro (blanco) y oscuro (negro) distribuidos en una matriz y denominados módulos los cuales usan la profundidad de color de cada uno para representar los datos codificados 10. El uso de estos dos colores asegura un alto contraste entre los módulos y el fondo permitiendo su mejor lectura y, aunque originalmente se diseñaron en blanco y negro, se puede utilizar cualquier color siempre que se conserve el contraste entre los módulos para así poder ser detectados durante el proceso de binarización 11. Las diferencias entre el color y el brillo de los módulos permiten la conversión al sistema binario (binarización) donde los módulos claros corresponden al símbolo cero (0) y los oscuros al uno (1) (Figura 4) 12. El módulo es la unidad elemental y su cantidad dentro de un símbolo QR va a depender de su versión.
Estructura de un código QR: Las especificaciones técnicas para la generación de los códigos QR siguen los estándares internacionales creados por la Organización Internacional de Normalización o Estandarización. Para el caso de los códigos QR la versión ISO/IEC 18004:2015 define todos los requisitos para la simbología conocida como Código QR, en la cual se especifican las características del símbolo, los métodos de codificación de caracteres de datos, los formatos del símbolo, las dimensiones, las reglas de corrección de errores, el algoritmo de decodificación de referencia y otros elementos. De acuerdo con dichos estándares cada símbolo del Código QR debe estar construido con módulos cuadrados dispuestos en una matriz cuadrada regular. La matriz está compuesta de tres partes, cada una con una finalidad específica: un área de gráficos donde se encuentran los Patrones de función, una Región de codificación, y una Zona silenciosa o de amortiguamiento que rodea los cuatro lados del símbolo 8.
Patrones de función: Los patrones de función se caracterizan porque no codifican datos, pero son parte importante de los componentes del código QR ya que ayudan en la decodificación y a definir la localización exacta del símbolo, su tamaño, su orientación e identificación de sus características 8,13. Los patrones de función son cuatro: Patrones de posicionamiento, Patrón de alineación, Patrones de temporización y Separadores.
Patrón o cuadro de posicionamiento: Estos patrones de posicionamiento son tres, de idéntica estructura y se hallan ubicados en tres esquinas del símbolo QR (superior izquierda y derecha e inferior izquierda) (Figura 5). Deben tener la misma proporción de módulos (píxeles) claros y oscuros cuando se cruzan con una línea en cualquier ángulo, para que se puedan detectar fácilmente símbolos de códigos rotados o invertidos. Su función es permitir la correcta decodificación y lectura del símbolo de manera omnidireccional en 360º (en cualquier dirección a alta velocidad). Cada cuadro de posicionamiento está compuesto por una matriz central de 3 módulos de ancho por 3 módulos de alto de color negro, rodeados por una corona de módulos blancos y otra más externa de módulos negros (ambas de un módulo de espesor) que juntos generan un cuadro de 7 módulos de lado 14. Esta estructura de tres cuadrados concéntricos superpuestos con una relación 1:1:3:1:1 es la que permite al software decodificador determinar la correcta orientación, tamaño, posición e inclinación del símbolo QR independientemente del ángulo de escaneo 8.
Patrón o cuadro de alineación: Su función es ayudar al software decodificador a detectar la posición del símbolo y permitir la corrección de cualquier distorsión durante su lectura como cuando está impreso en una superficie curva o se escanea en ángulo o al revés 13. La cantidad de estos patrones depende de la versión del código QR; la versión 1 no posee patrón de alineación, mientras que la versión 2 contiene un solo patrón y a medida que pasamos a versiones superiores y aumenta el tamaño del código también aumenta la cantidad de patrones de alineación 6. El patrón está compuesto al igual que los patrones de posicionamiento por tres cuadrados concéntricos superpuestos: un único módulo oscuro en el centro rodeado por una corona de 3 por 3 módulos blancos y una tercera más externa de 5 por 5 módulos negros, estos dos últimos de un módulo de espesor (Figura 6).
Patrones o cuadros de temporización: Los patrones de temporización son dos: uno horizontal y otro vertical, ubicados entre los separadores del código QR, adoptando una forma de letra ele invertida que conecta con los tres patrones de posicionamiento. Cada temporizador se halla compuesto por una alternancia de módulos claros y oscuros (ceros y unos), comenzando y terminando siempre con un módulo oscuro (Figura 7) 8. El número de módulos está en relación directa con la versión del código, así cuanto mayor sea la versión mayor será la cantidad de módulos. En la Figura 7 se muestran dos temporizadores de 13 módulos cada uno de un código versión 3. La principal función de estos patrones de función es permitir al software decodificador identificar la coordenada central de cada módulo del código QR y corregirlas en aquellos casos en que el símbolo presente alguna distorsión o daño. Son útiles además para determinar la densidad del código y el área de información de la versión. El patrón de temporización horizontal se halla ubicado en la fila 6 entre los separadores y los patrones de posicionamiento superior, mientras que el patrón de temporización vertical está ubicado en la columna 6 entre los separadores y los patrones de posicionamiento del lado izquierdo del símbolo; en ambos casos hay que tener en cuenta que las filas y columnas inician en el cero (0).
Separadores: Forman parte de los patrones de función; son tres en forma de letra ele en distintas posiciones y se usan para separar los patrones de posicionamiento del resto de los datos del código y así mejorar la capacidad de reconocimiento. Los separadores son de color claro (blanco), tienen un ancho de 1 módulo y una longitud de 8 módulos (totalizando 15 módulos), se hallan ubicados en tres posiciones: superior e inferior izquierda y superior derecha (Figura 8) 15,16.
Región de codificación: La región de codificación es donde se codifican los datos originales (no está ocupada por los patrones de función) distribuidos en cuatro secciones: área de los datos (los datos brutos), área de redundancia, sector para la información del formato y un sector para la información de la versión.
Área de datos: Los datos en el código QR son codificados en los números binarios 0 y 1 (módulos claros y oscuros) sobre la base de los denominados códigos de Reed-Solomon 3,17. Un código QR permite codificar deferentes tipos de datos utilizando cuatro modos estandarizados: Modo numérico (codifica 10 cifras del sistema de numeración decimal que van desde del cero (0) al nueve (9); Modo alfanumérico (codifica datos de un conjunto de 45 caracteres: 10 dígitos numéricos del cero al nueve; 26 caracteres alfabéticos para letras mayúsculas de la A hasta la Z (este modo no permite codificar letras minúsculas) y 9 símbolos correspondientes a: espacio [SP]; pesos [$]; porcentaje [%]; asterisco [*]; signo más [+]; signo menos [-], punto [.]; barra [/] y dos puntos [:]; Modo binario (Bytes) los datos son codificados a razón de 8 bits por carácter, es el modo por defecto de la norma internacional ISO 8859-1 que define la codificación de los caracteres del alfabeto latino, incluyendo los diacríticos y letras especiales y Modo escritura Kanji/kana (sinogramas utilizados en la escritura del idioma japonés), caracteres chinos, símbolos e imágenes; a diferencia del modo alfanumérico que utiliza un byte por carácter el Modo Kanji utiliza dos bytes por carácter.
El tamaño de un código QR va a depender del volumen de datos almacenados; a medida que aumenta la cantidad de datos, se requieren más módulos para generar el Código; por ejemplo, para la Versión 40 con un nivel de corrección de errores de aproximadamente del 7%, la cantidad de datos serian: 7089 datos numéricos; 4296 datos alfanuméricos; 2953 datos binarios y 1817 datos Kanji 8. La codificación del contenido de datos en bits comienza en la esquina inferior derecha del código QR utilizando bloques de 8 módulos (2 por 4 módulos) siendo esto equivalente a 1 byte por bloque. Al igual que la codificación, la lectura del código QR se inicia en la esquina inferior derecha y sigue en un patrón de lectura en zig-zag hasta decodificar todos los módulos (omitiendo los módulos de los patrones de función).
Área de redundancia o de corrección de errores: Una de las características más importantes de los símbolos QR es su capacidad de corrección de errores que permite leer el símbolo (paquete de datos) incluso cuando está sucio, manchado o dañado. La corrección se realiza utilizando el sistema de codificación Reed-Solomon (sistema de corrección de errores ampliamente usado en matemáticas) que añade bits de redundancia a los datos originales almacenados para minimizar la pérdida según el nivel de corrección seleccionado. El grado de corrección de los errores va a depender de la cantidad de redundancia con la que se diseñe el código, pudiendo llegar hasta el 30 por ciento de los datos que contiene el código QR. Los niveles de corrección de errores son cuatro y en orden creciente de capacidad de recuperación se denominan: L, M, Q y H. Cuanto más alto sea el nivel de corrección de errores mejor será la capacidad de recuperación, pero también al aumentar la cantidad de datos a codificar aumenta el tamaño del símbolo (18). El nivel de corrección de errores L permite una recuperación de hasta el 7 % del área del símbolo, el M hasta un 15%, el Q hasta un 25 % y el H hasta un 30%. El nivel de corrección de errores puede ser configurado por el usuario al momento de generar el símbolo QR, pero siempre teniendo en cuenta factores como el medioambiente donde se utilizará (Q y H para ambientes sucios como por ejemplo en la industria y L para ambientes limpios con gran cantidad de datos), el entorno operativo y el tamaño del código QR 8,18-20.
El nivel de corrección de errores utilizado en cada código QR es indicado por 2 módulos ubicados en la esquina inferior izquierda del símbolo dentro del patrón de información del formato (Figura 9).
Información del formato: Los patrones de información del formato permiten identificar el nivel de corrección de errores con los que se codificó los datos de la región de codificación del símbolo y los datos del patrón de máscara que se aplicó en el código QR para facilitar su escaneo. La información total de este código es una secuencia de 15 bits compuesta por 5 bits de datos y 10 bits de corrección de errores. De los 5 bits de datos, los primeros 2 bits de la secuencia indican el nivel de corrección de errores (los cuales no pueden modificarse) y los siguientes 3 bits indican el patrón de máscara de datos utilizado 21. Para permitir la correcta decodificación del símbolo completo, cada código QR posee dos copias de esta información (redundancia) dispuestas cuatro áreas ubicadas a los lados de los separadores (Figura 10) 8,18.
Información de la versión: La información que identifica la versión del código QR está compuesta dos bloques de 3 por 6 módulos adyacentes a los patrones de posicionamiento inferior izquierdo y superior derecho (Figura 10). Cada bloque es una secuencia de 18 bits de los cuales 6 bits son de datos y los restantes 12 bits para la corrección de errores de los 6 primeros bits (código de corrección de errores Golay). Los módulos de información están incluidos solamente a partir de la Versión 7 hasta la 40 y su función es transmitirle información de la versión al lector de códigos QR 8,18.
Zona silenciosa o de amortiguamiento: Para evitar la interferencia con elementos ajenos y permitir que el software decodificador determine qué módulos forman parte del símbolo, cada código QR está totalmente rodeado en los cuatro lados por un área de seguridad de 4 módulos de ancho de color blanco que lo asilan del entorno y que no debe contener ningún elemento gráfico para permitir una lectura precisa a alta velocidad (Figura 11). La presencia de esta zona muda en el símbolo debe ser de carácter obligatorio y su reflectancia o coeficiente de reflexión deberá ser igual al de los módulos claros (blancos). En el caso de los códigos Micro QR el espesor de esta zona silenciosa es de 2 módulos blancos.
Acciones generadas al decodificar un código QR: Antes de generar un código QR el usuario, en nuestro caso el educador, tiene que saber elegir cual es el adecuado para su caso, qué utilidad le va a dar y en qué contexto lo va a aplicar ya que de eso dependerá el tamaño del símbolo a utilizar y el nivel de corrección de errores que deberá seleccionar. Los datos almacenados en un código QR una vez que son escaneados por el software decodificador de un teléfono celular inteligente (smartphone) le van a permitir al usuario o a la audiencia acceder a distintos tipos de contenidos. El contenido está en directa relación con los datos almacenados; así un código QR puede generar diferentes acciones; a continuación, se detallan solo algunas de las más utilizadas:
Generar un enlace directo mediante una URL (Uniform Resource Locator) que permita acceder a un sitio determinado en internet y descargar un artículo o documento en formato pdf u otros formatos o una aplicación en Google Play o Apple App Store.
Descargar información detallada sobre un tema determinado desarrollado en una clase o información complementaria sobre un tema presentado en un poster durante un congreso.
Acceder a diversos contenidos de audio o video.
Compartir una red de WiFi sin revelar la contraseña.
Descargar información detallada sobre la ubicación geográfica de un determinado sitio.
Mostrar información de los datos de contacto con una función para guardar en el teléfono celular en formato de vCard o MeCard (formato para teléfonos celulares en Japón).
Generar un enlace para diferentes perfiles de redes sociales.
Promocionar una clase con una función de guardar en el calendario.
Generar diferentes tipos de mensajes que visualicen como un SMS (Short Message Service) o como un mensaje en WhatsApp.
Enviar un correo electrónico.
CONCLUSION
La amplia difusión de los teléfonos inteligentes con cámaras ha hecho que los códigos QR ganaran una amplia popularidad y sean ampliamente usados en áreas tan diferentes como la mercadotecnia, el turismo, restaurantes, agencias de publicidad, ciencia, educación, etc. En el área de las ciencias de la salud, esta nueva tecnología le permite al educador incorporar contenidos virtuales a la información analógica o física del mundo real. Los alumnos con teléfonos celulares inteligentes tienen ahora en sus manos un puente analógico-digital que bien usado les permite acceder a todo tipo de información virtual y en muchos casos de contenido dinámico. No obstante, para el empleo de esta nueva tecnología en el campo educativo requiere de mínimos conocimientos por parte de educadores y educandos para su correcto y adecuado uso. La finalidad de este artículo fue justamente brindar el conocimiento mínimo necesario para entender su funcionalidad y estructura.
CONFLICTO DE INTERESES Y FINANCIACION
Los autores declaran la no existencia de conflicto de intereses ni de financiación para la publicación del presente artículo.
DECLARACION DE LA CONTRIBUCION DE AUTORES Y COLABORADORES
Osvaldo Mateo Spinelli aportó la idea central del artículo.
Ambos autores participaron por igual en el diseño, redacción y elaboración del manuscrito.