Oldalságok

2020/10/02

A QR-kód halott, de élvezi

Nem, egyáltalán nem voltak illúzióink, hogy a csomagolóipar majd felismeri a QR kódok igazi lehetőségeit a költségcsökkentésre, és a környezettudatosságra. Mert a marketingnek ezek nem szempontok. Hogy ne hét nyelven (mert hétféle csomagolást mégsem lehet csinálni) hangyabetűkkel írják fel, amit 40 fölött már kihívás szemüveg nélkül elolvasni, hanem csak tegyenek rá egy QR-kódot, aztán mindenki a saját telefonján babrálja, legalább azalatt sem a facebookot görgeti. Vagy például a lepedő nagyságú gyógyszer-prospektusok helyett is lehetne a csomagolásra nyomni egy pár négyzet-centiméteres QR-t. Ami mellesleg még szép is tudna lenni. A sok favágó, papírmunkás, nyomdász meg elmehetne webdesignernek. 

Ellenérvnek felhozható lenne, hogy akkor a funkcionális analfabéták hogyan fogják megnézni hogyan hat a pirula, vagy hogy gluténmentes e a csoki? Hát az igazi analfabéták meg hogy? Na ugye?

QR creator - kicsit fapados, de ingyenes.

Aztán a másik, amit nem értünk, hogy minek kell erdőn-mezőn a tanösvények mellé (sok eus pénzből) hatalmas nagy paneleket kihelyezni, amiről aztán a szél kifújja, nap kiszíjja a színeket. Hát minek nem lehet csak egy szerény kis QR-kódot felszegezni, aztán aki akarja, az olvasgassa, az őzikéket meg nem baszná fel az ideg ahányszor csak futtából lefejelnek egy ilyen korhadó fa-monstrumot. Ennek némileg ellent mond az, hogy például a Vargyas-szorosban több a medve, mint a 4G, úgyhogy ott ne mind telefonozzatok, inkább figyeljetek oda, nehogy a lábára lépjetek a macinak.

A Visualed QR-gyártó elég aljadék módon ingyenes.
Ha beolvasod meglátod. Mellesleg máris megértetted, hogy milyen a dinamikus QR. 

A virtuális üzlet viszont szerintünk marhaság. A marketing egy újabb opportunista fattya. Ha valamit online akarunk vásárolni, akkor azt anélkül is megkereshetjük és megvehetjük a neten, hogy egy aluljáróban a pofánkba nyomnák a reklámot, meg amúgy is reklámellenesek vagyunk. Ha meg hazafelé jut eszünkbe, hogy nem vettünk kenyeret, akkor pont olyan macera egy olyan virtuális üzletet találni, ahonnan szkennelhetünk egy QR-kenyeret magunknak, mint egy igazi pékséget. Aztán van például a Munzee, ami a mára jóformán kihalt geocachingnek és a pokemon-vadászatnak valamiféle hibridje... biztos jó, annak aki szereti. 

A QR számomra úgy tűnt szinte kihalt (nálunk), de valamiféle folytonossága csak van, mások szerint még nem is jött el az igazi adventje és csak én vagyok türelmetlen (60 éve létezik és legalább 10 éve van mindenkinek okostelefonja). Na, de minket csupán a technológiája érdekel, mint a bárkódoknak

A kétdimenziós kódoknak, közöttük a QR egyik nagy előnye, hogy sérült állapotában, rossz fényviszonyok és random betekintési szög mellet is elég jól beolvasható. Tehát képes a sérült/hiányzó adat helyreállítására bizonyos keretek között. Ehhez nyilván valamennyire redundánsnak (forward error coding) kell lennie. A QR a Reel-Salomon módszert használja, amibe most nem megyünk bele. 

Főbb elemei, a három sarokjel, csendzónával körülötte. Pászítójelek (minél nagyobb a kód annál több), timing-sorok, formátum, verzió és hibajavító-szint információk. Az összes többi mező maga az adat. 

QR alapok, lépések, amelyek a QR-kód generálásához szükségesek.

Négy fő módot tud (és pár kiterjesztettet), ezekből minket leginkább a Numerikus, Alfanumerikus (csak nagybetűk) és a Bináris érdekel (a kínai/japán jelek nem annyira). Vegyes mód is lehetséges, ha indokolt. Ennek azért van értelme, mert így optimizálni lehet a kódoláshoz szükséges felületet, pl. a számokhoz kevesebb bit szükséges, UTF-8 szöveghez viszont már byte kell.
A kódolási mód kiválasztása után a hibajavítási szintet kell beállítani (4 szint). Nyilván a redundánsabb kód nagyobb lesz, viszont kevésbé sérülékeny.
Tehát már tudjuk, hogy milyen módon, mekkora redundanciával kell kódolni. Ez megadja, hogy mekkora mátrixon lehetséges a kódolás. A különböző méretű QR kódokat verzióknak nevezik. Jelenleg a 40-es verzió 177*177-es mátrix a legnagyobb, ez nagyjából egy A4-es lap teljes szövegét képes tárolni (L-es hibajavítás mellett, 4296 karakter - a kapacitás a kódolási módtól függ, csak számokból több mint kétszer ennyi is lehet: 7089 szám - nyilván M, Q és H hibajavító szinteken ennél kevesebb adat tárolható). QR: 40-es verzió esetén legfeljebb 16 bitet használ arra, hogy a kódolt karakterek számát megadja. 

Ezután binárissá alakítja az adatot.
Numerikus esetén 3-as csoportokra bontja a kódolni kívánt számot, ezeket binárissá alakítja (a 999-es legnagyobb háromtagú szám 10 biten kódolható, tehát egy szám 3,3 bitet foglalhat el). Például az 1977-es szám 197 és 7 felbontva, vagyis binárisan: 1100 0101 illetve 111.
Alfanumerikus esetén (csak nagybetűk) karakterpárokra bontja a szöveget. Ezeket az alfanumerikus tábla alapján megfelelteti kétjegyű számoknak. Mivel az alfanumerikus tábla 44 elemű, ezért a karakterpárokat úgy alakítja számmá, hogy az első számot felszorozza 45-tel, majd hozzáadja a második számhoz. Ezután pont mint a numerikus esetén binárissá alakítja ezeket a számokat. Például a GRIMPIX így bomlik: 
GR - 16, 27  amiből 45*16 + 27 = 747 vagyis 10 1110 1011
IM - 18, 22   amiből 45*18 + 22 = 832 vagyis 11 0100 0000
PI - 25, 18     amiből 45*25 + 18 = 1143 vagyis 100 0111 0111
X -  33           amiből 33 = 10 0001
Tehát karakterenként 5,5 bit kell, mivel két darab kettőspont (44-es a tábla szerint) már például csak 11 biten kódolható (45*44+44 egyenlő 2024).
Bináris esetén, mondjuk UTF-8 szöveg (Grimpix - így, kis és nagybetűkkel) esetén a G ASCII kódja 71, vagyis binárisan 100 0111, a kicsi r  114 vagyis 111 0010 - és így tovább. 

Tehát összeáll a GRIMPIX kódunk (ezek alapján), mondjuk legyen alfanumerikus mód (0010), 7 betű hosszú az üzenet (9 biten kódolva) 0 0000 0111, maga a szöveg pedig 10 1110 1011 11 0100 0000 100 0111 0111 és még a végére biggyeszti a 0000 terminátor kódot. Ezt pedig kitölti nullásokkal a legközelebbi nyolccal osztható számig. 
00100000 00111101 11010111 10100000 01000111 01110000 ez esetben a végére nem kell nullával felpótolni, mert pontosan 8-cal osztható. 48 bit összesen. 
Egy 1-es verziójú kódba simán belefér, Q-hibajavító kódolás esetén viszont 13*8 (lásd a táblázatból az 1-Q résznél), vagyis 104 bit hosszú kell legyen a kódunk. Gyakorlatilag a kapacitás majdnem fele kihasználatlan maradt. A 64 bitünket fel kell pótolnunk 104 bitig a szabványban rögzített pad bytokkal (a 236 és 17 bináris kódjaival) 11101100 00010001. 
104-48 bit az 56/8 vagyis 7 pad byte kell még: 11101100 00010001 11101100 00010001 11101100 00010001 11101100
A teljes kód-kolbász tehát, ha valamit el nem rontottunk közben, tehát 13 byte (104 bit):
00100000 00111101 11010111 10100000 01000111 01110000 11101100 00010001 11101100 00010001 11101100 00010001 11101100

Amíg az 1-e verziójú Q hibafelismeréshez 13 kódszó kell (104 bit hosszú adatsor), addig egy 40-es H 10208 bites, az leírva kb. 150 sor 1-es és 0-s lenne. 

Eddig csupán macerás, de elméletben követhető a dolog. A hibajavítás viszont megkavarja a dolgot rendesen. A különböző verziójú és hibajavítású QR-eknek a kódjait feldarabolják és megfelelő számú codewordokkal paritásbitekkel gazdagítják pimpelgetik, sós kútba teszik, onnan is kiveszik, stb. aminek a matematikáját most szkippeljük mi is. Itt leírja ugyan, de most nincs nagy kedvünk hozzá, talán egyszer majd visszatérünk erre is.

A QR-kód négy hibajavító szintje (L, M, Q, H) például a keremarkan interpretálásában így néz ki balról jobbra, ha  blogunk címét kell megjeleníteni:

A wiki szerint a négy szint 7-15-25-illetve 30% hibát képes visszaállítani, de nem tudjuk, hogy ez a teljes kódra, vagy csak az információra vonatkozik e. Mindenesetre a 27*27-es mátrixon (729 mező - L vagyis 7% hibajavítás) egy 30 - 32 mezős maszkot szinte bárhová tehettünk, képes volt visszaolvasni, de a pászítójelek és a körülöttük levő csendzóna csak néhány mezejének letakarásával is olvashatatlan lett az egész. A spacer, verzióinformációk, illetve a hibajavító szint információit viszont letakarhatjuk, nem zavarja a visszaolvasást.

Érdekesség, hogy esetünkben a kód 27-31-31-35-ös mátrixokból áll, tehát az M és a Q biztonsági szint között nincs méretnövekedés (verzió növekedés). Elképzelhető, hogy az M nem használja ki a 31-es mátrix lehetőségeit - mint az előbb, amikor a GRIMPIX szöveget padbyteokkal töltöttük fel - a Q meg még pont elfér benne. A QR hibajavító szintjét amúgy a bal alsó sarok két pöttye mutatja, de úgy tűnik nincs szüksége rá a kikódoláshoz, ugyanis ha ezt letakarjuk, attól még simán kikódolja. 

Forrás

Kétféle generátorral, hasonló beállításokkal, ráadásul nem is ugyanazt a mintázatot kapjuk, bár a mátrixméret meg a kinyert és megjelenített link tökéletesen ugyanaz. 


Mindenesetre, ha otthon felejtenéd az okostelefonodat, nem érdemes papírlappal, számológéppel és ceruzával nekiállni megfejteni egy QR-kódot. Az viszont elgondolkoztató, hogy szabad e az információhoz való hozzáférésünket ennyire kiszolgáltatni a robotoknak. Másképpen fogalmazva, egy robot-hatalomátvétel esetén nem e szakadunk el hirtelen és végérvényesen a digitalizált információinktól?  Avagy mennyire lehet igazán fontos az olyan információ, amihez a hozzáférésünket egy képelemző algoritmus végezheti. 

Vegye meg a QR-kód leírását, akinek van erre a hülyeségre ennyi pénze.

Nincsenek megjegyzések:

Megjegyzés küldése