Vonalkód technika alapjai

Mi is a vonalkód? A vonalkód egy számokból és betűkből álló azonosító kódolt formája, amely gépekkel optikailag leolvasható. A vonalkód kizárólag egy azonosítót, hivatkozást jelöl, amely egy adatbázis meghatározott elemére mutat. Minden egyéb információ, például egy termék ára, vagy az aktuális raktárkészlet az adatbázisban kerül tárolásra.

Vonalkódok két fő típusa:

Léteznek 1 dimenziós (1D) és 2 dimenziós (2D) vonalkódok. Az alábbiakban részletesen ismertetjük a legelterjedtebb 1 és 2 dimenziós vonalkódokat.

1D

1D: A különböző vastagságú függőleges sötét vonalak és világos közök meghatározott váltakozása fejezi ki az információt a leolvasók számára.

EAN 13 vonalkód

EAN 13

Az EAN 13 vonalkód  világszerte elterjedt a kiskereskedelemben. Az EAN 13 vonalkód 13 karaktert kódol: az első két vagy három vonal az országkód mely jelezi, hogy melyik országban regisztrált a gyártó. Az országkódot fojtatja 9 vagy 10 adat jegyszám, és egy ellenőrző szám (checksum). Az EAN 13 vonalkód két vagy öt jegyszámú kiegészítő vonalkóddal bővíthető, így elérhető a 14 vagy 17 jegyszámú vonalkód.  Az ellenőrző szám  a következő módon képződik: (Modulo 10 kalkuláció checkszum):

  1. Add össze a páros számú számjegyeket: 2, 4, 6, stb.
  2. Az eredményt 3 -al beszorozni.
  3. Add össze a páratlan számú számjegyeket: 1, 3, 5, stb.
  4. Add össze a 2. és 3. végeredményét.
  5. A check karakter a legkisebb szám mely a 4. lépéshez adható, hogy a 10 többszöröse legyen az eredmény.

Például: Legyen a vonalkód adata = 001234567890

  1. 0 + 2 + 4 + 6 + 8 + 0 = 20
  2. 20 * 3 = 60
  3. 0 + 1 + 3 + 5 + 7 + 9 = 25
  4. 60 + 25 = 85
  5. 85 + X = 90 (10 többszöröse legyen az eredmény), tehát X = 5 (checkszum)

Visual Basic minta funkció a checkszum kikalkulálásához: Function Append_EAN_Checksum (RawString as String) Dim Position as Integer Dim CheckSum as Integer CheckSum = 0 For Position = 2 to 12 step 2 Checksum = Checksum + Val(Mid$(RawString, Position, 1)) Next Position CheckSum = CheckSum * 3 For Position = 1 to 11 Step 2 CheckSum = CheckSum + Val(Mid$(RawString, Position, 1)) Next Position CheckSum = CheckSum Mod 10 CheckSum = 10 – CheckSum If CheckSum = 10 Then CheckSum = 0 End If Append_Ean_Checksum = RawString & Format$(CheckSum, “0”) End Function

EAN 13 vonalkód országkódok

A listában találhatóak a vonalkódok megfejtéséhez szükséges országkódok. Magyarország EAN 13 országkódja az 599 – vagyis ezzel a számmla kezdődik minden forgalomba hozott magyar termék kódja.

Kód Ország Kód Ország
00 – 09 Amerikai Egyesült Államok 10 – 19 Lefoglalt EAN-hez csatlakozó UCC (USA)
20 – 29 Kiskereskedelmek és kiszállítók lokális használatára 30-37 Franciaország
400 – 440 Németország 45 Japán
46 Oroszország 471 Tajvan
474 Észtország 475 Lettország
477 Litvánia 479 Srí Lanka
480 Fülöp-szigetek 481 Fehéroroszország
482 Ukrajna 484 Moldva
485 Örményország 486 Grúzia
487 Kazahsztán 489 Hong Kong
49 Japán 50 Egyesült Királyság
520 Görögország 528 Libanon
529 Ciprus 531 Macedónia
535 Málta 539 Írország</td
54 Belgium és Luxembourg 560 Portugália
569 Izland 57 Dánia
590 Lengyelország 594 Románia
599 Magyarország 600 – 601 Dél Afrika
609 Mauritius 611 Marokkó
613 Algéria 619 Tunézia
622 Egyiptom 625 Jordánia
626 Irán 64 Finnország
690 – 692 Kína 70 Norvégia
729 Izrael 73 Svédország
740 – 745 Guatemala, El Salvador, Honduras, Nicaragua, Costa Rica, Panama 746 Dominikai Köztársaság
750 Mexikó 759 Venezuela
76 Svájc 770 Kolumbia
773 Uruguay 775 Peru
777 Bolívia 779 Argentína
780 Chile 784 Paraguay
785 Peru 786 Ecuador
789 Brazília 80 – 83 Olaszország
84 Spanyolország 850 Kuba
858 Szlovákia 859 Csehország
860 Jugoszlávia 869 Törökország
87 Hollandia 880 Dél Korea
885 Thaiföld 888 Szingapúr
890 India 893 Vietnam
899 Indonézia 90 – 91 Ausztria
93 Ausztrália 94 Új-Zéland
955 Malajzia 959 Pápua Új-Guinea
977 Periodikusok (ISSN) 978 Könyvek (ISBN)
979 Zene (ISMN) 980 Visszafizetési receptek

EAN 8 vonalkód

EAN 8

Az EAN 8 vonalkód, az EAN-13 kód rövidített változata. Az első két vagy három vonal az országkód, 4 of 5 adat számjegy (az országkód hosszúságán függő), és a checkszum. Az EAN 8 vonalkód  2 vagy 5 számjegyes kiegészítéssel bővíthető. Az EAN 8 vonalkód fő célja, hogy minél kisebb helyet foglaljon el. Az EAN 8 vonalkód azonosítja a gyártót és a gyártmányt. Mivel az EAN 8 vonalkód esetében kisebb az országonként alkalmazható kódtartomány, mint az EAN 13-nál , az EAN 8 vonalkód-ot csak olyan gyártmányokra teszik, melyre nem fér rá a EAN-13 .

– Átfedés kettő az ötből (interleaved 2 of 5) vonalkód
– Codebar vonalkód

Code 39 vonalkód

CODE 39

A Code 39 vonalkód szimbológiát különböző iparágak használják, és állami vonalkód standard is. Az ANSI (Amerikai Nemzeti Szabványügyi Intézet) meghatározza a Code 39 standardot, mint MH10.8M-1983, és USD-3, 3 of 9 -ként is ismert. A Code 39 vonalkód teljes karakter sorozata 0-9, A-Z (csak nagy betűk), és a space, mínusz (-), plusz (+), pont (.), dollár ($), slash (/), és százalék (%). A Code 39 vonalkód esetében a start/stop karakter a kód elején és végén található, és a vonalkódnak nincs maximum hosszassága, viszont 25 -nél több karakter terheli kapacitását. Minden egyes karakter 9 elemből áll: 5 vonal, és 4 üres hely. Egy karakter 3 vastag, és 6 vékony elemből áll. Inter-karakter hely választja el a karaktereket, amely akkora, mint a vékony vonal. A vastag : vékony vonalak aránya 1.8 – 3.4. Vonalkódok, melyeknek a vékony vonala kisebb, mint 0. 020 arasz (0.508mm), legalább 2.5 arány kell, hogy legyen, de 3.0 a javasolt. 10 vékony vonalas holtzóna van a Code 39 vonalkód elején és végén. A checkszum nem kötelező a Code 39 vonalkód-hoz, viszont az adat integritása miatt a Modulo 43 check számjegy hozzátéte javasolt. Code 39 vonalkód jóformán az egyetlen szimbológia, melynél a checkszum nem kötelező, tehát előnyösebb mikor lehetetlen, vagy alkalmatlan checkszumokat kalkulálni minden egyes vonalkód nyomtatáskor.

Extended Code 39 Kibővíti a Code 39 vonalkód karakter sorozatát (kisbetűkkel és jelekkel). A Code 39 vonalkód karaktereket páros Code 39 karakterekkel kell kódolni, például, a kicsi “a” betű, amely nem szerepel a Code 39 karaktersorozatban, a “+A” párral lehet kódolni.

Tippek… Majdnem mindegyik piacon lévő vonalkód képes elolvasni a Code 39 vonal kódokat. Főleg cégen belül használják, hol a vonalkódok belsőleg alkalmazhatók. Előtagként a vonalkódhoz illeszteni egy karaktert segít a hiba kikerülésében. Például, árú azonosító számok lehet “P”-vel, és a mennyiség száma “Q”-val, kezdődhetnek. Ha a felhasználó leolvas egy alkatrész számot, a vonalkód olvasó le tudja ellenőrizni a “P” jelenlétét és automatikusan visszautasítani a kódot, ha az nincs ott.

– Code-93 vonalkód

Code 128 vonalkód

CODE 128

A Code 128 vonalkód kitűnően tömöríti a numerikus és alfanumerikus adatokat. Előnyösebb, mint a Code 39, mivel karakterválasztéka bővebb, és tömörebb.   A Code 128 vonalkód karakter sorozata 0-9, A-Z (nagy és kis betűk), és az összes standard ASCII jelek és kontrol kódokból áll. A Code 128 vonalkód három jelkészletből áll: A, B és C. Az A jelkészlet a standard ASCII jeleket, számokat, nagybetűket és kontroll kódokat tartalmazza; A B jelkészlet a standard ASCII jeleket, számokat, nagybetűket és kisbetűket foglalja össze; míg a pusztán numerikus C változat két számot tömörít egy karakterbe, ráadásul, mindegyik alegység tartalmaz kontroll karaktereket, ami engedi a váltást egyik alegységtől a másikig egy vonalkódban. Végül, három külön start kód létezik, mely jelzi, hogy melyik alegységet használja.

A Code 128 vonalkód ellenőrző szám kalkulációja:

Minden egyes Code 128 karakternek van egy száma 0-102 ig. Az A és B alegységekben, a karakterek száma az ASCII kód megfelelője mínusz 32. Például, a felkiáltó jel (ASCII 33) száma 1. Az A alegység engedélyezi az ASCII kontroll karakterek nyomtatását (0-31 számú ASCII kódok). Ezekre a karakterekre vonatkozva, 64 -t kell adni az ASCII kódhoz a karakter száma kiszámításához. Például a NUL értéke (ASCII 0) 64, SOH (ASCII 1) 65, STX (ASCII 2) 66, stb. A C alegység párosan nyomtatja a számokat, és a karakter száma a checkszum kiszámításához, a pár értéke (00, 01, 02,.., 99). Az ellenőrző szám kalkulálása:

  1. A checkszum kezdeti értékét állítsd a start karakter értékére (103, 104, vagy 105 az A, B, vagy C alegység megfelelőjével).
  2. A szorzó kezdeti értékét állítsd 1-re.
  3. Kezdvén a vonalkód bal oldalán, add a karakter számát szorozva a szorzó értékével a checkszumhoz. A szorzó egyel növekszik minden karakter után.
  4. Oszd a végeredményt 103-lal.
  5. Alakítsd át a checkszum számértékét ASCII karakterekre.

A checkszum számértéke átalakítása ASCII karakterekre a betűtípuson is múlhat. Óvatosnak kell lenni mikor az eredményes ASCII kód szám értéke nulla, vagy ha 95-nél magasabb. Általában, ha az A alegységbe a checkszum 0-63-ig, add a “space” checkszumot az ASCII kódjához (32) a karakter kód kiszámításához. Ha a checkszum meghaladja 64 -t, vegyél el 64 -t a karakter kód kiszámításához. A B alegységbe, add a “space” checkszumot az ASCII kódjához (32) a karakter kód kiszámításához. A C alegységben, a checkszum egyenlő a karakter ASCII számértékével.

UPC A vonalkód

UPC A

A UPC A vonalkód Struktúrája: A UPC A vonalkód 12 numerikus karaktert tartalmaz. Az első számjegy a kódrendszert azonosítja: 0: szabályos UPC kódok 1: foglalt 2: boltban címkézett rendszertelen súlyú tárgyak 3: National Drug Code (Országos drog kód) és National Health Related Items (Országos egészségügyi tárgyak) kód 4: nincs forma korlátozás, üzleten belüli használatra (kivéve élelmiszerekre) 5: kuponokon használható 6: foglalt 7: szabályos UPC kódok 8: foglalt 9: foglalt

A következő 5 numerikus karakter, a gyártót azonosítja. A Uniform Code Council (UCC) osztja ki ezeket a számokat. Az  ezt követő  5 számjegy az egyes cikkeket azonosítja, és ezt a számot a gyártó adja meg. Az utolsó számjegy a checkszum. Checkszum Kalkulálása (Modulo 10 kalkuláció):
  1. Add össze a páros számú számjegyeket: 2, 4, 6, stb.
  2. Az eredményt 3 -al beszorozni.
  3. Add össze a páratlan számú számjegyeket: 1, 3, 5, stb.
  4. Add össze a 2. és 3. végeredményét.
  5. A check karakter a legkisebb szám mely a 4. lépéshez adható, hogy a 10 többszöröse legyen az eredmény.
Például: Legyen a vonalkód adata = 001234567890
  1. 6. 0 + 2 + 4 + 6 + 8 + 0 = 20
  2. 20 * 3 = 60
  3. 0 + 1 + 3 + 5 + 7 + 9 = 25
  4. 60 + 25 = 85
  5. 85 + X = 90 (10 többszöröse legyen az eredmény), tehát X = 5 (checkszum)

A UPC A vonalkód 2-számjegyű kiegészítő kódja: A UPC A vonalkód két számjegyű kiegészítő vonalkóddal bővíthető, mely a sajtótermékeknél a periodius számát jelzi. Heti kiadványok általában 1-52 -ig; a félhavi kiadványok 1-24-ig ; míg a havi kiadványok 1-12-ig vannak számozva.

UPC E vonalkód

A UPC E, a UPC A variációja, amelyet a 0-s számú rendszerre használható. A UPC E kódok nagyon kis helyen elférnek mivel a 0 -t kiszűrik. Négy szabály vonatkozik az UPC vonalkód nyomtatására az UPC E formában:

  • Ha a gyártó utolsó 3 számjegye 000, 100, vagy 200, az érvényes termék kódok 00000 – 00999 (1 000 szám).
  • Ha a gyártó utolsó 3 számjegye 300, 400, 500, 600, 700, 800, vagy 900, az érvényes termék kódok 00000 – 00099 (100 szám).
  • Ha a gyártó utolsó 2 számjegye 10, 20, 30, 40, 50, 60, 70, 80, vagy 90, az érvényes termék kódok 00000 – 00009 (10 szám).
  • Ha a gyártó számjegye nem nullával végzõdik, az érvényes termék kódok 00005 – 00009 (5 szám).

2D

2D: A kétdimenziós vonalkódok jóval nagyobb információmennyiség megjelenítésére képesek, mint az 1D kódok. Az adatok megjelenítésére különböző geometriai formákat használnak, amelyek több irányból is könnyedén leolvashatóak.

PDF 417 vonalkód

PDF 417

A PDF 417 vonalkód olyan speciális összetett lineáris (egydimenziós) kód, amely, egymás alá nyomtatott egydimenziós kódokból áll. A PDF 417 vonalkód elnevezésben, a  PDF a Portable Data File (hordozható adat állomány) szavak kezdőbetűiből áll össze. A PDF 417 vonalkód fő alkalmazási területei elsősorban logisztika, az azonosító kártyák, és a leltári rendszerek. A PDF 417 vonalkód a Symbol Technologies cég találmánya, és az ISO 15438 szabvány tartalmazza részletes leírását.

Főbb jellemzői:
  • Beágyazhatóság:  A PDF 417 vonalkód további szimbólumokra mutathat, melyeket sorrendben beolvasva tovább növelhető a kód kapacitása.
  • Felhasználó által meghatározott méretek: A felhasználó definiálhatja a legkeskenyebb vonalak szélességét (X méret), és a sorok magasságát (Y méret).
  • Nyilvánosan használható: Bárki bevezethet rendszereket a PDF 417 vonalkód formátumot alkalmazva. A PDF 417 vonalkód nem engedélyköteles (license free).

Formátum: A PDF 417 vonalkód 3-90 sorból áll, melyek mindegyike lényegében egy-egy alacsony lineáris vonalkód. Minden egyes sor rendelkezik

  • margóval (quiet zone), mely a vonalkód előtti minimális szabad fehér terület
  • kezdő karakterrel, amely a vonalkód olvasó berendezések számára azonosítja a formátumot, mint PDF 417 vonalkód. Minden egyes vonalkód típus egyedi start karakterrel rendelkezik.
  • egy speciális kódszó (row left), amely a sorra vonatkozó adatokat tartalmazza (a sor száma, a redundancia foka)
    • 1-30 adat kódszavak: A kódszavak vonalakból, és hézagokból álló csoportok, amelyek egy, vagy több számot, betűt, vagy más szimbólumot jelenítenek meg.
    • Minden egyes sor ugyanannyi kódszóból áll.
    • Minden egyes kódszó négy vonalból, és négy hézagból áll (A kód nevében (PDF 417) a 4-es erre utal.
    • A kódszó teljes szélessége a megengedett legkeskenyebb vonal 17 szerese.  (A kód nevében (PDF 417) a 17 erre utal.)
    • Minden egyes kódszó vonallal kezdődik, és hézaggal végződik
    • Összesen 929 különböző kódszó létezik, melyből kilencszáz adat, míg a többi valamilyen vezérlő funkcióval rendelkezik.
    • Minden egyes kódszó három különböző kódkészlet egyikéből kell hogy kinyomtatásra kerüljön
    • A kódkészlet olyan vonal, hézag kombináció, mellyel az összes 929 kódszó megjeleníthető
    • Az egyes kódkészletekben minden egyes kódszónak egyedi vonal/hézag kombináció felel meg.
    • A PDF kódon belüli sor száma határozza meg, hogy melyik kódkészlet kerül alkalmazásra a háromból.
    • Adott soron belül minden egyes kódszó ugyanazt a kódkészletet használja
    • A három különböző kódkészlet használata lehetővé teszi az olvasó berendezések számára a sor azonosítását, amely nagy segítséget jelent az olyan esetekben, amikor a vonalkód olvasó a kódot a vízszintestől eltérő szögben olvassa. Például előfordulhat, hogy az olvasási vonal elején a szkenner a 3. sort látja, míg az olvasási vonal végén már a 7. sort olvassa.
    • egy speciális kódszó (row right), amely további a sorra vonatkozó adatokat tartalmaz.
    • záró karakterrel.
    • margóval (quiet zone), mely a vonalkód utáni minimális szabad fehér terület

Alkalmazás: A Datamatrix kódhoz hasonlóan a PDF 417 vonalkód postai bélyegként is használatos az USA-ban. A PDF 417-et alkalmazzák a papír alapú beszállókártyák két dimenziós vonalkódjaként a repülő társaságoknál. Az USA bizonyos államinál a gépjárművezetői jogosítványok adatainak gépi kódolására is alkalmazzák, az adatokat a dokumentumra nyomtatva PDF kód formájában. Hazánkban az APEH adóívein látható, ahol a tartalom géppel olvasható változataként használatos.

Datamatrix kód

Datamatrix

A DataMatrix kód  az a kétdimenziós vonalkód, amely információ sűrűsége, megbízhatósága, robusztussága révén ipari szabvánnyá vált. Mivel gyengébb kontraszt mellett is biztosítható olvashatósága, ezért előszeretettel használják a DPM (direct part marking, a kódot közvetlenül a termékre rögzítő) alkalmazások. A Datamatrix olyan két dimenziós (2D), amely négyzet, vagy téglalap alakú. Az információt a négyszög X, és Y  irányban elhelyezkedő fekete, és fehér rácspontok kombinációja képviseli. Ennek okán a Datamatrix kód nem olvasható hagyományos lézer, vagy CCD szkennerekkel, olvasásához mindenképpen képalkotó szkenner szükséges. A kód különféle DPM eszközökkel (lézer gravírozó, ink jet nyomtatófej, pontozóeszköz), vagy papírra, öntapadós címkére nyomtatva állítható elő. A Datamarix kódot elsősorban információ sűrűsége, nagy adatkapacítása, kis helyigénye, kiváló olvasási tulajdonságai (hibatűrő képessége, nyomtatási minőséggel szembeni kissebb érzékenysége) helyezik előtérbe a többi vonalkóddal összehasonlítva. A Datamatrix kód információ tároló kapacitása révén rendkívül megbízhatóvá tehető. A Datamatrix szabvány hibafelismerő, és javító algoritmusól is gondoskodik, melyet a felhasználó különböző szintekre állíthat be. A fenti körülmények miatt még az olyan Datamatrix vonalkódok is sikeresen, adatveszteség nélkül olvashatók, melyek karcolások, tépések, foltok, vagy lyukak miatt sérültek, esetenként  felületük több mint 20%-án. A Datamatrix kód a nyomtatási kontraszt tekintetében nem támaszt túlzott követelményeket, még gyengébb minőségű kódok is biztonsággal olvashatók a modern vonalkódolvasó eszközökkel. Ez a tulajdonság különösen az olyan alkalmazásoknál előnyös, ahol a vonalkód ki van téve a zsír, kosz, festék, vagy más vegyi bevonatok okozta szennyeződésnek. A Datamatrix nagy hibatűrőképessége szintén nagy előnyt képez az olyan alkalmazásoknál, ahol a kódot közvetlenül fémre, vagy más visszatükröző felületre nyomtatják.

QR kód

QR kód egyfajta 2-D (síkbeli) vonalkód, melyet a Denso Wave (a Denso Corporation részlege) fejlesztett ki, 1994-ben azzal az elsődleges céllal, hogy a jel hogy könnyen értelmezhető legyen az akkori olvasó berendezések által. A QR kód használata egyre szélesebb körű. Használják az iparban, logisztikában, de igazi népszerűségét a marketing alkalmazásokban, és a mobil telefonos megoldásokban érte le. Sajátosságai miatt alkalmas postai címek, telefonszámok, internetcímek, sőt akár GPS koordináták tárolására. Az egyre jobban elterjedő okostelefonok (Android, IPhone, Symbian, Windows Mobile, stb.) alkalmazásokat kínálnak a QR kód olvasására, sőt bizonyos programok Pl. Android Market a QR kódot is felhasználják a termékek, szolgáltatások azonosítására. A mai olvasóberendezések kíválóan olvassák a QR kódot nemcsak papírról, de akár a képernyőkről, sőt a mobiltelefonok kijelzőiről is. Ez újabb alkalmazások felé nyit kaput (mobil fizetés, mobil beléptetés, stb.)

A QR kód a hagyományos vonalkódokkal összehasonlítva a következő tulajdonságokkal rendelkezik: 
A hagyományos egydimenziós kódok maximum 20 karakter tárolására alkalmasak, ezzel szemben a QR kód információ tartalma ennek több tucat szorosától egészen a több százszorosáig terjedhet. A QR kód mindenféle adat kódolására alkalmas beleértve a numerikus, alfanumerikus karaktereket, a Kanji, Kana, Hiragana jelkészleteket, a bináris, és kontrol kódokat.

QR kód adat kapacitása
Csak numerikus Max. 7,089 karakter
Alfanumerikus Max. 4,296 karakter
Bináris (8 bites) Max. 2,953 bájt
Kanji, Kana(teljes sz.) Max. 1,817 karakter

Kis nyomtatási méret Mivel a QR kód mind horizontális, mind vertikális irányban adatokat hordoz, ezért a hagyományos 1D vonalkódok adatsűrűségének tízszeresére képes. (Kisebb nyomtatási méretben a Micro QR kód is rendelkezésre áll.) Kanji és Kana képesség Mivel a QR kódot Japánban fejlesztették ki, ezért képes a JIS Level 1 és Level 2 kanji karakterek kódolására is. Japán nyelv használata esetén egy teljes szélességű Kana, vagy Kanji karakter 13 biten kerül kódolásra, mely a QR kódnak több mint 20 % nagyobb információ sűrűséget a többi 2D kóddal összehasonlítva. Ellenáll a sérüléseknek, és szennyeződéseknek A QR kód redundáns felépítésű, ezért a kód akkor is rekonstruálható, ha annak egy része sérült, vagy szennyeződött.

Bármely irányból olvasható

A QR kód nagy sebességgel, tetszőleges irányból olvasható (omnidirekcionális). A QR kód ezen tulajdonságát a kód három sarkában található helyzet meghatározó jelek biztosítják. Ezek a helyzet meghatározó jelek stabil nagy sebességű olvasást biztosítanak, és segítenek a háttérzavarok elnyomásában.

Strukturált appendálási funkció

A QR kód több adatterületre osztható, és ugyanígy a több QR kódban tárolt adatok egyetlen QR kódba konvertálhatók. Egy szimbólum max. 16 kódba osztható, mely különösen a keskeny területekre történő nyomtatás során hasznos.

Ugyanaz az adathalmaz olvasható a felső kódból, mint az alsó négy QR kódból.