Generador de códigos QR

Crea un código QR y observa las decisiones detrás: el reparto de modos, la versión, el nivel de corrección, las ocho máscaras y lo que cuesta un logotipo.

Contenido
Lo que se codifica de verdad
https://seladevtools.com/qr-code-generator
Código

Versión 3 · 29×29 módulos · nivel M · máscara 7

Opciones
Corrección de errores
Colores
Logotipo
Lo que decidió el codificador
Versión
3 · 29×29 módulos
Nivel
M
Máscara
7 (penalización más baja)
Datos
348 de 352 bits
Palabras de código
44 de datos + 26 de corrección, en 1 bloques

Segmentos

ModoCaracteresBits
byte42348

Penalizaciones de las máscaras

MáscaraRachasBloquesParecido al patrónEquilibrioTotal
03253511200796
13313752800986
22943452800919
33223451600827
43303301200780
53123481600820
63223513200993
72892731600722

Las cuatro reglas penalizan rachas largas de un color, bloques de 2×2, la secuencia 1:1:3:1:1 que un lector confunde con un patrón de localización y una proporción de oscuros lejos de la mitad. Gana la más baja; pulsa una fila para forzarla.

Cuatro decisiones escondidas en cada código QR

Pega un texto en un generador de códigos QR y sale un cuadrado en blanco y negro. Lo que no te enseña es que el codificador acaba de tomar por ti cuatro decisiones distintas, cada una de las cuales cambia el resultado y cualquiera de las cuales podría haber sido otra.

Esta herramienta muestra las cuatro, porque son la parte interesante. Una vez que las ves, el comportamiento que parecía arbitrario — el código da un salto de tamaño al añadir un carácter, un logotipo funciona en un código y no en el siguiente — deja de serlo.

  • El reparto de modos: la norma define cuatro formas de empaquetar caracteres, y tu texto se divide entre ellas.
  • La versión: un número de 1 a 40 que fija la retícula entre 21×21 y 177×177 módulos.
  • El nivel de corrección de errores: L, M, Q o H, que decide cuánto del símbolo puede destruirse y seguir leyéndose.
  • La máscara: uno de ocho patrones aplicados con XOR sobre los datos para romper las formas que confunden a un lector.

Ninguna de las cuatro es cuestión de gusto. Cada una tiene una respuesta correcta dadas las demás, y por eso merece la pena mirarlas: interactúan entre sí.

Dividir el texto es un problema de camino más corto

El modo numérico gasta 10 bits por cada tres dígitos. El alfanumérico gasta 11 bits por cada dos caracteres, de un conjunto de 45: los dígitos, las mayúsculas, el espacio y nueve signos de puntuación. El modo byte gasta 8 bits por byte UTF-8. El modo kanji gasta 13 bits en un carácter en el que el modo byte gastaría 24.

Por eso la codificación más barata rara vez es un solo modo para toda la cadena; pero cambiar tampoco es gratis, ya que cada segmento paga un indicador de modo de 4 bits y un campo de recuento de caracteres. Que valga la pena separar una serie de dígitos depende de su longitud. Eso convierte el reparto en un problema de camino más corto, y este codificador lo resuelve de forma exacta en vez de adivinar con una regla práctica.

HELLO12345678901234567890

as one alphanumeric segment
  4 + 9 + (11 x 12) + 6 = 151 bits

split at the digits
  4 + 9  + (11 x 2) + 6 =  41 bits
  4 + 10 + (10 x 6) + 7 =  81 bits
  total                 = 122 bits

Veintinueve bits, que en la versión 1 son la diferencia entre caber y no caber. La tabla de segmentos de la página muestra el reparto que el codificador eligió de verdad y lo que costó cada segmento, para que veas qué caracteres salen caros.

La versión y el reparto se persiguen

Aquí está el detalle que hace que un codificador ingenuo se equivoque. El campo de recuento de caracteres no tiene ancho fijo. Son 8 bits para el modo byte en las versiones 1 a 9 y 16 bits a partir de la 10; el numérico pasa por 10, 12 y 14 en esas mismas fronteras.

Es decir, el coste del reparto depende de la versión, y la versión depende del coste del reparto. La salida es notar que solo hay tres grupos de versiones: el reparto se calcula una vez por grupo y gana la versión más pequeña en la que quepa alguno.

  • Versiones 1–9: numérico 10 bits, alfanumérico 9, byte 8, kanji 8.
  • Versiones 10–26: numérico 12, alfanumérico 11, byte 16, kanji 10.
  • Versiones 27–40: numérico 14, alfanumérico 13, byte 16, kanji 12.

La máscara se elige con cuatro reglas de penalización

Los datos de un código QR son casi aleatorios, y el blanco y negro aleatorio produce formas que un lector puede confundir con los patrones estructurales que busca. El remedio es aplicar XOR sobre la zona de datos con un patrón regular elegido para romper esas formas. Hay ocho, y el codificador los prueba todos.

Cada símbolo enmascarado se puntúa con cuatro reglas de la norma, y gana el total más bajo. La tabla de la página muestra las ocho puntuaciones desglosadas por regla, y pulsar una fila fuerza esa máscara para que veas el efecto.

  • Rachas: tres puntos por cinco módulos contiguos del mismo color en una fila o columna, y uno más por cada módulo adicional.
  • Bloques: tres puntos por cada área de 2×2 de un solo color.
  • Parecido al patrón: cuarenta puntos por la secuencia 1:1:3:1:1 oscuro-claro-oscuro-claro-oscuro junto a cuatro módulos claros, el patrón que se parece a los cuadrados de las esquinas.
  • Equilibrio: diez puntos por cada 5% completo que la proporción de módulos oscuros se aleje de la mitad.

Aquí las implementaciones discrepan un poco: en si el patrón 1:1:3:1:1 cuenta también a mayor escala, y en si la información de formato entra en la puntuación. Este codificador sigue la lectura de ZXing, que es la que corre en la mayoría de las cámaras de móvil, y está fijado contra dos implementaciones independientes. La discrepancia nunca produce un código inválido; solo decide cuál de varias máscaras perfectamente legibles se elige.

Lo que cuesta de verdad un logotipo en el centro

Todo el mundo repite la misma regla: el nivel H recupera el 30%, así que puedes tapar hasta el 30% del código. Es una respuesta con la forma equivocada, y seguirla acabará entregándote un código que no se escanea.

La corrección de errores de un código QR no es una bolsa común. Los datos se dividen en bloques Reed-Solomon, cada uno con sus palabras de corrección, y los bloques se entrelazan por toda la retícula para que un arañazo dañe varios un poco en vez de uno mucho. Cada bloque puede perder aproximadamente la mitad de sus palabras de corrección y reconstruirse. Un logotipo en el centro es un cuadrado macizo, justo la forma que el entrelazado está pensado para repartir; pero nunca reparte de manera uniforme.

Así que la pregunta no es qué proporción del símbolo está tapada, sino cuánto perdió el bloque más golpeado. Esta página sabe a qué palabra de código pertenece cada módulo y de qué bloque vino cada palabra, así que puede responderlo directamente: sube un logotipo e informa del daño por bloque y del margen que le queda al peor.

  • Tapar un patrón de localización, uno de sincronización o la información de formato no es cuestión de presupuesto: no llevan corrección, y un lector que no los encuentra nunca llega a corregir nada.
  • La mitad de las palabras de código es una cota superior. La impresión, los reflejos, las superficies curvas y el desgaste gastan de ese mismo presupuesto, así que un código justo en el límite en pantalla no lo está en una taza.
  • Subir al nivel H para meter un logotipo mayor agranda el símbolo, y por tanto empequeñece cada módulo al mismo tamaño impreso: a veces es una pérdida, no una ganancia.

Los formatos de carga y dónde muerden

Un código QR de Wi-Fi o una tarjeta de contacto no son más que texto con la forma que los lectores reconocen. Las formas son sencillas; donde se rompen los códigos reales es en las reglas de escapado, y son fallos silenciosos: el código se escanea perfectamente y da la respuesta equivocada.

WIFI:T:WPA;S:Cafe\; Bar;P:p\:ssw\,rd;;

BEGIN:VCARD
VERSION:3.0
N:Lovelace;Ada;;;
FN:Ada Lovelace
ORG:Analytical Engines\, Ltd
END:VCARD

En el formato Wi-Fi el punto y coma termina un campo, así que una contraseña que lo contenga trunca las credenciales si no se escapa, igual que la coma, los dos puntos, la comilla y la barra invertida. Un nombre de red formado solo por dígitos hexadecimales debe ir entre comillas, o se lee como valor hexadecimal en vez de como texto. En vCard los separadores son el punto y coma y la coma, una línea de más de 75 octetos hay que plegarla en una línea de continuación que empieza por un espacio, y el fin de línea es CRLF.

Los constructores de aquí aplican todo eso y dicen lo que hicieron, en vez de reescribir tu entrada en silencio. Si aparece un aviso bajo los campos es que algo de tu texto necesitaba tratamiento, y suele convenir saberlo antes de imprimir mil pegatinas.

Preguntas frecuentes

¿Por qué añadir un carácter agrandó tanto el código?
Porque cambió el reparto de modos, la versión o ambos. Una sola minúscula en una cadena en mayúsculas puede empujar un segmento entero del modo alfanumérico al modo byte, que cuesta ocho bits por carácter en vez de cinco y medio. Pasar de la versión 9 a la 10 ensancha además cada campo de recuento. La tabla de segmentos muestra adónde fueron los bits.
¿Qué nivel de corrección de errores debo usar?
M es el valor por defecto sensato y el que usan la mayoría de los códigos reales. Sube a Q o H cuando el código se imprima pequeño, sobre algo curvo, sobre una superficie que se manipula, o cuando tapes el centro con un logotipo. Baja a L solo cuando la carga sea larga y el código se lea en pantalla. Los niveles altos no dan fiabilidad gratis: agrandan el símbolo para los mismos datos, y un símbolo mayor impreso al mismo tamaño tiene módulos más pequeños.
¿De qué tamaño puede ser el logotipo del centro?
Súbelo y la página te lo dirá, porque la respuesta honesta depende de la versión, del nivel y de dónde caigan los bloques. Lo que no hará es repetir la regla del 30%, que va de palabras de código y no de área, y del símbolo entero y no del peor bloque. Como punto de partida, el 15% del lado en nivel H suele ir holgado y el 25% suele no ir.
¿De verdad poner la URL en mayúsculas achica el código?
A menudo sí. El modo alfanumérico no tiene minúsculas, así que una URL en minúsculas va al modo byte a ocho bits por carácter, mientras que una en mayúsculas cabe en alfanumérico a cinco y medio. El esquema y el host no distinguen mayúsculas, de modo que HTTPS://EXAMPLE.COM funciona igual que https://example.com; pero la ruta sí distingue y no debe tocarse. La página mide el ahorro en tu URL concreta y ofrece el cambio solo cuando ayuda.
¿Merece la pena el modo kanji para texto japonés?
Sí: son 13 bits por carácter donde el modo byte en UTF-8 gasta 24, así que el texto japonés sale casi a la mitad de tamaño. Cubre el rango de dos bytes de Shift_JIS, que incluye los kana, los kanji de JIS X 0208 y también el griego y el cirílico. Esta página carga la tabla de correspondencia solo cuando tu texto no es ASCII puro, así que un código con una URL nunca la descarga.
¿Debo activar la declaración de UTF-8?
Normalmente no. La norma dice que el modo byte es ISO-8859-1 salvo que una cabecera ECI diga otra cosa, pero en la práctica todo lector fabricado en este siglo lo trata como UTF-8, y eso es lo que escribe este codificador. Declararlo explícitamente cuesta 12 bits y confunde a algunos lectores industriales antiguos. Actívalo si apuntas a un lector concreto que documente soporte de ECI.
¿Por qué no hay Micro QR ni código en varias partes?
Los dos existen en la norma y los dos te entregarían algo que no se escanea. Micro QR es una simbología aparte con sus propias tablas de capacidad, conjunto de máscaras y codificación de formato, y la mayoría de las aplicaciones de cámara no lo leen. Structured Append reparte la carga entre hasta dieciséis símbolos que prácticamente ningún lector de consumo vuelve a juntar. Si tus datos no caben en la versión 40, la respuesta es poner una URL en el código y los datos detrás.
¿Hasta qué tamaño se puede imprimir un código QR?
La guía habitual es que un módulo mida al menos 0,4 mm en impresión y que el código sea alrededor de la décima parte de la distancia de lectura dividida entre el tamaño de la versión; pero la restricción práctica es la zona tranquila. La norma pide cuatro módulos de margen limpio por todos los lados, y el fallo más común en el mundo real es un código pegado a otras artes. La versión y el número de módulos que muestra la página son lo que necesitas para esa cuenta.