Español

Texto y herramientas cotidianas · QR y kit de herramientas de códigos de barras

Cómo se construye un código QR: del texto a los módulos en blanco y negro

· Cómo funciona

código qr codificación procesamiento del navegador

Una carga útil de texto que fluye hacia una cuadrícula de módulo QR estructurada
Ilustración de vector original de ToolAcre

Sigue una URL corta a través de cada etapa de la codificación QR (selección de modo, corrección de errores, ubicación, enmascaramiento) para que la cuadrícula en blanco y negro deje de parecer ruido.

La cuadrícula que parece aleatoria pero no lo es: por qué la misma URL siempre produce el mismo código y para qué sirve cada región del cuadrado

La cuadrícula son datos estructurados, no ruido decorativo. ToolAcre recibe el mismo texto, utiliza la misma opción de corrección de errores y devuelve la misma matriz de módulo booleano, incluidas las tres regiones del buscador que sus pruebas inspeccionan en las esquinas.

Esa repetibilidad es útil durante la revisión. Si dos exportaciones de texto y configuraciones idénticas difieren, investigue la entrada, el selector de corrección o la ruta de representación en lugar de aceptar la variación visual como inofensiva. Las pruebas evitan comparar un frágil cuadro dorado; afirman una matriz booleana cuadrada, dimensiones válidas y los tres patrones del buscador. Esas comprobaciones separan la estructura codificada de opciones posteriores como el color, el ancho de la zona silenciosa y la escala de salida.

Paso 1: ToolAcre utiliza deliberadamente el modo de byte UTF-8 en lugar de elegir entre cuatro modos

El encabezado del libro sugiere un codificador que elige el modo numérico, alfanumérico, byte o kanji. Esta implementación no lo hace: precodifica deliberadamente cada carga útil con TextEncoder y pasa esos UTF-8 bytes a través de la biblioteca QR en modo byte.

Esta ruta fija evita un error de dependencia silenciosa. De lo contrario, la biblioteca QR importada trataría los caracteres de JavaScript como bytes latinos-1, por lo que café podría contener un byte E9 en lugar del par UTF-8 C3 A9, mientras que un carácter japonés podría colapsar en datos no relacionados. ToolAcre convierte en fragmentos antes de llamar a la biblioteca, evitando límites de recuento de argumentos en cargas útiles más grandes y evitando un parche global de mono que podría afectar a otra persona que llama.

Paso 2: elegir una versión y un nivel de corrección de errores: cómo la longitud del texto y el nivel elegido corrigen el tamaño de la cuadrícula desde 21×21 hacia arriba

La biblioteca elige automáticamente la versión QR más pequeña que se ajuste a los bytes en el nivel de corrección seleccionado. ToolAcre verifica que las matrices válidas crezcan en los pasos estándar de cuatro módulos, desde 21 módulos por lado hasta el techo implementado de 177.

El nivel seleccionado cambia tanto la capacidad de bytes disponible como la versión necesaria para una carga útil. El panel mide la carga útil preparada con TextEncoder, la compara con el techo configurado para ese nivel y muestra ambas cifras junto a la vista previa. Si la biblioteca no puede ajustarse al valor, el usuario recibe una instrucción para acortarlo o reducir la corrección en lugar de una vista previa vacía o una matriz a la que le faltan bytes finales silenciosamente.

Paso 3: la biblioteca QR agrega datos de corrección de errores internamente; ToolAcre expone el nivel elegido

ToolAcre expone L, M, Q y H como opciones, pero la construcción del bloque Reed-Solomon se encuentra dentro de la dependencia del generador de qrcode. La afirmación defendible es que seleccionar un nivel más fuerte puede producir una matriz más grande para contenido idéntico, como lo demuestran las pruebas.

Las pruebas estructurales hacen que este límite sea observable sin reclamar la propiedad de las matemáticas dentro de la dependencia. Una matriz generada debe tener filas y columnas igualmente largas, dimensiones que sigan la progresión 21, 25, 29 y formas de buscador de borde oscuro, anillo claro y centro oscuro. Luego, un error de renderizado se puede diagnosticar por separado: si la matriz booleana pasa pero falla la exportación, la falla se produce después de la codificación y no en la carga útil o los datos de corrección.

Paso 4: patrones de funciones: buscador, separador, patrones de temporización y alineación, y la tira de información de formato

Los patrones del buscador, las estructuras de tiempo y otras regiones reservadas ya están presentes cuando la biblioteca devuelve su matriz. ToolAcre convierte ese resultado en valores booleanos de fila principal y prueba los tres buscadores de esquinas 7-by-7 en lugar de volver a implementar esas estructuras.

La aplicación aún controla cómo esa matriz verificada llega a un archivo. La salida SVG fusiona módulos oscuros adyacentes en cada fila en tramos de ruta, lo que reduce el marcado y mantiene los bordes vecinos exactos. La salida del lienzo pinta un rectángulo de píxeles completos por cada celda oscura. Ambas rutas agregan la zona silenciosa elegida alrededor de la matriz en lugar de dentro de ella, por lo que cambiar el margen o el color no puede alterar la carga útil codificada.

Paso 5: el enmascaramiento de matriz se maneja dentro de la biblioteca QR en lugar de seleccionarse mediante el código ToolAcre

La selección de máscara también pertenece a la dependencia, por lo que este artículo no pretende que ToolAcre contenga un bucle de puntuación visible de ocho candidatos. Lo que posee la aplicación es la interfaz de matriz estable y la ruta de renderizado que consume sus módulos claros y oscuros.

Ese límite es importante al depurar un código cuya apariencia le sorprende. ToolAcre no puede exponer cuál de las máscaras candidatas de la dependencia ganó ni reproducir una puntuación de penalización en la interfaz; puede reproducir la matriz de módulos final para las mismas entradas. Por lo tanto, comparar matrices tiene sentido, mientras que explicar un parche particular de celdas alternas como una máscara seleccionada a mano iría más allá de lo que registra este código.

Ejemplo resuelto: comparar la carga útil observable UTF-8, el tamaño de la matriz y los módulos renderizados

Pruebe con una URL de menú breve, observe el recuento de módulos devueltos y luego agregue una cadena de consulta larga. La lección observable es que más UTF-8 bytes pueden requerir una matriz más densa; el repositorio no expone cadenas de bits intermedias ni palabras en clave para un cálculo manual.

Para una comparación útil, mantenga constante el nivel M y los colores, luego genere `https://example.com/menu` y la misma dirección con un valor de consulta largo. Registre el contador de bytes y las dimensiones de la matriz que muestra el panel. La segunda entrada puede cruzar el límite de una versión aunque ambas sean "una URL". La diferencia proviene de los bytes codificados, no del número de palabras o de la longitud aparente de la página de destino.

Conclusión: la codificación es local, mientras que la actividad de la red a nivel de página debe evaluarse por separado

La operación de carga útil a matriz se realiza mediante JavaScript del navegador, y la representación SVG o PNG utiliza esa matriz en memoria. Esto es más limitado que afirmar que toda la página es silenciosa en la red: la implementación puede cargar recursos de página no relacionados, así que inspeccione las solicitudes antes de usar secretos.

La afirmación estricta de privacidad también se puede probar sin confiar en el texto de marketing. Borre las herramientas de desarrollo, ingrese una cadena inofensiva distintiva y genere el código, luego busque nuevas URL y cuerpos de solicitud para esa cadena. Las funciones de codificación no contienen ninguna llamada de recuperación, pero la prueba aún debe realizarse en la página implementada porque los estilos, análisis o extensiones están separados de la implementación de carga útil a matriz que se revisa aquí.