Vés al contingut

Codi QR

De la Viquipèdia, l'enciclopèdia lliure

El codi QR (sigla provinent de l'anglès Quick Response, és a dir resposta ràpida) és un sistema per a emmagatzemar informació que consta d'una matriu de punts quadrada destinada a ser llegida per un dispositiu intel·ligent, sovint un telèfon mòbil.[1]

Codi QR

El codi QR és una evolució del codi de barres cap a dues dimensions (2D), comparable amb altres codis 2D, com Data Matrix i Aztec Code (quadrats), PDF417 (rectangles) o MaxiCode (hexàgons).

Un codi QR pot contenir dades de qualsevol format informàtic que càpiguen al seu espai. Molts codis QR contenen adreces web (URL). Altres exemples d'ús són sistemes de pagament, bitllets d'entrada o certificats administratius.

Un codi QR pot recuperar dades danyades, fins a un cert grau.

Codi QR encara llegible, amb nivell de correcció "Q" (25%), danyat en 15 bytes d'un total de 70.

Origen

[modifica]

El codi QR va ser inventat al Japó per a controlar processos de producció en la indústria automotriu.[2] La patent japonesa és de l'any 1994, presentada per les empreses Denso i Toyota amb noms de 5 inventors.[3] La patent europea és del 1995, presentada per Denso amb els mateixos 5 inventors.[4] Com a primer inventor sempre figura Masahiro Hara. És el protagonista de l'invent segons Densowave,[2] l'empresa propietària de la marca QR Code.[5]

Funcionament

[modifica]
Exemple de codi QR on se'n destaquen els elements funcionals. Esquema aproximatiu

A diferència de codis de barres anteriors, dissenyats per ser mecànicament escanejat per un estret feix de llum, el codi QR està dissenyat per ser captat amb una càmera. Les tres peces distintives a les cantonades permeten detectar ràpidament el codi dins de la imatge. Els punts petits es converteixen en bits informàtics de dades o de codi de correcció d'errors. Un processador els interpreta i els converteix en informació.

Lectors de codis QR

[modifica]

Excepte en certs contexts professionals,[6] els codis QR se solen llegir amb un smartphone o una tauleta tàctil. El programari per a interpretar els codis QR pot estar inclòs en el sistema operatiu.[7] En tot cas es poden descarregar aplicacions lectors de codis QR. Poden incloure lectors de més tipus de codis de matriu i de codis de barres.

Punts a considerar sobre la qualitat d'un lector de codis QR:

  • la integració amb altres aplicacions, per exemple si s'activa automàticament amb la càmera o si es pot abrir des del visualitzador de fotos o del navegador;
  • la capacitat de processament d'imatge, per a extraure el codi del seu entorn i reconèixer la graella d'elements clars i foscos;
  • el procediment per a reconstruir informació de codis danyats;
  • el procediment per a interpretar caràcters inusuals, per exemple en "Zürich" que algun lector llegeix com a "Z黵ich";
  • els mecanismes de seguretat.

La seguretat és rellevant en relació amb els codis QR que contenen adreces web. La usuaria ha de poder veure l'adreça i dar el seu consentiment (amb un clic), abans que el lector carregui res del contingut de la pàgina.

Quant a la reconstrucció de codis danyats, hi pot haver danys en les pautes fixes (com les tres pautes de posició), en la informació de format o en la zona principal que conté les dades (junts amb els seus codis de correcció). Als errors en la informació de format, no tots els lectors reaccionen igual de bé. La imatge permet comprovar-ho.

Aplicacions

[modifica]

Un codi QR és un mitjà que porta un missatge. No és factible enumerar totes les seves aplicacions, com tampoc ho seria per les aplicacions d'un missatge SMS o d'un tauler d'anuncis.

Ús històric i actual

[modifica]

Inicialment els codis QR es van fer servir per a registrar reposicions en l'àrea de fabricació de vehicles. D'ahí s'han extés a altres usos industrials.[2]

La inclusió de programari que llegeix codis QR en els telèfons mòbils ha permès nous usos orientats al consumidor.

L'any 2010, els codis QR per a adreces web encara eren una opció entre d'altres. Per exemple, en 21 pàgines d'una publicació japonesa[11] hi ha 23 adreces web impreses com a text, però només 4 codis QR.

Durant els anys 2010, els codis QR esdevingueren un mitjà de pagament quotidià, almenys a la Xina.

A l'inici dels anys 2020, els codis QR són una manera habitual d'imprimir adreces web. Amb la pandèmia de COVID-19, s'han introduït passos sanitaris amb codis QR.

Ús comercial

[modifica]

Els codis QR amb adreces web són els més comuns en la vida quotidiana. L'adreça web final que es vol mostrar a la clienta pot estar codificada literalment al codi QR, o el codi QR pot contenir una adressa intermèdia que redirigeix a l'adreça final. La redirecció permet l'ús d'adreces abreuades en el codi QR i la redirecció pot ser canviada cap a una adreça final nova sense que calgui canviar el codi QR. Aquesta opció és comercialitzada com a "codi QR dinàmic",[12] però el codi QR en si és estàtic.

Per a targetes de visita es poden usar codis QR amb dades de contacte, per exemple en format vCard. A diferència de les adreces web, que solen estar escrit en un format que evita lletres especials (fora dels 26 lletres d'A a Z), amb les targetes de presentació pot ser important d'escriure el codi QR de tal manera que qualsevol programa lector interpreti correctament els caràcters menys comuns, per exemple Quintí Roßmann, 豊田市.

Els codis QR també són utilitzats en controls d'accés, per exemple a recintes esportius o culturals, i per a bitllets de transport.

Facturar i pagar

[modifica]

A Europa l'any 2012, el European Payments Council ha introduït un estàndard de pagament amb codi QR.[13] Almenys cinc països s'hi van apuntar.[14]

A la Xina, durant els anys 2010 el pagament amb codi QR va créixer molt, amb aplicacions com Ali Pay i WeChat Pay, i ja es podia veure tot arreu al carrer.[15]

Més recentment a Europa, una normativa fiscal a Portugal anunciava l'introducció obligatòria de codis QR en factures a partir de l'1 de gener 2021,[16] que finalment es va posposar a l'1 de gener 2022.[17] A Suïssa, amb la introducció del Swiss QR-bill els formularis bancaris de pagament en papel seran obsolets el 30 de setembre 2022.[18]

Ús administratiu

[modifica]
Visat japonès amb codi QR (anonimitzat per a la Viquipèdia)

A l'Unió Europea, l'ús administratiu de codis QR s'havia massificat amb els certificats mèdics per la Pandèmia de COVID-19 a l'inici dels anys 2020: per a viatges internacionals, sobre tot amb avió; segons el país, fins i tot pel accés a locals comercials no essencials.[19]

Ús artístic

[modifica]
Codi QR artístic (il·legible per a algun lector)[10]

Ja l'any 2007, els codis QR són un element principal d'un vídeo musical per a Integral, una cançó orwelliana de l'excitosa banda Pet Shop Boys.[20]

Per l'any 2008 hi ha mencions d'obres d' art urbà amb codis QR. Però aquestes obres primerenques són escassament documentades (per exemple, a Espanya, de La Pluma Eléctri*k amb contingut "no entiendo nada") o en realitat no són codis QR (ceràmiques Data Matrix d' Invader a Varanasi i Brussel·les).[21]

Els codis QR en l'art urbà permeten connectar l'art mural amb altres mitjans artístics, per exemple amb música en una adreça web escrita al codi QR (QRadio de Sweza, Berlin 2011).[22] També poden servir per a reproduir virtualment obres d'art urbà desaparegudes (Graffyard de Sweza, Berlin 2012)[22] o per a fer una donació a l'artista (Pascal "PBOY" Boyard, Paris 2018).[23]

En galeries i museus d'art, es poden trobar codis QR al costat de les obres artístiques, per a enllaçar informació sobre elles, per exemple en forma d'audioguia.[24] En quant a codis QR dins de l'obra d'art mateixa, fa molts anys que s'usen (Douglas Coupland, 2012)[25] i segueixen estant presents en creacions més recents (Massimo Rossetti, 2020).[26]

Riscos

[modifica]

Codis QR poden contenir adreces web (URI) fraudulents.

Des del punt de vista tècnic, el risc és el mateix que pel mateix contingut fraudulent en altres mitjans. Però des del punt de vista de la usuària, no és el mateix, per exemple, rebre un email "Important social security information" amb un enllaç "passportlab.xyz", que trobar-se un codi QR amb aquesta adreça en un parquímetre[27] on està buscant una manera de pagar pel estacionament del vehicle. Pel ull humà, el codi QR és només un caos de píxels, sense indicis coneguts que ens facin sospitar a primera vista. Cal un process d'aprenentatge per a inteoritzar que un codi QR pot ser fraudulent. En quant a lectors de codis QR, és important que no obrin adreces web automàticament, sinó que només les mostrin i esperin un clic per a obrir-les.

Especificacions tècniques

[modifica]
Bitllet pel Cremallera de Núria amb un codi QR de 21×21 mòduls (versió 1) que conté un número de 24 digits codificat en mode numèric amb nivell de correcció d'errors "M".

Normes

[modifica]

L'estàndard japonès per als codis QR, JIS X 0510, ha estat publicat el 1999.[28] Després s'ha fet una norma internacional ISO. Té tres edicions: ISO/IEC 18004:2000,[29] ISO/IEC 18004:2006[30] i ISO/IEC 18004:2015.[31]

El codi QR és codi obert i els seus drets de patent (propietat de Denso Wave) no són exercits.[28]

Terminologia

[modifica]

S'anomena mòdul cadascú dels quadradets que codifiquen les dades d'un codi QR. Aquest nom per l'unitat gràfica d'informació mínima té el seu origen en els codis de barres,[32] precursors del codi QR.

Amb els codis QR, la paraula versió no es refereix a un històrial d' actualitzacions, sinó a codis amb mides diferents. N'hi ha 40:

versió 1 amb 21×21 mòduls,

versió 2 amb 25×25 mòduls,

versió 3 amb 29×29 mòduls

(... +4 mòduls ...)

versió 40 amb 177×177 mòduls

La versió no és sinònim de mida, perquè cada versió requereix unes especificacions tècniques pròpies: amb el pas a una versió major, no només hi ha un increment en el nombre de mòduls, sinó també poden canviar altres paràmetres.

Modes de codificació

[modifica]

El contingut del codi QR es pot codificar de quatre maneres:[29]

  • mode numèric — permet només digits, 0123456789
  • mode alfanumèric — permet 45 caràcters diferents: les 26 lletres majúscules de A a Z, els 10 digits de 0 a 9, l'espai i els 8 símbols $ % * + – . / :
  • mode binari — permet qualsevol contingut
  • mode kanji — en aquest mode les lletres japoneses kanji ocupen menys mòduls que en mode binari. Però aquest mode no s'usa en cap dels tres llocs webs japonesos amb generadors de codis QR consultats per a la revisió d'aquest article l'any 2022.[33][34] Només s'usa en un quart generador consultat,[10] que forma part d'una aplicació de lector QR.

Els modes numèric i alfanumèric són més compactes que el mode binari. Per exemple, el codi QR de versió 1 i nivell de correcció "M" en la foto del bitllet de cremallera pot contenir números fins a 34 digits en mode numèric, però només podria contenir 20 digits en mode alfanumèric o 14 digits en mode binari.

El text codificat es pot dividir en seccions amb modes diferents. Per exemple, un generador de codis QR[10] codifica el text

{{format ref}} https://ca.wikipedia.org/wiki/UNESCO

en una secció amb capçalera "binari, llargada 29" seguida d'una altra secció amb capçalera "alfanumèric, llargada 7".

Nivells de correcció d'errors

[modifica]
Codi QR on un logo oculta una part de les dades, però que encara és llegible gràcies a la capacitat de correcció d'errors

La correcció d'errors permet restaurar les dades d'una part danyada del codi o pot ser aprofitat per a tapar una part de les dades amb una imatge. Matemàticament fa servir un algorisme Reed-Solomon.[35] Existeixen quatre nivells de correcció d'errors.

Nivell de codificació Percentatge de dades que es poden restaurar[29]
L (low) 7%
M (medium) 15%
Q (quartile) 25%
H (high) 30%

Capacitat de dades

[modifica]

El codi QR màxim, versió 40, té 177×177 ≈ 30mil mòduls. Una petita part d'aquests mòduls són per a estructures fixes i informacions estructurals. Una part més gran són per a la zona de correcció d'errors. La mida d'aquesta part depèn del nivell de correcció d'errors. La part restant, majoritària, queda per a la codificació pròpia de les dades. Amb el nivell de correcció d'errors més baix, "L", la capacitat màxima dels diferents modes és:[29]

  • Binari, 2.953 bytes ≈ 24mil bits
  • Alfanumèric, 4.296 caràcters
  • Numèric, 7.089 digits
  • Kanji, 1.817 caràcters

Exemples de codis QR

[modifica]

Mostres de diferents versions

[modifica]

Totes les cinc mostres de la galeria d'imatges són en mode binari. El contingut de la mostra de versió 40 parla del màxim de lletres en mode alfanumèric amb nivell "L", no del seu màxim propi.

Certificat Covid digital de la Unió Europea

[modifica]
Exemple d'un certificat digital COVID de la Unió Europea emès per la República Txeca

El codi QR fictici a la imatge és de 73×73 mòduls (versió 14), té el nivell de correcció d'errors "L" i conté lletres minúscules.

En un codi real arbitrari de l'any 2022 es veu la mateixa versió 14 (73×73 mòduls), però amb nivell d'errors "M" i amb mode de codificació alfanumèric. El text codificat està format només per lletres majúscules, digits i alguns dels símbols permesos en el mode QR alfanumèric, és a dir alguns de $ % * + – . / : i espai.

Amb la codificació QR alfanumèrica, cada caràcter ocupa només 5,5 bits, perquè usa grups de 11 bits per a cada grup de 2 caràcters entre 45 caràcters permesos. 45×45=2025 possibles combinacions ocupen quasi tota l'amplada de banda de 11 bits, 2^11=2048.

Codi QR "Spain Travel Health"

[modifica]

En un codi real arbitrari de l'any 2022 es compten 61×61 mòduls (versió 11) i s'identifica el nivell d'errors "L" i el mode de codificació binari. El text codificat està format només pels símbols usades típicament en codificacions Base64 (26 majúscules, 26 minúscules, 10 digits, "+", "/") i "-", o sigui 65 caràcters diferents.

Amb el mode QR binari, cada caràcter ocupa 8 bits. 65 caràcters possibles, ≈2^6, aprofiten només uns ¾ de l'amplada de banda de 8 bits, 2^8=256.

Generadors QR en línia - Exemples propis

[modifica]

Al web hi ha moltes pàgines amb generadors QR en línia. Es poden usar per a generar codis QR per a usos pràctics. També es poden usar per a fer experiments que ajuden a entendre els codis QR.

Alguns generadors només permeten certs formats de dades, com ara adreces web o targetes de visita. Per a crear exemples experimentals és convenient usar un generador que permeti l'entrada directa d'un text qualsevol.[36]

Alguns generadors en línia permeten triar el nivell de correcció d'errors.[37] Si no, utilitzen un nivell fix — per exemple el "L", que dona els codis més petits. Per a trobar la màscara òptima (vegi a sota, descodificació, pas 1), diferents generadors usen algorismes amb resultats diferents. Algun generador salta aquest pas i posa sempre la mateixa màscara. Això en principi pot dificultar la captura ràpida del codi amb una càmera.

La codificació d'escriptura japonesa pot ser més compacta en generadors japonesos.[33][10]

Un experiment que es pot fer, és entrar texts cada vegada més llargs i observar com el codi QR creix en salts de 4 mòduls. O entrar un text de moltíssimes lletres "w" minúscules [a] repetides (sense espais) i veure la diferència entre la zona de dades a la dreta i la zona de correcció d'errors a l'esquerra.

Adreces web (URL)

[modifica]

En l'aplicació mòbil "Viquipèdia", des de la página inicial, l'opció "comparteix" (i després "copia al porta-retalls") dona aquest URL:

https://ca.wikipedia.org/wiki/Portada?wprov=sfla1

Un cert generador de codis QR en línia,[36] que sempre posa el nivell de correcció d'errors "L", converteix aquest URL en un codi QR de versió 3 (29×29 mòduls). Si reduïm l'URL a la seva part essencial, sense el paràmetre final, l'URL mena al mateix lloc web que l'URL anterior:

https://ca.wikipedia.org/wiki/Portada

Aquest URL genera un codi QR de versió 3 igualment. Fer més curta un URL, no sempre resulta en un codi QR més petit. Això és degut al fet que la mida d'un codi QR només pot canviar en salts de 4. Tallar algunes lletres no sempre és suficient pel salt cap a una versió menor.

Dins del domini de la Viquipèdia en català, la portada és la página que surt per defecte. Per tant, arribem a la mateixa pàgina si reduïm l'URL a

https://ca.wikipedia.org

Aquest URL genera un codi QR de versió 2 (25×25 mòduls), més petit.

El mateix URL escrit tot en majúscules genera un codi QR més petit encara, de versió 1 (19×19 mòduls), perquè un contingut sense minúscules es pot codificar en mode alfanumèric, més compacte que el mode binari necessari pels exemples anteriors. Encara que aquest codi QR en majúscules funcioni (perquè es tracta de l'URL d'un domini), escriure un URL tot en majúscules no és bona pràctica.[b]

Llegir un codi QR (Descodificació)

[modifica]

Passos

[modifica]

La lectura d'un codi QR es fa en una sèrie de passos.[38][29]

  1. En la imatge capturada per la càmera, extraure el codi QR del seu entorn i transformar-lo en una graella plana, quadrada i girada a una orientació estàndard. Per això serveixen les estructures fixes del QR, per exemple aquelles a tres de les quatre cantonades.
  2. Obtenir la versió. S'obté comptant els mòduls i a partir de la versió 7 està codificada en zones no emmascarades del codi QR. De la versió depèn el nombre i les posicions exactes de les pautes d'alineació.
  3. Obtenir el nivell de correcció d'errors. Junt amb la versió, defineix en quants blocs entrellaçades, i de quina llargada, estàn distribuïdes les dades i la informació de correcció d'errors.
  4. Obtenir la màscara. Defineix en quins mòduls s'han de invertir els colors.
  5. Obtenir el nombre i les llargades dels blocs de dades entrellaçades. Per exemple, per a la versió 10 amb nivell "L" són 4 blocs en grups de 8 mòduls (bytes) amb 68 bytes als 2 primers blocs i 69 als últims. La cadena de dades comença amb 8 mòduls (1 a 8), salta 24 mòduls (dels altres 3 blocs), continua amb 8 mòduls (33 a 40), en salta uns altres 24, etc. fins al final del primer bloc. Llavors continua amb el segon bloc: mòduls 9 a 16, mòduls 41 a 48, etc.
  6. Interpretar la primera capçalera (i eventualment uns indicadors de format especials que la precedeixen). Comença amb el mode de codificació: numèric (0001), alfanumèric (0010), binari (0100) o kanji (1000).
  7. Interpretar el camp de llargada. Aquest camp de la capçalera indica quants caràcters o bytes hi ha fins al final del text (o fins a la capçalera següent). El camp de llargada té entre 8 i 16 mòduls en funció de la versió i el mode de codificació.
  8. Descodificar el text. En mode numèric, es divideix en grups de 10 mòduls que codifiquen grups de 3 digits. En mode alfanumèric, es divideix en grups de 11 mòduls que codifiquen grups de 2 caràcters. En mode kanji, es divideix en grups de 13 mòduls que codifiquen 1 caràcter segons un estàndard japonès. En mode binari venen en grups de 8 mòduls (bytes), per exemple amb codificació UTF-8.
  9. Interpretar la zona de correcció d'errors.

Colors i forma dels mòduls (pas 1)

[modifica]
Placa d'adreça a Zhengzhou, capital de Henan, amb un codi QR on els mòduls estàn reduïts a petits cercles negres (=1) i blancs (=0). El codi conté un URL de la policia de Henan (河南公安, hé nan gōng ān) amb un mapa que localitza l'adreça.

La manera més comuna de dibuixar els mòduls d'un codi QR és 1 = quadrat negre, 0 = quadrat blanc. Es poden escollir altres colors i formes. No és necessari que els mòduls omplin completament la seva cel·la de la matriu quadrada. Això permet, per exemple, mòduls en forma de cercle o de cor. És possible invertir els colors de tot el codi QR, 1 = clar, 0 = fosc. Ni tots els mòduls foscos ni tots els clars han de ser necessàriament tots del mateix color.

Molts codis QR amb colors i formes alternatius segeixen objectius artístics i comercials no de tot compatibles amb els objectius tècnics de l'estàndard ISO per a generar un codi QR. Aquest estàndard conté un algorisme per a obtenir un equilibri entre el nombre de mòduls foscos i clars (vegi "Màscares i captura d'imatge") i conté instruccions per a medir que hagi prou contraste entre fosc i clar.

Pautes fixes (pas 1)

[modifica]

La primera imatge d'aquesta secció il·lustra en blanc i negre tres tipus de pautes fixes:

  • A tres cantonades hi ha pautes de posició (quadrats concèntrics de 7×7 mòduls) amb separadors blanc en forma de ele (8×8 mòduls en total).
  • Dues pautes en línia "zebra", dites pautes de temporització.
  • Pautes de 5×5 mòduls en forma de quadrats concèntrics, dites pautes d'alineació

A més, hi ha un "mòdul fosc" que sempre té el valor binari 1 i no té cap funció. És a baix a l'esquerra, sobre els 7 mòduls de format.

Les pautes de posició ajuden a trobar un codi QR dins d'una imatge.[4] Fan que el codi sigui ràpid,[2] tal com diu el seu nom Quick Response.

Les pautes de temporització ajuden a establir les coordenades físiques del mòduls.

Les pautes d'alineació apareixen a partir de la versió 2. Permeten avaluar la imatge del codi per parts. Els centres de les pautes d'alineació formen una quadrícula de 2×2 fins a 7×7 punts, si afegim un mòdul de cada de les 3 pautes de posició. Sempre són simètriques respecte a la mateixa diagonal que les pautes de posició. Les centres de les pautes d'alineació més a prop dels quatre costats del codi QR sempre en tenen la mateixa distància que les pautes de temporització. El nombre de pautes d'alineació creix amb les versions 7, 14, 21, 28 i 35, o sigui cada set versions. En aquelles versions on les pautes d'alineació formen quadrícules de 5×5 o 7×7, la pauta del mig no es troba exactament al centre en la majoria dels casos. Per exemple, la versió 21 (101×101 mòduls) té les pautes d'alineació en la 7a, 29a, 51a, 73a i 95a columna i fila, i la versió 22 (105×105 mòduls) en la 7a, 27a, 51a, 75a i 99a. Que hagi un retrocés, com entre aquestes versions de la posició 29 a la 27, no és un cas únic.

Màscares i captura d'imatge (pas 1)

[modifica]

En el procés de generar un codi QR, després de calcular la codificació de les dades i de la correcció d'errors, s'ha de triar una màscara. Una màscara és una selecció de mòduls que inverteixen el seu color original (vegi pas 4). Per la zona de dades i correccions existeixen 8 màscares possibles. Tenen pautes repetitives, per exemple d'escaquer. Un algorisme comprova les efectes de cadascuna de les 8 màscares i escull aquella que obté el millor resultat segons una fórmula d'avaluació. Aquesta fórmula dona punts de penalització per a:

  • pautes lineals 1011101, perquè es poden confondre amb una pauta de posició;
  • massa mòduls junts del mateix color en una línia o en una àrea;
  • el grau de desequilibri entre el nombre total de mòduls blancs i mòduls negres.

El motiu d'evitar aquests tres punts, és facilitar la ràpida captura òptica del codi QR. Però no hi ha l'opció de deixar el codi sense màscara.

Informació de versió (pas 2)

[modifica]

Les 40 versions del codi QR tenen entre 21×21 i 177×177 mòduls. La versió N té 17+4×N mòduls al quadrat.

La informació explícita del nombre de la versió apareix a partir de la versió 7, vol dir a partir de les versions prou grans per a tenir les pautas d'alineació en una quadrícula 3×3. Ocupa dos blocs de 3×6 mòduls, simètriques respecte a la diagonal, indicades en la primera imatge d'aquesta secció.

En el bloc a dalt a la dreta, la direcció de lectura és de dreta a esquerra en cada fila i de baix a dalt. Els 6 mòduls de les dues files més a baix contenen el nombre de versió en format binari. Els altres 12 mòduls contenen la correcció d'errors per a aquests 6 mòduls.

Informació de format (passos 3 i 4)

[modifica]

Les zones amb la informació de format estan colorades en vermell en diferents imatges d'aquest article. Inclouen mòduls a dalt a l'esquerra que formen una ele a la 9a fila i la 9a columna, al costat de la zona blanca de separació. Són 15 mòduls, saltant el mòdul inicial de cada línia de temporització. Es compten del marge esquerra (1r mòdul), passant per la diagonal (8é) fins al marge superior (15é). Aquests 15 mòduls tenen una copia partida entre 7 mòduls a baix a l'esquerra i 8 mòduls a dalt a la dreta. Els 15 mòduls contenen:

  • mòdul 1 i 2 = codi del nivell de correcció d'errors;
  • mòdul 3 a 5 = codi de màscara;
  • 10 mòduls restants = correcció d'errors pels 5 mòduls d'informació.

Cada exemplar dels 15 mòduls d'informació de format porta la mateixa màscara fixa "101010000010010", vol dir "10" pel nivell de correcció i "101" pel codi de màscara.

Les taules mostren la informació de format, sense màscara ("cru") i amb màscara ("visible").

Codis de nivell de correcció d'errors
visible cru nivell
11 01 "L" low 7%
10 00 "M" medium 15%.
01 11 "Q" quartile 25%
00 10 "H" high 30%
Codis de màscara
cru visible mascara negre:blanc
000 101 alternant (1×1) 1:1
001 100 ratlles 1:1
010 111 columnes 1:2
011 110 diagonals 1:2
100 001 alternant 3×2 1:1
101 000 complex, amb simetria diagonal 15:21
110 011 complex, amb simetria diagonal 23:13
111 010 complex, amb simetria diagonal 1:1

Una imatge d'aquest article mostra les 8 màscares segons el seu codi visible. La taula les ordena segons el seu codi cru.

La màscara s'aplica a la zona de dades (capçaleres incloses) i de correcció d'errors, no a les pautes fixes ni a la informació de format o versió. La màscara es repeteix periòdicament, començant a la cantonada de dalt a l'esquerra. On la màscara té un mòdul negre, el mòdul original canvia de color. On té un mòdul blanc, no canvia.

Correcció d'errors BCH (passos 2, 3 i 4)

[modifica]
Codi QR fet il·legible pel dany idèntic de 4 bits blancs en cada zona d'informació de format. És el mateix codi que en la foto d'un codi QR trencat.

La correcció d'errors per la informació de versió i la informació de format usa l'algorisme BCH (Bose–Chaudhuri–Hocquenghem), que és un control de redundància cíclica. En el cas de la informació de format, el polinomi generador és . En la Viquipèdia en anglès, s'explica exactament aquest cas en l'artice sobre codis BCH.

El programari per a escriure o llegir codis QR pot usar taules on es troben els codis BCH calculades per a tots els possibles valors de la informació de format i de versió.[39]

Ubicació de les dades (pas 5)

[modifica]

Els mòduls de dades es compten començant amb el mòdul situat a la cantonada de baix a la dreta. El compte segueix en un doble ziga-zaga per parells de columnes. Les columnes centrals de l'esquema següent mostren la numeració dels primers 26 mòduls de dades. En un codi QR de versió 1, la posició dels mòduls 25 i 26 d'aquest esquema ja estaria ocupat per informació de format. Per tant, els mòduls de dades 25 i 26 es trobarien en el pròxim parell de columnes a l'esquerra. La lectura dels mòduls de dades salta i esquiva les pautes geomètriques fixes i les informacions de format i versió. Les imatges d'aquest article indiquen com funciona això al detall.

Byte,bit Mòdul Byte,bit
L1+2,2 26 25| L1+2,1
2,8 24 23| 2,7
2,6 22 21| 2,5
2,4 20 19| 2,3
2,2 18 17| 2,1
L1+1,8 16 15| L1+1,7
L1+1,6 14 13| L1+1,5
L1+1,4 12 11| L1+1,3
L1+1,2 10 9| L1+1,1
1,8 8 7| 1,7
1,6 6 5| 1,5
1,4 4 3| 1,3
1,2 2 1| 1,1
—————

Les columnes exteriors de l'esquema mostren la seqüència per a llegir els bytes i bits si les dades del QR estan distribuïdes en dos blocs entrellaçades. L1 és el nombre de bytes del primer bloc.

El nombre de blocs puja amb la versió del codi QR i amb el seu nivell de correcció d'errors. Amb el nivell "L", hi ha un sol bloc fins a la versió 5 i 25 blocs a la versió 40. Amb el nivell "H", hi ha un sol bloc fins a la versió 2 i 81 blocs a la versió 40. Cada bloc conté un nombre sencer de bytes. Si, per exemple, 274 bytes es divideixen entre 4 blocs, els 2 primers blocs tenen 68 bytes i els 2 blocs restants tenen 69 bytes. Sempre quan no sigui possible dividir en blocs de llargada igual, els últims blocs tenen 1 byte més que els altres.

Per a les 40 versions i 4 nivells de correcció d'errors, l'especificació tècnica del codi QR conté una taula de 40×4=160 línies que indica el nombre i les llargadues dels blocs de dades i dels blocs de correcció d'errors. Aquesta taula es pot obtenir per via d'enginyeria inversa amb un generador de codis QR i continguts experimentals com l'exemple "fw3DUUUUUUUU(...)UUUUUUUU" de 270 caràcters. Aquest exemple mostra que en un codi QR de versió 10 i de nivell "L" les dades estàn dividides en 4 blocs entrellaçades. Si afegim un 271r caràcter, encara dona un codi de nivell 10. Amb 272 caràcters ja dona un codi de nivell 11. Això vol dir que en un codi de versió 10 amb nivell "L" caben 271 caracters d'un byte, més la capçalera de 2 bytes i mig. Vol dir que 274 bytes sencers en total, dividits en 4 blocs de 68+68+69+69 bytes. L'exemple "Catalanes...", descodificat més avall, confirma que els blocs tenen 68 i 69 caràcters.

Capçalera - codificació (pas 6)

[modifica]

Cada codi QR conté al menys una capçalera amb un camp de mode de codificació seguit d'un camp de llargada. Els possibles valors d'aquest tipus de camp de mode són:

Indicadors de mode
Valor Interpretació Exemple
0001 numèric números de sèrie o de producte; bitllets de transport[40]
0010 alfanumèric certificat Covid de la Unió Europa
0100 binari (també dit "byte") molts codis QR comercials
1000 kanji

A l'inici del codi QR, abans de la primera capçalera, poden ocórrer els següents elements, sols o combinats:

  • 1110 = codi ECI (Extended Channel Interpretation) indica quina taula de codis usar. Per exemple "1110" seguit de "00011010" = 26(decimal) significa codificació UTF-8.
  • 0011 = indica que el contingut està repartit entre varis codis QR.
  • 0101 = control FNC1 en primera posició.
  • 1001 = control FNC1 en segona posició.

Algun generador[37] sempre posa codi ECI si l'usuaria escull la codificació UTF-8. Les últimes tres opcions es podrien buscar en aplicacions industrials o logístics.

Capçalera - llargada (pas 7)

[modifica]

Indica el nombre de bytes si el mode és binari. En els altres modes indica el nombre de caràcters. Taula de nombre de mòduls en el camp de llargada.

Codificació Ver. 1–9 10–26 27–40
Numèric 10 12 14
Alfanumèric 9 11 13
Binari 8 16 16
Kanji 8 10 12

Dades - codificació (pas 8)

[modifica]

En mode numèric, el text es divideix en grups de 3 digits que són tractats com nombres decimals entre 000 i 999 i convertits en nombres binaris de 10 bits. Del camp de llargada es pot deduir quants dígits queden a l'últim grup. Aquests es codifiquen amb el mínim nombre necessari de mòduls: 4, 7 o 10.

En mode alfanumèric, el text es divideix en grups de 2 caràcters. A cada grup s'aplica la fórmula seguent i el resultat es transforma en un nombre binari d'11 bits. Si queda un caràcter sense parella al final, es codifica en 6 mòduls.

valor(C1C₂) = 45 × codi(C1) + codi(C₂).

Per exemple

valor("PO") = 45 × 25 + 24 = 1149
Codis per a caràcters alfanumèrics
Codi Caràcter Codi Caràcter Codi Caràcter Codi Caràcter Codi Caràcter
00 0 09 9 18 I 27 R 36 [espai]
01 1 10 A 19 J 28 S 37 $
02 2 11 B 20 K 29 T 38 %
03 3 12 C 21 L 30 U 39 *
04 4 13 D 22 M 31 V 40 +
05 5 14 E 23 N 32 W 41
06 6 15 F 24 O 33 X 42 .
07 7 16 G 25 P 34 Y 43 /
08 8 17 H 26 Q 35 Z 44 :

En mode binari, segons l'estàndard s'ha d'usar la taula de codis Shift-JIS[41] o usar un codi ECI per a indicar una altra taula. En la pràctica, molts escanejadors de codis QR interpreten codis UTF-8 correctament sense que calgui cap ECI. Pels caràcters que solen aparèixer en URLs, la diferència entre Shift-JIS i UTF-8 no és rellevant, ni tampoc la diferència amb la taula de codis Latin-1. Les lletres llatins especials com "ç" "á" "ü" no existeixen en Shift-JIS i els seus codis Latin-1 es poden confondre amb altres taules de codis. Per això, la millor solució és codificar-les amb UTF-8. És fàcil trobar pàgines web per a generar codis QR on aquesta solució s'aplica automàticament. En acabar de generar un codi QR amb lletres especials, és recomanable comprovar que surtin correctament amb diferents lectors.

La taula següent indica com el mode QR kanji reordena 43 blocs de la taula de codi Shift-JIS[41] i les codifica amb 13 bits per caràcter.

Bloc 512×16 codis Shift-JIS hexadecimal QR Kanji hexadecimal QR Kanji binari
1 12×16 8140 -81FF 0000-00BF 0000000000000-....
2 12×16 8240-82FF 00C0-017F
3 12×16 8340-83FF 0180-023F
...
30 12×16 9E40-9EFF 15C0-167F
31 12×16 9F40-9FFF 1680-173F
32 12×16 E040 -E0FF 1740-17FF
33 12×16 E140-E1FF 1800-18BF
...
42 12×16 EA40-EAFF 1EC0-1F7F
43 8×16 EB40-EBBF 1F80-1FFF ...-1111111111111

Els quatre primers blocs inclouen caràcters japonesos kana i majúscules i minúscules llatines bàsiques (no "á", "ç" "Ü", ...), gregues i russes. La resta són principalment caràcters japonesos kanji, més de 6000, vol dir molt més que el nombre de kanjis al currículum d'educació obligatòria del Japó, els 2136 jōyō kanji. Els codis Shift-JIS d'EBC0 fins a FFFF queden fora del codi QR kanji. Contenen menys de 3000 kanji (possiblement menys importants).

Correcció d'errors (pas 9)

[modifica]

[Quan aquest article parla de llegir un codi QR presentat en una imatge, sempre es tracta de la lectura directa amb la imatge (descarregada) i el lector al mateix dispositiu. No, per exemple, de dirigir la càmera d'un telèfon mòbil amb un lector de codis QR cap a la pantalla d'un ordenador on es visualitza aquest article i les seves imatges. Els resultats poden millorar si hi ha una càmera entremig.]

Per a la correcció d'errors, els mòduls s'organitzen en bytes (grups de 8), independentment de la codificació del contingut (per exemple el mode alfanumèric amb grups de 11 mòduls). En els codis de versió 2, per exemple, caben 44 bytes de mòduls. Els bytes poden ser de dades o de correcció. Per exemple, per la versió 2 amb el nivell de correcció "M", 16 dels 44 bytes són de correcció i 28 queden per a les dades. Gràcies als 16 bytes de correcció, el codi encara és llegible quan 8 dels seus 44 bytes estàn danyats. En general (excepte els formats més senzills[c]), per a poder corregir danys en N bytes, el codi QR té 2N bytes de correcció. En l'exemple, 8 bytes de 44 són més de 15%, el mínim exigit pel nivell "M".

Aquí una primera galeria de quatre imatges mostra que el límit de la correcció depèn del nombre de bytes danyats, no del nombre de bits danyats. Les observacions fetes en aquestes imatges estàn validades per tots els tres lectors provades.[9][8][10]

Una pàgina web[35] explica detalladament com construir un codi de correcció d'errors per a un exemple hello world en un codi QR de versió 1 i nivell de correcció "M". Vol dir un codi QR amb 26 bytes, dels quals 16 són per a les dades i 10 per a la correcció. Construeix un polinomi de missatge amb 16 termes, que té els 16 bytes (vistos com a 16 nombres) com a coefficients, i construeix un polinomi generador amb 10 termes. La divisió del polinomi de missatge pel polinomi generador deixa una resta que és un polinomi també de 10 termes. Els seus coefficients són els 10 bytes de correcció. La base matemàtica d'aquests càlculs s'explica en l'article de Viquipèdia sobre Reed-Solomon, més detallat en la versió anglesa.

En les versions més grans, la divisió dels bytes en blocs simplifica el càlcul de la correcció. Llavors, per a fer il·legible un codi QR per a la majoria de lectors, és suficient que en un sol bloc el nombre de bytes danyats superi el nivell de correcció. Els blocs de bytes estàn entrellaçades. Així és més probable que un dany en una àrea del codi es distribueixi sobre varis blocs sense superar el nivell d'error d'un sol bloc.

La segona galeria de quatre imatges explica la relació entre danys i blocs pel mateix codi QR que es veu trencat en la foto de la introducció de l'article. Té dos blocs de 35 bytes amb 18 bytes de correcció en cada bloc i 17 bytes de dades. Vol dir que en total hi ha 2×17=34 bytes de dades i que el codi pot aguantar danys en 18/2=9 bytes de cada bloc. Les observacions en aquestes imatges estan validades per dos lectors[9][8] dels tres provades.

El tercer lector[10] no sap llegir el codi QR en la primera imatge de la segona galeria, però sí sap llegir el mateix codi QR en una captura de pantalla on aquesta imatge només ocupa una part. Inesperadament sap llegir el codi QR en la segona imatge de la mateixa galeria i, si formen part d'una captura de pantalla, també els codis QR de la tercera i quarta imatge.

Sap llegir tots els quatre imatges de la tercera galeria. Ja no les pot llegir si es talla la part superior o inferior de la imatge, que només conté marges negres o elements típics d'una captura de pantalla de telèfon mòbil. Els codis QR de la tercera galeria tenen 16 bytes danyades en el primer bloc i 15 en el segon.

Les dues primeres imatges de la tercera galeria es basen en el mateix codi QR que les imatges de la segona galeria. El contingut d'aquest codi, de 25 caràcters, junt amb els 12 bits de la capçalera no omple tots els 34 bytes de dades del codi. Deixa 7 bytes sense usar.

El contingut de les dues últimes imatges de la tercera galeria té 7 caràcters més i no deixa bytes buides. Aquestes dues últimes imatges demostren que els bytes buides no són la raó pel fet inesperat que un lector sàpiga llegir codis tant danyats.

Els altres dos lectors provades no saben llegir cap codi de la tercera galeria.

Exemples de Descodificació

[modifica]

Amb aquests exemples es practiquen els passos 2 a 8 de la secció anterior. El pas 1 és trivial pel ull humà. El pas 9 seria el més complex pel cervell humà.

Emprant un cert generador QR,[36] els 7 textos següents donen codis amb màscares relativament fàcils pel càlcul mental (codis de màscara 111, 101 i 100).

pop²
POP
01714
🐙² = Pop al quadrat
fw3DUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUU
Catalanes,catalans,valencianes,valencians,mallorquines,mallorquinsBBBBBBBBBBBBBBBBBBBBBBBOOOOOOOOOOOOOOOOOOOOOOONNNNNNNNNNNNNNNNNNNNNNNDDDDDDDDDDDDDDDDDDDDDDDIIIIIIIIIIIIIIIIIIIIIIIAAAAAAAAAAAAAAAAAAAAAAA!!!!!!!!!!!!!!!!!!!!!!!-+-+-+-+-+-+-+-+-+-+-+-
PIPIPIPIPIPIPIPIPIPIPIPIPIPIPIPIPIPIPIPIPIPIPIPIPIPIPIPIPIPIPIPIPIPIPIPIPIPIPIPIPIPIPIPICACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACA

Per a coincidir amb els valors de la taula aquí sota, els exemples s'han d'introduir al generador sense afegir cap control de final de línia. En l'exemple "Catalanes...", s'ha d'enganxar sense els marcadors informàtics de format de lletra. El format negret o cursiu en algunes lletres d'aquest exemple és només per a facilitar la comprensió de la llargada dels bloc de dades.

Per a entendre en detall la descodificació d'aquests exemples, s'ha de saber transformar nombres binaris en nombres hexadecimals i decimals i s'ha de saber usar una taula de codis.[42] Altres coneixements necessaris, específics de codis QR, s'han proveït més a dalt.

Exemple pop² 01714 POP 🐙² = Pop al quadrat fw3DUUU... Catalanes... Catalanes... PIPI...CACA... PIPI...CACA...
Mida 21×21 21×21 21×21 25×25 info versió 001010=8+2 57×57 41×41
Versió 1 1 1 2 10 10 6
Nivell (visible) 11 11 11 11 11 11 11
Nivell L L L L L L L
Màscara (visible) 101 101 111 101 100 111 111
Màscara alternant alternant columnes alternant ratlles columnes columnes
Bloc ———————— ———————— ———————— ———————— ———————— Bloc 1 Bloc 1 (acumulat) Bloc 1 Bloc 2
Mòduls 1~4 1~4 1~4 1~4 1~4 1~8 1~4 1~4
Visible 1101 1000 0010 1101 1000 0100 0000 0111
Cru 0100 0001 0010 0100 0100 0100 0000 0100 0010
Mode binari numèric alfanumèric binari binari binari alfanumèric
Mòduls 5~12 5~14 5~13 5~12 5~8 + 33~40 + 65~68 33~40 5~8 + 33~40 + 65~68 5~8 + 17~21
Visible 1001 1100 1001 1000 11 0000 0001 1 1000 1110 0000 1111 0000 1101 0
Cru 0000 0101 0000 0001 01 0000 0001 1 0001 0111 0000 1111 0000 0000 1111 1010 0101 1000 0
Llargada 5 5 3 23 256+14=270 250 176
Mòduls 13~20 15~24 14~24 13~20 5~32 65~72 22~24 + 33~40 25~32 + 41~43
Visible 1110 1001 01 1000 1000 100 0111 1101 0110 1001 1100 1001 1001... 1010 0100 001 0010 0010 0001 0001 100
Cru 0111 0000 00 0001 0001 100 0111 1101 1111 0000 0000 0101 0101... 1010 0100 100 0111 0111 0100 0100 110
Formula 70(hex) 16+1=17 1149=45*25+24 F0(hex)≥80(hex) 0 5 555...(hex) 1143=45×25+18 550=45×12+10
Resultat "p" "017" "PO" UTF-8[42] "1111"=4byte 0×1024 "PI" "CA"
Mòduls 21~28 25~31(llargada!) 25~30(llargada!) 21~28 33~64 97~104 69~72 + 97~100 49~56 + 65~67 44~48 + 57~62
Visible 1111 1001 0111 101 1100 11 0000 0110 1101 1100 1001... 1001 1100 1101 1011 111 1 1101 1100 11
Cru 0110 1111 0001 110 0110 01 1001 1111 0001 0000 0101... 0011 0110 0100 0011 1000 1110 111 0 1000 1001 10
Formula 6F(hex) 8+4+2=14 25 (F0) 9F (xx xx) 1 0 555...(hex) 43(hex) 1143=45×25+18 550=45×12+10
Resultat "o" "14" "P" 1×256+0×16 "C" "PI" "CA"
Bloc 2 Bloc 3
Mòduls 29~36 32~35 31~34 29~36 65~96 9~12 17~20
Visible 0001 0110 0000 0110 0010 1010 1001... 0011 1110
Cru 0111 0000 0000 0000 1001 0000 1110 0110 0101... 0011 1110
Formula 70(hex) (F0 9F) 90 (xx) E 6 555...(hex) 3(hex) E(hex)
Resultat "p" terminador terminador (8+4+2)×1=14 (pot ser mitja "s") (pot ser mitja "N")
Mòduls 37~44 36~40 35~40 37~44 97~128 13~16 + 41~44 21~24 + 49~52
Visible 1010 0100 1111 1111 0101 0100 0110... 0100 0010 0100 1110
Cru 1100 0010 00000 000000 1001 1001 0110 0111 0101... 0100 0010 0100 1110
Formula C2(hex)≥80(hex) F0 9F 90 99 (UTF-8) 6 7 555...(hex) 42(hex) 4E(hex)
Resultat UTF-8[42] "11"=2byte (omplir byte) (omplir byte) "🐙" "B" "N"
Mòduls 45~52 41... 41... 45~52 129~160 45~48 + 73~76 53~56 + 81~84
Visible 1101 1011 1010 0100 0100 0000 0110... 0100 1000 0100 0100
Cru 1011 0010 11101100 00010001 ... 11101100 00010001 ... 1100 0010 0111 0011 0101... 0100 0010 0100 0100
Formula C2 B2 (UTF-8) EC11EC11...(hex) EC11EC11...(hex) C2(hex)≥80(hex) 7 3 555...(hex) 42(hex) 44(hex)
Resultat "²" (omplir codi) (omplir codi) UTF-8 "11"=2byte 6677(hex)="fw" 3..3(hex)=3 "B" "D"

Exemples amb lletres japoneses

[modifica]
Tòquio 2009. Codi QR, mode binari, 89 bytes, inclou 24 bytes per a 12 kanji i kana en Shift-JIS. Marcat, hexadecimal: 04(mode) 59(llargada), 453A9254="E:探". Contingut = "http://sagasou.mobi.␣␍␊␍␊MEBKM[Enllaç no actiu]:TITLE:探そうモビで専門学校探し␣;URL:http\://sagasou.mobi;;"

Saber descodificar manualment un codi QR concret permet analitzar en quin mode i amb quina taula de codificació està escrit aquest codi. L'estàndard per als codis QR inclou el mode kanji com una particular manera de codificar lletres japoneses amb només 13 mòduls per caràcter.[29] En el mode binari, l'estàndard ISO de l'any 2000 diu que la taula de codificació és la japonesa Shift-JIS (o només el seu primer bloc, de 8 bits),[29] no l'internacional UTF-8, ni la oesteuropea Latin-1. Amb Shift-JIS, els caràcters japonesos ocupen 2 bytes (16 mòduls) i alguns només 1 byte (8 mòduls). Amb UTF-8, els caràcters japonesos ocupen 3 bytes (24 mòduls). Les 2×26 lletres llatins bàsics, els digits i els símbols occidentals més comuns (puntuació, etc.) ocupen 1 byte, tant en Shift-JIS, com en UTF-8 i en Latin-1.


http://sagasou.mobi.␣␍␊␍␊MEBKM[Enllaç no actiu]:TITLE:探そうモビで専門学校探し␣;URL:http\://sagasou.mobi;;

És el contingut del codi QR blanc i blau de la foto. Són 77 caracters: 37 "llatins" + 12 japonesos + 28 "llatins" en aquest ordre. Els espais del contingut real estàn representats aquí pel símbol "␣" i les noves línies per "␍␊".

El codi QR està completament en mode binari i el nombre de mòduls es compon així:

  • 12 bits capçalera + 37*8 llatí + 12*16 japonès (Shift-JIS) + 28*8 llatí = 12 bits + (77+12) bytes. Espai necessari 91 bytes, versió mínima 4.

Una opció més curta seria inserir una capçalera interior (+13 mòduls) per a posar "MEBKM:TITLE:" en alfanumèric (-30), una altra capçalera (+12) per a posar "探そうモビで専門学校探し" en mode kanji (-36) i una tercera (+12) per a continuar en mode binari. L'espai necessari serien només 88 bytes, però la versió mínima seria la 4 igualment.


日本日本日本日本日本日本日本日本日本日本日本日本日本日本日本日本

Els 32 caràcters kanji d'aquest exemple repeteixen 16 vegades la paraula 日本 (=Japó).

Amb un generador que podem considerar "europeu" (el seu lloc web és bilingüe anglès alemany)[36] el codi generat per a aquest exemple mida 37×37 (versió 5) i és de nivell "L". El contingut, amb màscara 111, es pot desxifrar manualment de la mateixa manera com s'ha mostrat amb detall pels exemples anteriors no japonesos. El resultat, expressat en nombres hexadecimals, és:

  • 4(=mode binari) 60(=llargada 96) E697A5(="日") E69CAC(="本") E697A5(="日") ...

La traducció del hexadecimal als caràcters correspon a l'estàndard UTF-8.[42] La llargada 96 són 3 bytes per cadascú dels 32 caràcters, 24 mòduls per caràcter.

Dos generadors japonesos de codis QR [33] generen pel mateix exemple un codi QR de mida 33×33 (versió 4) i nivell de correcció d'errors "L". El seu contingut és:

  • 4(= mode binari) 40(= llargada 64) 93FA(="日") 967B(="本") 93FA(="日") ...

La traducció del hexadecimal als caràcters correspon a l'estàndard Shift-JIS.[41] La llargada 64 són 2 bytes per cadascú dels 32 caràcters, 16 mòduls per caràcter.

Per un exemple amb 13 repeticions de "日本", els mateixos generadors QR japonesos escriuen un codi de mida 29×29 (versió 3).

En mode QR kanji, cada caràcter ocuparia només 13 mòduls en lloc de 16. Així l'exemple de 16 vegades "日本" es reduiria de la versió 4 cap a la versió 3.

Un tercer generador japonès[34] tampoc usa el mode kanji per a aquest exemple, sinó el mode binari amb taula de codis UTF-8, igual que el generador europeu.

Un quart generador[10] genera per a aquest exemple un codi QR de versió 4 amb nivell de correcció "M" i mode QR kanji. El contingut del primer dels seus dos blocs entrellaçades és:[d]

  • 1000₂(=mode kanji) 00100000₂(=llargada 32) 0111000111010₂=0E3A16=364210=18*(12*16)+186 0111111111011₂=0FFB16=408910=21*(12*16)+59 ...

Els codis Shift-JIS s'obtenen aplicant les transformacions mostrades en la taula de QR kanji inclòs a dalt, a la secció sobre el pas 8 de descodificació:

1810=1216, 18610=BA16, 12BA16+814016=93FA16="日" en Shift-JIS.[41]

2110=1516, 5910=3B16, 153B16+814016=967B16="本" en Shift-JIS.


在网上看

"Mirar a Internet" en xinès. Com molts caràcters xinesos, aquests quatre existeixen també[43] en japonès.

Per a escriure aquesta frase en un codi QR, un generador europeu[36] i un japonès[34] usen el mode binari amb UTF-8:[42]

  • 4(= mode binari) 0C(= llargada 12) E59CA8(="在") E7BD91(="网") E4B88A(="上") E79C8B(="看").

Dos altres generadors japonesos[33] usen el mode binari amb Shift-JIS:[41]

  • 4(= mode binari) 08(= llargada 8) 8DDD(="在") E3A4(="网") 8FE3(="上") 8AC5(="看").

Un altre genererador[10] genera per a aquest exemple un codi QR en mode kanji:

  • 8(= mode kanji) 04(= llargada 4) 099D(="在") 19E4(="网") 0B23(="上") 0745(="看").

En aquest cas de mode kanji, els nombres hexadecimals de quatre dígits, sempre començades en "0" o "1", s'escriuen al codi QR amb només 13 mòduls.

Exemples de codificació ambigua

[modifica]

[Quan aquest article parla de llegir un codi QR presentat en una imatge, sempre es tracta de la lectura directa amb la imatge (descarregada) i el lector al mateix dispositiu. No, per exemple, de dirigir la càmera d'un telèfon amb un lector de codis QR cap a la pantalla d'un ordenador on es visualitza aquest article i les seves imatges. Els resultats poden millorar si hi ha una càmera entremig.]

L'ambigüitat és un problema genèric en les comunicacions informàtiques. Es coneix amb el nom japonès de mojibake. Un punt específic aquí és que l'estàndard pels codis QR preveu una codificació concreta, la japonesa Shift-JIS,[29] però ara (2022) la UTF-8 és la codificació globalmelment dominant — inclòs pel japonès.[44] Un altre punt específic és que pel mateix codi QR i el mateix lector, la interpretació pot variar segons com s'ha capturat la imatge.


Escola d'esquí

Aquestes paraules apareixen en un codi QR original amb el format d'aplicació vCard. En una foto [45] (retallada) del codi QR, tres lectors[9][10][8] llegeixen correctament "esquí". Però en una captura de pantalla[45] de la mateixa foto, només dos lectors llegeixen "esquí" i el tercer lector[8] llegeix "esqu铆" (però ja no en la versió 2.5.4 d'aquest lector). En aquest codi la "í" està codificada com a C3AD (al 7è i 8è byte del segon de cinc blocs). La comparació amb la taula de codi GB18030, l'estàndard xinès,[46] explica la lletra xinesa triada en la mala interpretació:

  • UTF-8:[42] C3AD="í"
  • GB18030:[47] C3AD="铆"


Max Muster und Söhne, Zürich

"Max Mostra i fills, Zurich", en alemany. Paraules que es troben codificat en mode binari amb UTF-8 en exemples[48] varis de Swiss QR-Bill. Hi ha mòbils de la marca xinesa Xiaomi on el llector QR que vé amb l'instal·lació inicial llegeix "S鰄ne" i "Z黵ich" perquè substitueix "öh" i "ür" amb caràcters xinesos.

La comparació amb la taula de codi GB18030, l'estàndard xinès, no dona una explicació concluent:

  • UTF-8:[42] C3B6+68="ö"+"h", C3BC+72="ü"+"r".
  • GB18030:[47] C3B6+68="枚"+"h", C3BC+72="眉"+"r".
  • GB18030: F668="鰄", FC72="黵".

Si els codis Swiss QR-Bill només són per a lectors homologats pels bancs i caixes suïssos, l'ambigüitat es pot controlar. Però les mateixes paraules podrien trobar-se en codis QR amb dades de contacte que haurien de ser llegible amb qualsevol lector.


网上看

És un dels exemples anteriors, tret el primer caràcter. Codificat amb generadors japonesos[33] com a codi QR amb mode binari Shift-JIS, dos lectors[8][10] ho llegeixen correctament "网上看", però un altre lector[9] llegeix "㤏��". L'explicació és que els 3 grups de 2 bytes s'interpreten com a 2 grups de 3 bytes:

  • Shift-JIS:[41] E3A4(="网") 8FE3(="上") 8AC5(="看")
  • UTF-8:[42] E3A48F(="㤏") E38AC5 (un codi posible en UTF-8, però no assignat a cap caràcter).

Canviant l'última lletra per una delta grega, "网上Δ", s'obté un exemple completament ambigu, encara que gens realista:

  • Shift-JIS:[41] E3A4(="网") 8FE3(="上") 83A2(="Δ")
  • UTF-8:[42] E3A48F(="㤏") E383A2(="モ")

Llavors els tres llectors llegeixen "㤏モ".


ホテルWiki

"ホテル" és "hotel" en japonès, escrit amb lletres katakana de mitja amplada. En amplada completa seria "ホテル". En Shift-JIS, els katakana de mitja amplada es codifiquen amb només un byte per caràcter.

  • Shift-JIS:[41] CE(="ホ") C3(="テ") D9(="ル")
  • Latin-1:[49] CE(="Î") C3(="Ã") D9(="Ù")
  • UTF-8:[42] C38E(="Î") C383(="Ã") C399(="Ù")

Si està escrit[33] en un codi QR en mode binari amb Shift-JIS, un lector[8] llegeix aquest exemple "ÎÃÙWiki" i els altres dos[9][10] llegeixen "ホテルWiki".

En l'exemple següent, la lectura de "ホテル" depèn de més factors.


http://tsukubahotel.jp/␍␊ MEBKM:TITLE:筑波ホテル;URL:http\://tsukubahotel.jp/;;

Aquest és un exemple japonès real[11] de l'any 2009. ("␍␊" és una nova línia a l'original.) Si en el codi QR tot està escrit[33] en mode binari Shift-JIS, els tres llectors[8][9][10] llegeixen "...ホテル...", inclòs el lector que llegia "ÎÃÙ" en l'exemple anterior.

En el codi QR imprès original, la codificació anava per segments: mode binari llargada 25, més mode alfanumèric llargada 12 per a "MEBKM:TITLE:", més mode kanji llargada 2 per a "筑波", més mode binari Shift-JIS llargada 34 per a la resta "ホテル;URL:http\://tsukubahotel.jp/;;".

Amb aquesta codificació, un lector[8] torna a legir "ÎÃÙ", un altre[10] llegeix sempre "ホテル" i un lector[9] llegeix o "ÎÃÙ" o "ホテル", dependent de la imatge del mateix codi completament idèntic. Aquí es mostren les dues imatges corresponents, junts amb una tercerara on una versió colorada del mateix codi QR dona pistes per a veure com el contingut està codificat en quatre segments amb tres modes de codificació diferent.

Escriure un codi QR

[modifica]
Un pas del algorisme de generació d'un codi QR

Per a cada pas en la descodifició d'un codi QR, hi ha un pas corresponent en la creació d'un codi QR.[50][29]

Un pas adicional és el tractament d'espai no usat. Els últims passos pels exemples de descodificació "01714" i "POP" mostren que després de les dades ve un terminador "0000" (prescindible si no queda espai) i que els bytes sencers no usats s'omplen alternant amb els valors (en hexadecimal) EC i 11. Qualsevol altre mòdul no usat es posat a "0".[29]

Tres passos en la creació d'un codi QR fan servir una lògica força diferent del pas corresponent de descodificació: les másqueres (ja comentades en aquest sentit pel pas 1 de descodificació), el codi de correcció d'errors i l'elecció del mode de codificació.

En els exemples de descodificació amb lletres japonesos s'ha comentat com el mateix contingut cap en una versió de QR més petita segons el mode de codificació escollit (o varis modes, per segments). Els exemples de descodificació mostren que en mode binari pot haver-hi ambigüitats de taula de codificació. Un prefixe ECI (Extended Channel Intetpretation) evita aquestes ambigüitats. En la pràctica, tot allò no sol ser relevant si l'únic contingut del codi QR és una adreça web.

Micro QR Code, iQR, SQRC, Frame QR

[modifica]

Al lloc web de Denso Wave, empresa inventora del codi QR i propietària de la marca QR Code, hi ha una presentació de cinc tipus de codis QR:[51] el codi QR regular —objecte principal d'aquest article — el Micro QR Code, l'iQR, l'SQRC i el Frame QR.

El Micro QR Code, és un codi quadrat, pensat per a espais petits. Té només una pauta de posició en lloc dels tres d'un codi QR regular. Pot tenir 11, 13, 15 o 17 mòduls al quadrat. El Micro QR Code més gran coneix quatre modes de codificació i tres nivells de correcció d'errors. El contingut màxim són 35 digits, en mode numèric amb nivell "L".

L'iQR també gasta menys espai en pautes fixes que un codi QR regular. Pot ser quadrat o rectangular, amb mides entre 9×9 i 422×422 mòduls. Té un cinquè nivell de correcció d'errors, "S", de 50%.

L'SQCR, Secure QR Code (codi QR segur) té la mateixa estructura visible que el codi QR regular. La diferència està en el contingut. Una part del contingut pot ser públic, però la resta està xifrada i només pot ser llegida per a usuàries que tenen la clau corresponent.

El Frame QR (codi QR marc) permet deixar a l'interior un forat sense mòduls (en forma de rectangle, triangle, estrella…), que pot ser omplert amb una imatge comercial o un holograma de seguretat, per exemple. No s'ha de confondre amb codis QR on una imatge oculta mòduls d'un codi QR, aprofitant la capacitat de correcció d'errors.

Amb un lector arbitrari[9][8] es poden llegir codis QR regulars i la part pública d'un codi SQRC, però no els altres tres tipus de codis QR. Amb un llector recomanat[e] per Denso Wave[10] es poden llegir, a més, codis Micro QR Code i Frame QR.

Referències

[modifica]
  1. TERMCAT, CENTRE DE TERMINOLOGIA. Terminologia bàsica dels dispositius mòbils (en línia). 3a ed., 2020 [Consulta: 7 maig 2022]. 
  2. 2,0 2,1 2,2 2,3 DENSO WAVE. «History of QR Code» (en anglès). [Consulta: 14 maig 2022].
  3. «patent JP2938338B2» (en anglès i japonès). Patents Google. [Consulta: 14 maig 2022].[Enllaç no actiu]
  4. 4,0 4,1 «patent EP0672994(A1) (pàgina 1)» (en anglès). European Patent Office (Espacenet). [Consulta: 14 maig 2022].
  5. DENSO WAVE. «FAQ - QR Code's intellectual property right» (en anglès). [Consulta: 14 maig 2022].
  6. «Scanners» (en anglès). Zebra. [Consulta: 29 maig 2022].
  7. EVRYTHNG. «QR Capabilities in iOS 11» (en anglès). [Consulta: 8 maig 2022].
  8. 8,00 8,01 8,02 8,03 8,04 8,05 8,06 8,07 8,08 8,09 "QR Scanner: Barcode Scanner", Simple Design Ltd., Illes Verges Britàniques, versió 2.4.9.GP
  9. 9,0 9,1 9,2 9,3 9,4 9,5 9,6 9,7 9,8 "Lector QR i codi de barres (en català)", TeaCapps GmbH, Alemanya, versió 2.7.4-L
  10. 10,00 10,01 10,02 10,03 10,04 10,05 10,06 10,07 10,08 10,09 10,10 10,11 10,12 10,13 10,14 "QRQR - QR Code® Reader", arara.com, Japó, versió 3.0.23 del 20 d'abril 2022. És una aplicació lector i generador de codis QR "amb tecnologies de DENSO WAVE INC.". De la mateixa marca que el lloc web QRQR però amb altres resultats en el generador de codis QR: sempre posa el nivell de correcció "M", sap usar mode QR kanji i sap codificar el contingut en segments amb modes diferents.
  11. 11,0 11,1 (en japonès) JR時刻表 (horaris Japan Railways). Kotsu Shimbunsha, 6/2010. Els codis QR són en pàgines d'anuncis hotelers i notícies ferroviaris abans del miler de pàgines d'horaris.
  12. «Acheter des QR Codes statiques ou dynamiques» (en francès). codesabarres.fr. [Consulta: 22 maig 2022].
  13. European Payments Council. «EPC069-12 v2.1 Quick Response Code - Guidelines to Enable the Data Capture for the Initiation of a SCT.pdf» (en anglès), 09-02-2012. [Consulta: 22 maig 2022].
  14. «scan2pay» (en anglès). [Consulta: 22 maig 2022].
  15. «“无现金时代”的主角——移动支付 " (El protagonista de "l'era sense efectiu" - el pagament mòbil)» (en xinés). chiculture.org.hk, Academy of Chinese Studies. [Consulta: 22 maig 2022].
  16. Autoridade Tributária e Aduaneira. «Código QR» (en portugués), 29-10-2020. [Consulta: 22 maig 2022].
  17. «Portugal – Introduction of single document code (ATCUD) in invoices postponed to 1.01.2022» (en anglés). belim.pt. [Consulta: 22 maig 2022].
  18. «New Prospects for Invoicing. Thanks to QR-Bill and eBill» (en anglès). SIX Group. [Consulta: 19 maig 2022].
  19. «Videoschaltkonferenz der Bundeskanzlerin mit den Regierungschefinnen und Regierungschefs der Länder am 2. Dezember 2021 (punt 7)» (en alemany). bundesregierung.de, 02-12-2021. [Consulta: 22 maig 2022].
  20. T. Ricket. «The Pet Shop Boys embed QR codes in latest Orwellian video» (en anglès), 10-08-2007. [Consulta: 6 maig 2022].
  21. "Invader". «Ceràmiques de codis 2D de l'artista Invader» (en anglès). [Consulta: 9 maig 2022].
  22. 22,0 22,1 zdf.kultur. «SWEZA - Kunst und QR» (en alemany). Arxivat de l'original el 2022-04-05. [Consulta: 9 maig 2022].
  23. Gautam Garg. «Attention street artists: Here is how to make money from your work» (en anglès), 21-05-2018. [Consulta: 9 maig 2022].
  24. Ajuntament de Barcelona. «Museu Picasso - Visites guiades - Audioguies». [Consulta: 9 maig 2022].
  25. Roxanne Hathway-Baxter. «Douglas Coupland on the 21st century state of mind» (en anglès), 01-02-2012. [Consulta: 9 maig 2022].
  26. Gianluca Marziani. «Nuovo format per il Covidocene» (en italià). [Consulta: 9 maig 2022].
  27. Shoshana Wodinsky. «Scammers Are Using QR Codes to Plunder Parking Meter Payments» (en anglès). Gizmodo, 12-01-2022. [Consulta: 22 maig 2022].
  28. 28,0 28,1 DENSO WAVE. «QR Code Standardization» (en anglès). [Consulta: 7 maig 2022].
  29. 29,00 29,01 29,02 29,03 29,04 29,05 29,06 29,07 29,08 29,09 International standard ISO/IEC 18004: Information technology -- automatic identification and data capture techniques -- bar code symbology -- QR code. Geneva: International Organization for Standardization, 15 de juny 2000. 
  30. «ISO/IEC 18004:2006, lloc web AENOR» (en castellà). International Standards Organization. [Consulta: 18 abril 2022].
  31. «ISO/IEC 18004:2015, lloc web ISO» (en anglès). International Standards Organization. [Consulta: 17 abril 2022].
  32. «Code 128 character and symbol width space efficiency» (en anglès). Honeywell International Inc.. Arxivat de l'original el 2022-08-15. [Consulta: 28 maig 2022]. "'overhead' is 25 modules for Start character, check digit, and stop character" (el valor correcte és 35)
  33. 33,0 33,1 33,2 33,3 33,4 33,5 33,6 Dos generadors trobats entre els primers resultats d'una cerca en japonès amb el cercador Google: https://qr.quel.jp/text.php (en japonès) Generador fàcil de usar sense saber japonès ni usar traductor. https://www.cman.jp/QRcode/ (en japonès). Generador amb opció d'escollir el nivell de correcció d'error, etc. El botó vermell "自由入力" és per a contingut propi (text). No es veu cap diferència entre els resultats d'aquests dos generadors si el segon es parametritza com el primer (nivell "L" = レベルL). Segons el contingut, fan codis en mode númeric, alfanumèric o binari, però mai en mode kanji.
  34. 34,0 34,1 34,2 [enllaç sense format] https://m.qrqrq.com/ (en japonès) Lloc web amb un generador de codis QR, de la mateixa marca que l'aplicació QRQR però amb resultats diferents en el generador: sempre posa el nivell de correcció "M" i el mode binari amb taula de codis UTF-8, mai el mode númeric, alfanumèric o kanji.
  35. 35,0 35,1 Thonky. «QR Tutorial, Error Correction» (en anglès). [Consulta: 25 abril 2022].
  36. 36,0 36,1 36,2 36,3 36,4 https://www.the-qrcode-generator.com/ (bilingüe anglès alemany). Generador de codis QR sencill i directe. Utilitzat en aquest article per a generar els exemples de descodificació no japonesos. Escollit per les seves característiques tècniques (correcció d'errors "L", algorisme de màscara).
  37. 37,0 37,1 [enllaç sense format] https://www.thonky.com/qrcode/?advopt=1 (en anglès). Generador no comercial que permet escollir paràmetres tècnics, inclòs la màscara. El camp d'entrada no s'adapta bé a pantalles petits. El número del mask pattern és sense la máscara 101. Per exemple, la màscara amb codi de format de tres mòduls negres (111), és 010 sense emmascarar, doncs Mask pattern = 2.
  38. Bill Casselman. «How to Read QR Symbols Without Your Mobile Telephone» (en anglès). American Mathematical Society. [Consulta: 25 abril 2022].
  39. Thonky. «Format and Version String Tables» (en anglès). [Consulta: 14 maig 2022].
  40. [enllaç sense format] https://commons.wikimedia.org/wiki/File:Z80-Tianjin_-Beijing.jpg Imatge Wikimedia d'un bitllet de tren xinès
  41. 41,0 41,1 41,2 41,3 41,4 41,5 41,6 41,7 Unicode Consortium. «Taula Shift-JIS». International Components for Unicode. [Consulta: 27 abril 2022].
  42. 42,00 42,01 42,02 42,03 42,04 42,05 42,06 42,07 42,08 42,09 Unicode Consortium. «Taula UTF-8». International Components for Unicode. [Consulta: 27 abril 2022].
  43. «网 Japanese» (en anglès). Wictionary.
  44. «Distribution of Character Encodings among websites that use .jp» (en anglès). w3techs.com. [Consulta: 3 gener 2022].
  45. 45,0 45,1 Imatge de codi QR vCard en Wikimedia. Captura de pantalla d'una imatge del mateix codi QR, també en Wikmedia. (No s'integra al text de l'article per a allunyar l'efecte de publicitat gratuïta)
  46. «GB18030: The Chinese standard» (en anglès). IBM, 03-05-2022. [Consulta: 29 maig 2022].
  47. 47,0 47,1 Unicode Consortium. «Taula GB18030». International Components for Unicode. [Consulta: 22 maig 2022].
  48. «The QR-Bill — The Evolution of Payment Slips» (en anglès). SIX Group. [Consulta: 19 maig 2022].
  49. Unicode Consortium. «Taula Latin-1». International Components for Unicode. [Consulta: 22 maig 2022].
  50. "Thonky". «QR Tutorial» (en anglès). [Consulta: 27 abril 2022].
  51. «Types of QR Code» (en anglès). Denso Wave. [Consulta: 22 maig 2022].

Notes

[modifica]
  1. La "w" té el codi hexadecimal 77, de dos digits iguals, com també cadascun dels 5 símbols " 3 D U f
  2. Hi ha entorns informàtics on funciona l'enllaç literal en minúscules https://ca.wikipedia.org i el codi QR en majúscules https://commons.wikimedia.org/wiki/File:QR_code_uppercase_CA-Wiki.png, però no l'enllaç literal en majúscules HTTPS://CA.WIKIPEDIA.ORG .
  3. Versió-nivell 1-L,M,Q,H, 2-L i 3-L
  4. Escrit en una notació que distingeix nombres binaris₂, decimals10 i hexadecimals16.
  5. A l'escanejar amb un lector qualsevol la mostra del codi Frame QR al lloc web de Denso Wave, s'abre una pàgina web amb un enllaç a aquest lector

Bibliografia

[modifica]
  • International Organization for Standardization, International standard ISO/IEC 18004: Information technology -- automatic identification and data capture techniques -- bar code symbology -- QR code, Geneva : ISO : IEC, 2000. OCLC 60816353

Vegeu també

[modifica]