Hogyan készítsünk QR-kódot olvashatatlanul
QR-kód generációs algoritmus
A QR-kód egy monokróm kép, amelyen egyes eszközök (például egy speciális alkalmazással rendelkező okostelefon) felismerik a szöveget. Ez a szöveg nemcsak egyszerű kifejezés lehet, hanem bár nem szerepel a hivatalos specifikáció, link, telefonszám vagy névjegykártya. Az ilyen kódokat leggyakrabban a link kódolására használják, és poszterre vagy névjegykártyára nyomtatják.
Ez a cikk egy részletes használati létre egy QR-kód példákkal minden lépést, amely előírja, csak az alapvető készség, hogy a munka a bináris adatokkal és rendelkezik olyan programozási nyelvet (ha azt szeretnénk, hogy hozzon létre egy automatikus QR kód generátor).
E cikk alapjaként a “QR Code Demystied” Jason Brown (Jason Brown) ciklusa (Jason Brown). Ezekben a cikkekben sok árnyalat hiányzott, ami problémákat okozott nekem. Mindezen árnyalatokat figyelembe veszik és itt említik.
A QR-kód létrehozásának folyamata számos egyértelmű lépésre oszlik:
- Adatkódolás.
- Szolgáltatási információk hozzáadása és kitöltése.
- Az információk szétválasztása a blokkokról.
- Bytes korrekció létrehozása.
- Uniós blokkok.
- Információk a QR-kódra.
Adatkódolás
A QR-kód több adatkódolási módszert támogat, attól függően, hogy mely szimbólumokat használják: Digitális, alfanumerikus, Kanji (Sino-japán hieroglifák) és a túlterhelt kódolás. A digitális kódolás csak 0 és 9 közötti számjegyeket jelent, a latin ábécé, a számok és a szimbólumok $% *+-./: És a tér, nem fogom figyelembe venni Kanji-t, és a kódolási bájtok egyáltalán nem igényelnek. Először létre kell hoznia egy üres bitszekvenciát, amely tovább fog kitölteni.
Digitális kódolás
Ez a típusú kódolás 10 bitet igényel 3 karakterhez. A karakterek teljes sorozata 3 számjegycsoportba kerül, és minden csoport (háromjegyű szám) egy kicsit bináris számra kerül, és hozzáadódik a bitszekvenciához. Ha a karakterek száma nem több 3, akkor ha 2 karakter van a végén, a kapott kétjegyű szám 7 bitgel van kódolva, és ha 1 szimbólum, akkor 4 bit.
Például van egy karakterlánc “”, amelyet kódolni kell. Számokba illesztjük, és 78-at, akkor mindegyiküket bináris megjelenésbe fordítjuk: és egy szálba egyesítjük:
Alfanumerikus kódolás
Ebben az esetben 2 karakter szükséges 11 bit információt. A bemeneti folyam karakterekből oszlik csoport 2, a csoport minden egyes szimbólum szerint van kódolva az alábbi táblázat, az értéke az első karakter a csoport szorozva 45, és hozzáadjuk az érték a második szimbólum. A kapott számot egy kicsit bináris számra fordítják, és hozzáadjuk a bitszekvenciához. Ha az utolsó 1. csoportban van, akkor az értéke azonnal 6 bites számmal van kódolva, és hozzáadódik a bitszekvenciához.
Asztal 1. Szimbólumértékek alfanumerikus kódolásban.
0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | nyolc | kilenc | A | B | C | D | E |
0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | nyolc | kilenc | tíz | tizenegy | 12 | 13 | tizennégy |
F | G | H | ÉN | J | K | L | M | N | O | P | Q | R | S | T |
15 | 16 | 17 | tizennyolc | 19 | húsz | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 |
U | V | W | X | Y | Z | Tér | $ | % | * | + | – | . | / | : |
harminc | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 |
Például a “Hello” karakterlánc a következőképpen kódolódik. Csoportokra osztjuk: Ő, Ll, O; Megtaláljuk a szimbólumok megfelelő jelentését az egyes csoportokban: (17, 14), (21, 21), (24); Megtaláljuk az értéket minden csoporthoz: 17 * 45 + 14 =, 21 * 45 + 21 =, 24 = 24; Minden értéket bináris formába fordítjuk: =, =, 24 =; És mindezeket egy bitsorozatban kombináljuk:
Válogatás kódolás
Ez egy univerzális kódolási módszer, amely bármilyen karaktert kódolhat. A módszer egyetlen hátránya az információ viszonylag alacsony sűrűsége. Ebben az esetben a szöveget bármely kódolásban kódolják (az UTF-8-ban ajánlott), és a kapott bájtszekvenciát változatlanul veszik.
Például, a sorban „Habr”, által kódolt UTF-8 kódolással, az alábbi bájtok: ,,,,,, szükséges egyszerűen egyesítjük a bit be egy szál:
Szolgáltatási információk hozzáadása
Ebben a szakaszban meg kell szintjének meghatározása korrekció: minél magasabb ez az érték, annál nagyobb a megengedett szintet kár, hogy a kép és a kevesebb információt azonos méretű. A Corps 4 szintje van: L (megengedett legnagyobb 7% -os károsodás), m (15%), Q (25%) és H (30%). Leggyakrabban az m szint. Ha hozzáadni szeretné a rajzot a QR-kódhoz (a Habré-on több cikk van ezen a témában), akkor használja a H szintet.
Egy másik tulajdonság QR-kód a verziója (mint több, annál nagyobb méretű). 40 verzió van. A verziószám a kódolt információk számától és a korrekció szintjétől függ. A 2. táblázat a hasznos információ maximális mennyiségét mutatja a szolgáltatás (bitek) mellett, amely e verzió QR-kódjában kódolható. QR-kódunk verziója meghatározza ebből a táblázatból.
2. táblázat. Maximális információmennyiség.Sor – korrekciós szint, oszlop – verziószám.
1 | 2 | 3 | 4 | 5 | 6 | 7 | nyolc | kilenc | tíz | |
L | ||||||||||
M | ||||||||||
Q | ||||||||||
H | 72 |
tizenegy | 12 | 13 | tizennégy | 15 | 16 | 17 | tizennyolc | 19 | húsz | |
L | ||||||||||
M | ||||||||||
Q | ||||||||||
H |
21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | harminc | |
L | ||||||||||
M | ||||||||||
Q | ||||||||||
H |
31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | |
L | ||||||||||
M | ||||||||||
Q | ||||||||||
H |
Segédprogramok hozzáadása
Ekkor a korrekció szintjét már ki kell választani, és meghatározzák a verziót. Most van szükség, mielőtt az elsősorban a bit kapott az előző bekezdésben, hozzá az elején két területen: a módszer a kódolás és az adatmennyiség. A kódolási módszer egy 4 bites mező, amely a következő értékekkel rendelkezik: a digitális kódoláshoz, alfanumerikus és posty. Az adatok mennyisége az a szám, a kódolt szimbólumokat, és a fényes – a bájtok számát (és nem bit a kapott szekvencia), egy bináris számot egy bizonyos hosszúságú (határozza meg 3. táblázat).
3. táblázat. Az adatok adatszámának hossza.
1-9-es verzió | 10-26 | 27-40-es verzió | |
Digitális | 10 bit | 12 bit | 14 bit |
Alfanumerikus | 9 bit | 11 bit | 13 bit |
Válogatós | 8 bit | 16 bit | 16 bit |
Például egy “korrekcióhoz” kódolt bájt hosszúságú karakterlánc. A vonal szekvencia hossza – bit. A 2. táblázat használatával megállapítható, hogy a 6. verzió a legoptimálisabbat használja. A mező mennyiségének meghatározása a mi esetünkben 8 bit (3. táblázat). A kódolás módjának meghatározása az adatmennyiség mezője – (bináris formában). Ennek eredményeképpen a bitforrás szekvencia sorrendje>.
Ha a beérkezett szekvencia hossza a kiválasztott változat megengedett, akkor a verziót meg kell növelni, és elfogadja a szolgáltatási területek hozzáadását.
A specifikáció lehetővé teszi a vegyes kódolás használatát. Ez azt jelenti, hogy több adatcsoportot különböző módon kódolhatunk, és egy sorozatot kombinálhat. Ezt az alábbiak szerint: Az adatok kódoló eljárás 1> adatok száma 1> Adatok 1> Adatok kódoló eljárás 2> adatok száma 2> Adatok 2>, és így tovább.
Töltő
Ebben a szakaszban van egy adatbitszekvencia, a bitek száma, amelyek valószínűleg nem többszörös 8. A nullákkal kell kiegészíteni, hogy a hossza 8-ra festett legyen. Most a bit sorozata 8 bites csoportokra osztható, és beadja egy bájtos sorrend formájában (itt fogjuk ezt megtenni). Ha az aktuális bájt sorrendben lévő bitek száma kisebb, mint amennyire szüksége van a kiválasztott verzióra, hozzá kell adni a váltakozó bájtokhoz, és így van egy sor bájt, amelynek hossza megfelel a kiválasztott QR-kódnak.
Példa. Van egy sorrend: a bitek sorozata, amelynek hossza többszörös 8>; A nullákkal kiegészítjük, hogy hossza több mint 8: a bit szekvenciája, amelynek hossza több 8>; Most tegyük fel, hogy annak hossza egy kicsit, és a kiválasztott verziót, meg kell egy kicsit, akkor meg kell adni 24 „kitöltés” bit „(3 bájt): sorozata egy kicsit, amelynek hossza többszöröse 8> Kész.
Elkülönítése információ blokkok
A szekvenciát a byte, szerezhetők be az előző szakaszban, (a továbbiakban: az adatok) van osztva az összeg a blokkok hívja a változata és a szint a korrekció, amely a 4. táblázat mutatja. Ha a blokkok száma eggyel egyenlő, akkor ebben a szakaszban is kimarad.
4. táblázat. Blokkok száma.Sor – Javítás szinten oszlop – verziószám.
1 | 2 | 3 | 4 | 5 | 6 | 7 | nyolc | kilenc | tíz | |
L | 1 | 1 | 1 | 1 | 1 | 2 | 2 | 2 | 2 | 4 |
M | 1 | 1 | 1 | 2 | 2 | 4 | 4 | 4 | 5 | 5 |
Q | 1 | 1 | 2 | 2 | 4 | 4 | 6 | 6 | nyolc | nyolc |
H | 1 | 1 | 2 | 4 | 4 | 4 | 5 | 6 | nyolc | nyolc |
tizenegy | 12 | 13 | tizennégy | 15 | 16 | 17 | tizennyolc | 19 | húsz | |
L | 4 | 4 | 4 | 4 | 6 | 6 | 6 | 6 | 7 | nyolc |
M | 5 | nyolc | kilenc | kilenc | tíz | tíz | tizenegy | 13 | tizennégy | 16 |
Q | nyolc | tíz | 12 | 16 | 12 | 17 | 16 | tizennyolc | 21 | húsz |
H | tizenegy | tizenegy | 16 | 16 | tizennyolc | 16 | 19 | 21 | 25 | 25 |
21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | harminc | |
L | nyolc | kilenc | kilenc | tíz | 12 | 12 | 12 | 13 | tizennégy | 15 |
M | 17 | 17 | tizennyolc | húsz | 21 | 23 | 25 | 26 | 28 | 29 |
Q | 23 | 23 | 25 | 27 | 29 | 34 | 34 | 35 | 38 | 40 |
H | 25 | 34 | harminc | 32 | 35 | 37 | 40 | 42 | 45 | 48 |
31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | |
L | 16 | 17 | tizennyolc | 19 | 19 | húsz | 21 | 22 | 24 | 25 |
M | 31 | 33 | 35 | 37 | 38 | 40 | 43 | 45 | 47 | 49 |
Q | 43 | 45 | 48 | 51 | 53 | 56 | 59 | 62 | 65 | 68 |
H | 51 | 54 | 57 | 60 | 63 | 66 | 70 | 74 | 77 | 81 |
Meghatározása a bájtok számát az egyes blokkokban
Ehhez a bájtok teljes számát meg kell osztani (meghatározhatja az adatokból származó bájtok mennyiségét, vagy a számot a 2. táblázatban nyolcra oszthatja) az adatblokkok számával. Ha ez a szám nem egész, akkor meg kell határoznia a divízió egyenlegét. Ez a maradék határozza meg, hogy hány blokkot kiegészítenek (ilyen blokkok, a bájtok száma, amelyek több, mint a többieknél). A várakozással ellentétben a kiegészített blokkok nem lehetnek az első blokkok, hanem az utolsó.
Például, a 9-es verzió és a szintje a korrekció M az adatmennyiség – bájt, a blokkok száma – 5. Az adatbájt összegének a blokkok számát, 36 bájtot és 2 bájtot kapunk a fennmaradó részben. Ez azt jelenti, hogy az adatblokkok a következő méretekkel rendelkeznek: 36, 36, 36, 37, 37 (BYTE). Ha a maradék nem volt, hogy mind az 5 blokk 36 bájt méretű lenne.
Töltőblokkok
A blokk teljesen az adatokból származó bájtokkal van kitöltve. Amikor az aktuális blokk teljesen kitöltött, a sor a következőkre kerül. Az adatbájtoknak elegendőnek kell lenniük pontosan minden blokkhoz, sem több és nem kevesebb.
Bytes korrekció létrehozása
A következő algoritmust minden egyes adatblokkra (ha az adatblokk egy, akkor egyszerűen az adatokhoz).
Ez az algoritmus alapján a Reda-Solomon algoritmus. Az első dolog az, hogy meghatározza, hogy hány bájt a korrekciós értéket kell létrehozni (5. táblázat). A korrekciós bájtok számával meghatározzák az úgynevezett generáló polinomot (6. táblázat). Ez egy polinomnak nevezik, mert az eredeti módszer ugyanazon együtthatókkal rendelkező polinomot használ.
5. táblázat. A beállítási bájtok száma egységenként.Sor – korrekciós szint, oszlop – verziószám.
1 | 2 | 3 | 4 | 5 | 6 | 7 | nyolc | kilenc | tíz | |
L | 7 | tíz | 15 | húsz | 26 | tizennyolc | húsz | 24 | harminc | tizennyolc |
M | tíz | 16 | 26 | tizennyolc | 24 | 16 | tizennyolc | 22 | 22 | 26 |
Q | 13 | 22 | tizennyolc | 26 | tizennyolc | 24 | tizennyolc | 22 | húsz | 24 |
H | 17 | 28 | 22 | 16 | 22 | 28 | 26 | 26 | 24 | 28 |
tizenegy | 12 | 13 | tizennégy | 15 | 16 | 17 | tizennyolc | 19 | húsz | |
L | húsz | 24 | 26 | harminc | 22 | 24 | 28 | harminc | 28 | 28 |
M | harminc | 22 | 22 | 24 | 24 | 28 | 28 | 26 | 26 | 26 |
Q | 28 | 26 | 24 | húsz | harminc | 24 | 28 | 28 | 26 | harminc |
H | 24 | 28 | 22 | 24 | 24 | harminc | 28 | 28 | 26 | 28 |
21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | harminc | |
L | 28 | 28 | harminc | harminc | 26 | 28 | harminc | harminc | harminc | harminc |
M | 26 | 28 | 28 | 28 | 28 | 28 | 28 | 28 | 28 | 28 |
Q | 28 | harminc | harminc | harminc | harminc | 28 | harminc | harminc | harminc | harminc |
H | harminc | 24 | harminc | harminc | harminc | harminc | harminc | harminc | harminc | harminc |
31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | |
L | harminc | harminc | harminc | harminc | harminc | harminc | harminc | harminc | harminc | harminc |
M | 28 | 28 | 28 | 28 | 28 | 28 | 28 | 28 | 28 | 28 |
Q | harminc | harminc | harminc | harminc | harminc | harminc | harminc | harminc | harminc | harminc |
H | harminc | harminc | harminc | harminc | harminc | harminc | harminc | harminc | harminc | harminc |
6. táblázat. Gegorizáló polinomok.
A bájtok korrekciószáma | Polinom létrehozása |
7 | 87 ,,,,,, 21 |
tíz | , 67, 46, 61, 70, 64, 94, 32, 45 |
13 | 74 ,,,, 86 ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, |
15 | 8, 61, 91, 37, 51, 58, 58 ,,,, 5, 99, |
16 | , , , , , , 76, 3, 91, , , , , , , |
17 | 43 ,,,, 24 ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, , , |
tizennyolc | , , , 94, 97 ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, |
húsz | 17, 60, 79, 50, 61 ,,6 ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, , , , , , , |
22 | , , , , 93, 14 ,, 53, 74, 8, 98, 80, , , , , , |
24 | , , , 48 ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, II |
26 | , , , 2 ,,,,,,,,,,,,,,,,,,, y |
28 | , , , , , , , , , , , , , 27 ,, 21, 43, 87, 42 ,,,, 37, 9, |
harminc | 41 ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, , |
A ciklus végrehajtása előtt egy tömb elkészítéséhez szükséges, amelynek hossza megegyezik az aktuális blokkban lévő bájtok számával és a beállítási bájtok számával, és töltse ki az aktuális bájtok kezdetét egység, és a nullák vége.
Az ebben a listában leírt ciklust többször is megismételjük, mivel az adatbájtokat az aktuális blokk tartalmazza.
- A tömb első elemét elkészítjük, az értéket egy A változóban mentjük, és eltávolítjuk azt a tömbből (az alábbi értékek balra tolódnak balra, az utolsó elem nulla) van kitöltve).
- Ha az ASNA nulla, akkor hagyja ki a következő műveleteket (a lista végéig), és menjen a ciklus következő iterációjához.
- Megtaláljuk a megfelelő számot és a 8. táblázatban szereplő számot, írja be a B változóba.
- Ezután n első elemek esetén, ahol n a korrekciós bájtok száma, i – a ciklusszámláló:
- Az i-MU értékét előállító polinom hozzá kell adni a b érték, és írja le ezt az összeget a változó (a polinom maga nem változik).
- Ha több, akkor a maradékot kell használni, ha elosztása (pontosan, nem).
- Keresse meg a megfelelő értéket a 7. táblázatban és végezze el a felvert hozzáadásával a modul 2 (XOR, sok programozási nyelvek üzemeltető ^) a IM értéket az elkészített tömbben, és levelet az eredő érték az i-edik cella az előkészített sor.
Az előkészített tömb első N bájtja a ciklus után – és vannak korrekciós bájtok. Minden egyes adatblokk esetében a megfelelő korrekciós bájt blokkot kapunk.
Nem tud semmit megérteni? Én is. Nézd meg a példát, és minden világos lesz.
7. táblázat. Galois Field.Ez a táblázat – a Galois mező hosszának értékei automatikusan vycheslit lehet.
0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | nyolc | kilenc | tíz | tizenegy | 12 | 13 | tizennégy | 15 |
1 | 2 | 4 | nyolc | 16 | 32 | 64 | 29 | 58 | 19 | 38 |
16 | 17 | tizennyolc | 19 | húsz | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | harminc | 31 |
76 | 45 | 90 | 3 | 6 | 12 | 24 | 48 | 96 |
32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 |
39 | 78 | 37 | 74 | 53 | 35 |
48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | 56 | 57 | 58 | 59 | 60 | 61 | 62 | 63 |
70 | 5 | tíz | húsz | 40 | 80 | 93 |
64 | 65 | 66 | 67 | 68 | 69 | 70 | 71 | 72 | 73 | 74 | 75 | 76 | 77 | 78 | 79 |
95 | 97 | 47 | 94 | 15 | harminc | 60 |
80 | 81 | 82 | 83 | 84 | 85 | 86 | 87 | 88 | 89 | 90 | 91 | 92 | 93 | 94 | 95 |
91 |
96 | 97 | 98 | 99 | ||||||||||||
67 | 17 | 34 | 68 | 13 | 26 | 52 |
31 | 62 | 59 | 51 |
23 | 46 | 92 | 79 | 33 | 66 | 21 | 42 | 84 |
77 | 41 | 82 | 85 | 73 | 57 |
99 | 63 |
75 | 49 | 98 | 55 | 87 | 65 |
25 | 50 | 7 | tizennégy | 28 | 56 | 83 |
81 | 89 | 43 | 86 | 69 | kilenc |
tizennyolc | 36 | 72 | 61 | tizenegy | 22 |
44 | 88 | 27 | 54 | 71 | 1 |
8. táblázat. Az inverz galois mező.Ez a táblázat kiszámítható a 7. táblázatból.
0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | nyolc | kilenc | tíz | tizenegy | 12 | 13 | tizennégy | 15 |
– | 0 | 1 | 25 | 2 | 50 | 26 | 3 | 51 | 27 | 75 |
16 | 17 | tizennyolc | 19 | húsz | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | harminc | 31 |
4 | tizennégy | 52 | 28 | nyolc | 76 |
32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 |
5 | 47 | 36 | 15 | 33 | 53 | tizennyolc | 69 |
48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | 56 | 57 | 58 | 59 | 60 | 61 | 62 | 63 |
29 | 39 | kilenc | 77 |
64 | 65 | 66 | 67 | 68 | 69 | 70 | 71 | 72 | 73 | 74 | 75 | 76 | 77 | 78 | 79 |
6 | 98 | 48 | 37 | 16 | 34 |
80 | 81 | 82 | 83 | 84 | 85 | 86 | 87 | 88 | 89 | 90 | 91 | 92 | 93 | 94 | 95 |
54 | 19 | 92 | 56 | 70 | 64 |
96 | 97 | 98 | 99 | ||||||||||||
harminc | 66 | 72 | 58 | 40 | 84 | 61 |
94 | tíz | 21 | 43 | 78 | 87 |
7 | 99 | 13 | 74 | 49 | 24 |
38 | 17 | 68 | 35 | 32 | 46 |
55 | 63 | 91 | 97 |
86 | húsz | 42 | 93 | 60 | 57 | 83 | 71 | 65 |
31 | 45 | 67 | 23 | 73 | 12 |
59 | 82 | 41 | 85 | 96 | 62 | 90 |
89 | 95 | 81 | tizenegy | 22 | 44 |
79 | 80 | 88 |
Példa. Itt minden byte én lesz bemutató formájában decimális számok 0-tól a forrás blokk az adatokat:
Használt 2. változat Javítás szint H. Ebben az esetben, akkor létre kell hozni 28 byte-korrekció (5. táblázat), és a termelő polinom (6. táblázat):
Létrehozása array (elkészített tömb), hogy 28 elemeket és töltse meg adatok byte:
Írok majd részletesen az első lépés a ciklus, a többi formájában kész tömb. Az első elem a tömb – akkor azt eltávolítjuk az előkészített tömb:
A 8. táblázatban, azt látjuk, hogy betartását – 6; Mi hozzá a modult a modul egyes számú generáló polinom:
A generáló polinom minden egyes számához a 7. táblázatban megfelelünk:
És javítási művelet vert összeadást 2 egy előkészített tömböt:
Ismételjük ezeket az intézkedéseket 16-szor (16 bájt adat). Ennek eredményeképpen a következő korrekciós bájtokat kapják:
Minden lépcső létrehozási byte korrekció a példában.
Uniós blokkok
Számos adatblokkot és ugyanazt a korrekciós bájt blokkot tartalmazunk, azokat egy bájtáramba kell kombinálni. Ez a következőképpen zajlik: egy byte információt veszünk minden adatblokkot, amikor a sorban jön az utolsó blokk, bájt veszünk, és felváltva az első blokk. Így tovább folytatódik, amíg a bájtok minden blokkban elfogynak. Ha nincs bájt az aktuális blokkban, akkor kihagyják (ez történik, ha a szokásos blokkok már üresek, és a kiegészítésben még egy bájt van). Hasonlóképpen, korrekciós bájt blokkokat kell készítenie. Ezek ugyanabban a sorrendben vannak, mint a megfelelő adatblokkok.
Ennek eredményeképpen valami ilyesmi: az 1. adatblokk 1. bájtja> 1. bájtja az 1. bájlás 1. bájtja az 1. adatblokk N-TH DATA blokkjának 1. bájtja> (M – 1) edik bájt az 1. adatblokk> (M – 1) -edik bájtja az N-edik adat blokk> Mr. byte K-edik adat blokk> Mr. byte N-edik adat blokk> 1. byte az 1. blokk a A 2. korrekciós bájt első bájtja> 1. bájtja a korrekciós bájt 1. bájlásának 1. blokkjának 1. bájlásának 1. bájtja> Az 1. blokkbájt korrekciós bájtjának 1. bájtjának 1. blokkja> L-TH bájtja BYTE N-TH blokk byte korrekció>. Itt n az adatok száma blokkok, M – a bájtok számát az adatblokk hagyományos tömb, L a száma korrekciós bájt, k – az adatok száma blokkok mínusz a száma komplementer adatblokkok (azok, akiknek 1 bájt több).
Információk a QR-kódra
Van egy soros byte, amely készen áll annak érdekében, hogy a vászonra kerüljön. A vászon modulokból áll – elemi négyzetek.
Alapvető elemek
A QR-kód csak a verziótól függ. Az első verzióhoz ez 21 modul, és a vezetői változatok méreteit a 9. táblázat határozza meg. Általában tartalmazza az összehangolási minták (egy kicsit később) helyét, de a vászon mérete az utolsó + 7 modulok szerint definiálható. Szeretném felhívni a figyelmet arra, hogy a francia bekezdés, a fehér modulok kerete 4 modul szélessége, – a QR-kód teljes része, és nem vehető figyelembe. Ennek ellenére a fekete modulok pontos részének magasságát jelöljük, és indítsa el a jelentést a bal felső sarokban ((0, 0) – a bal felső sarkában lévő bal felső sarkában).
9. táblázat. A kiegyenlítési minták helye.Top String – Verziószám.
1 | 2 | 3 | 4 | 5 | 6 | 7 | nyolc |
– | tizennyolc | 22 | 26 | harminc | 34 | 6, 22, 38 | 6, 24, 42 |
kilenc | tíz | tizenegy | 12 | 13 |
6, 26, 46 | 6, 28, 50 | 6, 30, 54 | 6, 32, 58 | 6, 34, 62 |
tizennégy | 15 | 16 | 17 | tizennyolc |
6, 26, 46, 66 | 6, 26, 48, 70 | 6, 26, 50, 74 | 6, 30, 54, 78 | 6, 30, 56, 82 |
kilenc | húsz | 21 | 22 | 23 |
6, 30, 58, 86 | 6, 34, 62, 90 | 6, 28, 50, 72, 94 | 6, 26, 50, 74, 98 | 6, 30, 54, 78, |
24 | 25 | 26 | 27 | 28 |
6, 28, 54, 80, | 6, 32, 58, 84, | 6, 30, 58, 86, | 6, 34, 62, 90, | 6, 26, 50, 74, 98, |
29 | harminc | 31 | 32 |
6, 30, 54, 78, , | 6, 26, 52, 78, , | 6, 30, 56, 82, , | 6, 34, 60, 86, , |
33 | 34 | 35 | 36 |
6, 30, 58, 86, , | 6, 34, 62, 90, , | 6, 30, 54, 78, , , | 6, 24, 50, 76, , , |
37 | 38 | 39 | 40 |
6, 28, 54, 80, , , | 6, 32, 58, 84, , , | 6, 26, 54, 82, , , | 6, 30, 58, 86, , , |
Keresési minták
Ezek olyan minták, amelyek egy olyan fekete négyzetméteres mérés modulonként, amelyet fehér modulok keretével vesznek körül, amelyeket fekete modulok keretében vesznek körül, amelyeket a fehér modulok kerete vesz körül, csak az oldalról, ahol nincs ferde. A keresési minták a felső és a bal sarkokban találhatók (3).
igazítása minták
A 2. verzióból kiindulva 1-től 1-es méretű fekete négyzetet jelent, amelyet fehér modulok keretével vesznek körül, amelyet egy fekete modulok keretében vesznek körül, ennek eredményeként ez a minta 5-5-ös méretű. Olyan helyek, ahol a szintezési minták találhatók a 9. táblázatban. Pontosabban, a rács függőleges és vízszintes csomópontjait jelzik, ahol a minták központi moduljai találhatók. Például, ha a táblázat van írva 6, 22, 38, ez azt jelenti, hogy a modul központokat kell elhelyezni a következő pontokban: (6, 6), (6, 22), (6, 38), (22, 6 ), (22 22), (22, 38), (38, 6), (38, 22), (38, 38). Van egy fontos állapot: a szintezési mintákat nem szabad keresési mintákra. Ez az, amikor a verzió nagyobb, mint 6, a pontokon (első, első), (első, utolsó) és (az utolsó, az első, első) szintezési minták nem lehetnek. Példánkban ez (6, 6), (6, 38) és (38, 6).
Szinkronizálási sávok
Minden egyszerű itt. A csíkok a bal felső burkolat legalacsonyabb fekete-fekete moduljától kezdve, váltakozó fekete-fehér modulok, lefelé és jobbra a keresési mintákkal szemben. A szintezési minta rétegezésénél változatlanul kell maradnia.
Verziószám
Ezeket az elemeket a 7. verzióból használják. A verzió kódja 2 helyen van, és a tükör, azaz a modul színének meghatározása a koordinátákban (X, Y), az egyik biztonságosan jelezheti ugyanezt a színt a koordinátákban (Y, X). A helyszíneken lévő modulok az alábbi ábra és a 10. táblázat szerint épülnek fel (1 – fekete, 0 – fehér).
Táblázat-verzió kódok.
Változat | Verziószám |
7 | |
nyolc | |
kilenc | |
tíz | |
tizenegy | |
12 | |
13 | |
tizennégy | |
15 | |
16 | |
17 | |
tizennyolc | |
19 | |
húsz | |
21 | |
22 | |
23 | |
24 | |
25 | |
26 | |
27 | |
28 | |
29 | |
harminc | |
31 | |
32 | |
33 | |
34 | |
35 | |
36 | |
37 | |
38 | |
39 | |
40 |
Maszk kód és korrekciós szint
Ezt a kódot, valamint az előzőt 2 helyen duplikálja: a bal felső keresési minta mellett és az alsó és jobb keresési minták mellett (az elem szenved a rést). Különösen titkosítva van egy maszkkóddal (egy kicsit később) és a korrekciós kóddal. Az asztali maszkot az utolsó lépésben határozzák meg, amikor minden más szabad hely tele van adatokkal. Annak a ténynek köszönhetően, hogy a maszk egy jobb opció alapján van kiválasztva (ehhez át kell mennie az összes maszkon keresztül), hogy hozzáadjon egy maszk kódot, és a korrekció szintje többször is vissza kell térnie. Eddig nem adja hozzá ezt az elemet. Az ábra azt mutatja, hogy pontosan az elem modulja épült, valamint a piros modul, amely mindig fekete.
Asztali maszk kódok és szint korrekció.
Korrekciós szint | Maszk kód | Kód |
L | 0 | |
L | 1 | |
L | 2 | |
L | 3 | |
L | 4 | |
L | 5 | |
L | 6 | |
L | 7 | |
M | 0 | |
M | 1 | |
M | 2 | |
M | 3 | |
M | 4 | |
M | 5 | |
M | 6 | |
M | 7 | |
Q | 0 | |
Q | 1 | |
Q | 2 | |
Q | 3 | |
Q | 4 | |
Q | 5 | |
Q | 6 | |
Q | 7 | |
H | 0 | |
H | 1 | |
H | 2 | |
H | 3 | |
H | 4 | |
H | 5 | |
H | 6 | |
H | 7 |
Adatok hozzáadása
A vászon összes fennmaradó szabad helyét az oszlopok lebontják: minden 2 modul, nem számít, hogy mi van ezeken a modulokban, a szinkronizálás időzítőcsíkján, amelyet egyszerűen kihagyott. A kitöltés a jobb alsó sarokban kezdődik, az oszlopon jobbra halad, az alulról felfelé. Ha az aktuális modul elfoglalt (például szinkronizációs sáv vagy szintezési minta), akkor egyszerűen kihagyott. Ha eléri az oszlop tetejét, a mozgás folytatódik az oszlop jobb felső sarkából, amely balra helyezkedik el, és a felülről lefelé halad. Miután elérte a Nizát, a mozgás folytatódik az oszlop jobb alsó sarkából, amely balra helyezkedik el, és felfelé halad. És így tovább, amíg az összes szabad hely kitölti.
A bit kitöltése az adatbájtok bitén kívül történik, és 1 fekete modul, és 0 – fehér. Ha az adatok nem elég, a fennmaradó hely tele van nulla modulokkal.
Ugyanakkor az egyik maszk minden egyes modulon van. Összes maszkok 8 darab (0 és 7 között), a listájuk az asztalnál Ha az asztalról származó kifejezés nulla, akkor a modul színe invertálódik, különben változatlan marad. A maszk csak adatmodulokra vonatkozik.
Asztal maszkok.X – oszlop, Y – String,% – egyenleg a divízióból, / – egész szám.
Maszk szám | Maszk |
0 | (X + y)% 2 |
1 | Y% 2 |
2 | X% 3 |
3 | (X + y)% 3 |
4 | (X / 3 + y / 2)% 2 |
5 | (X * y)% 2 + (x * y)% 3 |
6 | ((X * y)% 2 + (x * y)% 3)% 2 |
7 | ((X * y)% 3 + (x + y)% 2)% 2 |
A maszk különböző módon van kiválasztva: egyesek mindig ugyanazokat használják, a többiek véletlenszerűek, de a specifikáció ragaszkodik ahhoz, hogy minden maszkot értékeljék és a legoptimálisabb. Az értékelési módszer több időt igényel, de semmi szörnyű, ha nem az optimális maszk kiválasztásra kerül, így nem szükséges használni, de még mindig beszélek róla. A kiválasztott maszkból a maszk kódja és a korrekció szintje függ (lásd. a fenti), most az a tétel hozzáadása.
A legjobb maszk kiválasztása
Ez a rész nem kötelező, és ha már döntött a maszkok megválasztásáról és hozzáadott adatokat a vászonra, akkor a QR-kód készen áll.
Ennek az eljárásnak a lényege, hogy QR-kódot generáljon a nyolc maszkok mindegyikéből, hogy minden egyes büntetőüveget egy adott szabályok szerint töltsük fel, és válasszon ki egy legkisebb szemüveggel rendelkező maszkot. Ne feledje, hogy az adatokkal a maszk kódja és a korrekció szintje hozzáadódik a vászonhoz.
1. szabály
Vízszintesen és függőlegesek minden 5 és több egymást követő egymást követő, azonos színű, egymást követő egymást követő modulok felhalmozódott a mínusz 2 ponttal egyenlő pontok számával. Ebben és minden más szabályban a francia bekezdés nem tekinthető figyelembe, minden a fő területre korlátozódik.
2. szabály
Az azonos színű modulok mindegyik négyzetére a 2-2.
3. szabály
A CHBCHCHCHCHBCH modulok minden egyes sorrendjében 4 fehér modul, az egyik oldala (vagy a 2. azonnal) 40 pontot adunk hozzá (függőlegesen vagy vízszintesen). Egyszerűen tegye ezeket az elemeket:
Példánkban csak 3 ilyen elem, amelyre további pontokat kap (nem feltétlenül ezeknek az elemeknek a keresési mintával kell metszeniük):
4. szabály
Az ezen a lépcsőn lévő pontok száma a fekete-fehér modulok számától függ. A közelebb az 50% -os arány 50% -kal, annál jobb. Az első dolog, hogy meg kell osztani a fekete modulok számát a modulok teljes számához (ismét a francia bekezdés nem tekinthető).
Ezután megszorozzák a kapott eredményt, és elveszik
Dobja ki a tizedes részt, és vegye figyelembe a számot a modulban.
Szorozzuk meg a kapott számot 2-en.
Adja hozzá ezt a számot a büntetőpontok teljes számához.
Eredmény
Végül minden maszk esetében megkapja a büntetőpont számát, csak kevesebb pontot kell választania, és a QR-kódod teljesen készen áll. Ami a gyakorlatban azt mutatja, minél alacsonyabb a maszk száma, annál nagyobb a valószínűsége, hogy jobb lesz, ezért lehet kiválasztani egy jobb maszkot az optimalizáláshoz, de például 4-től.
Comments are closed, but trackbacks and pingbacks are open.