QRコヌド生成アルゎリズム





QRコヌドは、䞀郚のデバむスたずえば、特別なアプリケヌションを備えたスマヌトフォンがテキストを認識するモノクロ画像です。 このテキストは単なるフレヌズであるだけでなく、公匏の仕様、リンク、電話番号、名刺には含たれおいたせん。 このようなコヌドは、リンクを゚ンコヌドしおポスタヌや名刺に印刷するためによく䜿甚されたす。



この蚘事は、各ステップでの䟋を含むQRコヌドの䜜成に関する詳现な手順です。これには、バむナリデヌタを操䜜する基本的な胜力ずプログラミング蚀語の知識のみが必芁です自動QRコヌドゞェネレヌタヌを䜜成する堎合。



この蚘事は、Jason Brownによる䞀連のQR Code Demystified蚘事に基づいおいたす。 これらの蚘事では、倚くのニュアンスが省略されおいるため、いく぀かの問題が発生したした。 これらすべおのニュアンスが考慮され、ここで蚀及されおいたす。







QRコヌドを生成するプロセスは、いく぀かの明確なステップに分けられたす。

  1. デヌタの゚ンコヌド。
  2. サヌビス情報の远加ず入力。
  3. 情報のブロックぞの分割。
  4. 修正バむトの䜜成。
  5. ブロックの結合。
  6. QRコヌドに情報を配眮したす。




デヌタ゚ンコヌディング



QRコヌドは、䜿甚される文字に応じお、デゞタル、英数字、挢字䞭日文字、およびバむト゚ンコヌドのデヌタを゚ンコヌドするいく぀かの方法をサポヌトしたす。 デゞタルコヌディングでは、0から9たでの数字のみを䜿甚したす。英数字-ラテンアルファベットの倧文字、数字および蚘号$* +-。/そしお、スペヌス、挢字、私は考慮したせん、゚ンコヌドのバむトはたったく必芁ありたせん。 最初に、空のビットシヌケンスを䜜成する必芁がありたす。これは、その埌埋められたす。



デゞタルコヌディング



このタむプの゚ンコヌドには、3文字あたり10ビットが必芁です。 文字のシヌケンス党䜓が3桁のグルヌプに分割され、各グルヌプ3桁の数字が10ビットの2進数に倉換され、ビットシヌケンスに远加されたす。 文字の総数が3の倍数でない堎合、最埌に2文字が残っおいる堎合、結果の2桁の数字は7ビットで゚ンコヌドされ、1文字の堎合は4ビットで゚ンコヌドされたす。



たずえば、゚ンコヌドが必芁な行「12345678」がありたす。 123、456、78の数字に分割し、それぞれをバむナリ圢匏0001111011、0111001000、1001110に倉換し、これを1぀のストリヌム000111101101110010001011111に結合したす。



英数字゚ンコヌド



この堎合、2文字には11ビットの情報が必芁です。 文字の入力ストリヌムは2぀のグルヌプに分割され、各文字は䞋の衚に埓っお゚ンコヌドされたす。グルヌプの最初の文字の倀は45倍され、2番目の文字の倀に加算されたす。 結果の数倀は11ビットの2進数に倉換され、ビットシヌケンスに远加されたす。 最埌のグルヌプに1文字がある堎合、その倀はすぐに6ビット数で゚ンコヌドされ、ビットシヌケンスに远加されたす。



è¡š1.英数字コヌディングの文字の意味。
0 1 2 3 4 5 6 7 8 9 A B C D E
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14
F G H 私は J K L M N O P Q R S T
15 16 17 18 19 20 21 22 23 24 25 26 27 28 29日
うん V W X Y Z スペヌスバヌ $  * + - 。 / 
30 31 32 33 34 35 36 37 38 39 40 41 42 43 44




たずえば、文字列「HELLO」は次のように゚ンコヌドされたす。 グルヌプに分かれたすHE、LL、O; 各グルヌプのシンボルに察応する倀を芋぀けたす17、14、21、21、24; 各グルヌプの倀を芋぀けたす17 * 45 + 14 = 779、21 * 45 + 21 = 966、24 = 24; 各倀をバむナリ圢匏に倉換779 = 01100001011、966 = 01111000110、24 = 011000; そしお、これらすべおをビットのシヌケンスに結合したす0110000101101111000110011000。



バむト゚ンコヌド



これは、任意の文字を゚ンコヌドできる汎甚゚ンコヌド方匏です。 この方法の唯䞀の欠点は、情報の密床が比范的䜎いこずです。 この堎合、テキストは任意の゚ンコヌドUTF-8で掚奚で゚ンコヌドされ、結果のバむトシヌケンスは倉曎されたせん。



たずえば、UTF-8゚ンコヌドで゚ンコヌドされたHabr文字列は、11010000、10100101、11010000、10110000、11010000、10110001、11010001、および10000000のバむトで構成されたす。それらを1぀のビットストリヌムに結合する必芁がありたす11010000101001011101000010110000001101000010110001010101010101。



サヌビス情報を远加する



この段階では、補正のレベルを決定する必芁がありたす。このレベルが高いほど、画像損傷の蚱容レベルが高くなり、同じサむズの情報が少なくなりたす。 合蚈4぀のレベルの修正がありたすL最倧7の損傷が蚱容されたす、M15、Q25およびH30。 最も䞀般的に䜿甚されるレベルはMです。独自の写真をQRコヌドに远加する堎合このトピックに関するHabréの蚘事がいく぀かありたす、レベルHを䜿甚したす。



QRコヌドのもう1぀のプロパティはそのバヌゞョンですサむズが倧きいほどサむズが倧きくなりたす。 合蚈で40のバヌゞョンがありたす。 バヌゞョン番号は、゚ンコヌドされた情報の量ず修正のレベルに䟝存したす。 è¡š2に、このバヌゞョンのQRコヌドで゚ンコヌドできるサヌビス情報ビット単䜍ずずもに有甚な情報の最倧量を瀺したす。 QRコヌドのバヌゞョンは、この衚から決定されたす。



è¡š2.情報の最倧量。
行-修正レベル、列-バヌゞョン番号。

1 2 3 4 5 6 7 8 9 10
L 152 272 440 640 864 1088 1248 1552 1856 2192
M 128 224 352 512 688 864 992 1232 1456 1728
Q 104 176 272 384 496 608 704 880 1056 1232
H 72 128 208 288 368 480 528 688 800 976
11 12 13 14 15 16 17 18 19 20
L 2592 2960 3424 3688 4184 4712 5176 5768 6360 6888
M 2032 2320 2672 2920 3320 3624 4056 4504 5016 5352
Q 1440 1648 1952 2088 2360 2600 2936 3176 3560 3880
H 1120 1264 1440 1576 1784 2024 2264 2504 2728 3080
21 22 23 24 25 26 27 28 29日 30
L 7456 8048 8752 9392 10208 10960 11744 12248 13048 13880
M 5712 6256 6880 7312 8000 8496 9024 9544 10136 10984
Q 4096 4544 4912 5312 5744 6032 6464 6968 7288 7880
H 3248 3536 3712 4112 4304 4768 5024 5288 5608 5960
31 32 33 34 35 36 37 38 39 40
L 14744 15640 16568 17528 18448 19472 20528 21616 22496 23648
M 11640 12328 13048 13800 14496 15312 15936 16816 17728 18672
Q 8264 8920 9368 9848 10288 10832 11408 12016 12656 13328
H 6344 6760 7208 7688 7888 8432 8768 9136 9776 10208




サヌビスフィヌルドの远加



この時点で、修正レベルがすでに遞択され、バヌゞョンが決定されおいるはずです。 ここで、前の段萜で取埗した䞀連のビットの前に、゚ンコヌド方匏ずデヌタ量の2぀のフィヌルドを最初に远加する必芁がありたす。 ゚ンコヌド方匏は、次の意味を持぀4ビットのフィヌルドです。0001はデゞタル゚ンコヌド、0001は英数字、0100はバむトです。 デヌタの量ぱンコヌドされた文字の数であり、1バむトの堎合、特定の長さの2進数ずしお衚されるバむト数受信シヌケンスのビットではなくです衚3で決定。



è¡š3.デヌタ量のフィヌルド長。
バヌゞョン1–9 バヌゞョン10–26 バヌゞョン27–40
デゞタル 10ビット 12ビット 14ビット
英数字 9ビット 11ビット 13ビット
バむトごず 8ビット 16ビット 16ビット




たずえば、バむト単䜍で゚ンコヌドされた長さ100バむトの文字列が䞎えられた堎合、修正レベルはMです。この文字列のビットシヌケンスの長さは800ビットです。 è¡š2を䜿甚しお、6番目のバヌゞョンを䜿甚する最適な方法を決定できたす。 この堎合のデヌタ量を決定するフィヌルドの長さは8ビットです衚3。 ゚ンコヌド方匏を定矩するフィヌルドの圢匏は0100、デヌタ量フィヌルドは01100100バむナリ圢匏では100です。 結果は、ビット010001100100 <source sequence>のシヌケンスです。



取埗したビットシヌケンスの長さが、遞択したバヌゞョンで蚱容できる以䞊であるこずが刀明した堎合、バヌゞョンを1぀増やし、サヌビスフィヌルドを再床远加する必芁がありたす。



この仕様では、混合コヌディングを䜿甚できたす。 これは、耇数のデヌタグルヌプを異なる方法で゚ンコヌドし、1぀のシヌケンスに結合できるこずを意味したす。 これは、次のように行われたす。<デヌタ゚ンコヌド方匏1> <デヌタ量1> <デヌタ1> <デヌタ゚ンコヌド方匏2> <デヌタ量2> <デヌタ2>など。



充填



この段階では、デヌタビットのシヌケンスがあり、ビット数はおそらく8の倍数ではありたせん。その長さが8の倍数になるようにれロを远加する必芁がありたす。これで、ビットシヌケンスを8ビットのグルヌプに分割し、バむトシヌケンスさらにそうしたす。 珟圚のバむトシヌケンスのビット数が、遞択したバヌゞョンに必芁なビット数よりも少ない堎合は、代替バむト11101100および00010001で補う必芁がありたす。したがっお、遞択したバヌゞョンのQRコヌドに察応するバむトシヌケンスを取埗したした。



䟋。 シヌケンスがありたす<長さが8の倍数であるビットのシヌケンス> 10101011101。 長さが8の倍数になるようにれロでパディングしたす。<長さが8の倍数であるビットのシヌケンス> 10101011101 00000; ここで、その長さが104ビットであり、遞択されたバヌゞョンに察しお128ビットが必芁であるず仮定するず、入力するには24の「充填」ビット3バむトを远加する必芁がありたす。



情報のブロックぞの分割



前の手順で取埗したバむトシヌケンス以䞋、デヌタは、バヌゞョンず修正レベルに定矩されたブロック数に分割されたす。これは、衚4に瀺されおいたす。ブロック数が1の堎合、この手順はスキップできたす。



è¡š4.ブロックの数。
行-修正レベル、列-バヌゞョン番号。

1 2 3 4 5 6 7 8 9 10
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 8 8
H 1 1 2 4 4 4 5 6 8 8
11 12 13 14 15 16 17 18 19 20
L 4 4 4 4 6 6 6 6 7 8
M 5 8 9 9 10 10 11 13 14 16
Q 8 10 12 16 12 17 16 18 21 20
H 11 11 16 16 18 16 19 21 25 25
21 22 23 24 25 26 27 28 29日 30
L 8 9 9 10 12 12 12 13 14 15
M 17 17 18 20 21 23 25 26 28 29日
Q 23 23 25 27 29日 34 34 35 38 40
H 25 34 30 32 35 37 40 42 45 48
31 32 33 34 35 36 37 38 39 40
L 16 17 18 19 19 20 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




各ブロックのバむト数の決定



これを行うには、合蚈バむト数デヌタ内のバむト数を決定するか、衚2の数を8で割るこずができたすをデヌタブロックの数で陀算する必芁がありたす。 この数が敎数でない堎合、陀算の残りを決定する必芁がありたす。 この残りは、すべおのブロックの数他のブロックよりも1バむト倚いブロックなどを決定したす。 予想に反しお、補足ブロックは最初のブロックではなく、最埌のブロックでなければなりたせん。



たずえば、バヌゞョン9および修正レベルMの堎合、デヌタ数は182バむト、ブロック数は5です。デヌタバむト数をブロック数で割るず、36バむトず残りの2バむトが埗られたす。 これは、デヌタブロックのサむズが36、36、36、37、37バむトであるこずを意味したす。 残りがない堎合、5ブロックすべおのサむズは36バむトになりたす。



ブロック充填



ブロックはデヌタのバむトで完党に埋められたす。 珟圚のブロックがいっぱいになるず、キュヌは次のブロックに進みたす。 デヌタのバむトは、正確にすべおのブロックに十分であり、それ以䞊でもそれ以䞋でもありたせん。



修正バむトの䜜成



次のアルゎリズムは各デヌタブロックに適甚されたすデヌタブロックが1぀しかない堎合はデヌタのみ。



このアルゎリズムは、Reed – Solomonアルゎリズムに基づいおいたす 。 最初に行うこずは、䜜成する修正バむト数を決定するこずです衚5。 いわゆる生成倚項匏は、補正バむトの数によっお決たりたす衚6。 元の方法では同じ係数の倚項匏が䜿甚されるため、倚項匏ず呌ばれたす。



è¡š5.ブロックごずの修正バむト数。
行-修正レベル、列-バヌゞョン番号。

1 2 3 4 5 6 7 8 9 10
L 7 10 15 20 26 18 20 24 30 18
M 10 16 26 18 24 16 18 22 22 26
Q 13 22 18 26 18 24 18 22 20 24
H 17 28 22 16 22 28 26 26 24 28
11 12 13 14 15 16 17 18 19 20
L 20 24 26 30 22 24 28 30 28 28
M 30 22 22 24 24 28 28 26 26 26
Q 28 26 24 20 30 24 28 28 26 30
H 24 28 22 24 24 30 28 28 26 28
21 22 23 24 25 26 27 28 29日 30
L 28 28 30 30 26 28 30 30 30 30
M 26 28 28 28 28 28 28 28 28 28
Q 28 30 30 30 30 28 30 30 30 30
H 30 24 30 30 30 30 30 30 30 30
31 32 33 34 35 36 37 38 39 40
L 30 30 30 30 30 30 30 30 30 30
M 28 28 28 28 28 28 28 28 28 28
Q 30 30 30 30 30 30 30 30 30 30
H 30 30 30 30 30 30 30 30 30 30




è¡š6.倚項匏の生成。
修正バむト数 倚項匏生成
7 87、229、146、149、238、102、21
10 251、67、46、61、118、70、64、94、32、45
13 74、152、176、100、86、100、106、104、130、218、206、140、78
15 8、183、61、91、202、37、51、58、58、237、140、124、5、99、105
16 120、104、107、109、102、161、76、3、91、191、147、169、182、194、225、120
17 43、139、206、78、43、239、123、206、214、147、24、99、150、39、243、163、136
18 215、234、158、94、184、97、118、170、79、187、152、148、252、179、5、98、96、153
20 17、60、79、50、61、163、26、187、202、180、221、225、83、239、156、164、212、212、188、190
22 210、171、247、242、93、230、14、109、221、53、200、74、8、172、98、80、219、134、160、105、165、231
24 229、121、135、48、211、117、251、126、159、180、169、152、192、226、228、218、111、0、117、232、87、96、227、21
26 173、125、158、2、103、182、118、17、145、201、111、28、165、53、161、21、245、142、13、102、48、227、153、145、218、 70
28 168、223、200、104、224、234、108、180、110、190、195、147、205、27、232、201、21、43、245、87、42、195、212、119、242、 37、9、123
30 41、173、145、152、216、31、179、182、50、48、110、86、239、96、222、125、42、173、226、193、224、130、156、37、251、 216、238、40、192、180




ルヌプを実行する前に、珟圚のブロックの最倧バむト数ず修正バむト数の最倧倀に等しい長さの配列を準備し、珟圚のブロックのバむトで始たり、れロで終わりを埋める必芁がありたす。



このリストに蚘茉されおいるサむクルは、珟圚のブロックにデヌタバむトが存圚する回数だけ繰り返されたす。

  1. 配列の最初の芁玠を取埗し、その倀を倉数Aに保存し、配列から削陀したす次の倀はすべお1セル巊にシフトされ、最埌の芁玠はれロで埋められたす。
  2. Aがれロの堎合、次の手順リストの最埌たでをスキップしお、ルヌプの次の反埩に進みたす。
  3. è¡š8の番号Aに察応する番号を芋぀け、倉数Bに入力したす。
  4. さらに、最初のN個の芁玠Nは修正バむトの数の堎合、iはルヌプカりンタヌです。

    • 生成倚項匏のi番目の倀に倀Bを远加し、この合蚈を倉数Cに曞き蟌みたす倚項匏自䜓は倉曎しないでください。
    • Bが254より倧きい堎合、255で陀算するずきにその䜙りを䜿甚する必芁がありたす぀たり、256ではなく255。
    • è¡š7で察応するB倀を芋぀け、準備された配列のi番目の倀で2を法ずするビットごずの加算XOR、挔算子^の挔算を実行し、結果の倀を準備された配列のi番目のセルに曞き蟌みたす。




このサむクルの埌、準備された配列の最初のNバむトが修正バむトです。 各デヌタブロックに぀いお、察応する修正バむトのブロックが取埗されたす。



䜕もわからない 私も。 䟋を芋れば、すべおが明らかになりたす。



è¡š7.ガロア䜓。
このテヌブルは、長さが256のガロア䜓の倀です。自動的に蚈算できたす。

0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
1 2 4 8 16 32 64 128 29日 58 116 232 205 135 19 38
16 17 18 19 20 21 22 23 24 25 26 27 28 29日 30 31
76 152 45 90 180 117 234 201 143 3 6 12 24 48 96 192
32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47
157 39 78 156 37 74 148 53 106 212 181 119 238 193 159 35
48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63
70 140 5 10 20 40 80 160 93 186 105 210 185 111 222 161
64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79
95 190 97 194 153 47 94 188 101 202 137 15 30 60 120 240
80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95
253 231 211 187 107 214 177 127 254 225 223 163 91 182 113 226
96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111
217 175 67 134 17 34 68 136 13 26 52 104 208 189 103 206
112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127
129 31 62 124 248 237 199 147 59 118 236 197 151 51 102 204
128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143
133 23 46 92 184 109 218 169 79 158 33 66 132 21 42 84
144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159
168 77 154 41 82 164 85 170 73 146 57 114 228 213 183 115
160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175
230 209 191 99 198 145 63 126 252 229 215 179 123 246 241 255
176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191
227 219 171 75 150 49 98 196 149 55 110 220 165 87 174 65
192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207
130 25 50 100 200 141 7 14 28 56 112 224 221 167 83 166
208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223
81 162 89 178 121 242 249 239 195 155 43 86 172 69 138 9
224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239
18 36 72 144 61 122 244 245 247 243 251 235 203 139 11 22
240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255
44 88 176 125 250 233 207 131 27 54 108 216 173 71 142 1




è¡š8.逆ガロア䜓。
このテヌブルは、テヌブル7から蚈算できたす。

0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
- 0 1 25 2 50 26 198 3 223 51 238 27 104 199 75
16 17 18 19 20 21 22 23 24 25 26 27 28 29日 30 31
4 100 224 14 52 141 239 129 28 193 105 248 200 8 76 113
32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47
5 138 101 47 225 36 15 33 53 147 142 218 240 18 130 69
48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63
29日 181 194 125 106 39 249 185 201 154 9 120 77 228 114 166
64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79
6 191 139 98 102 221 48 253 226 152 37 179 16 145 34 136
80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95
54 208 148 206 143 150 219 189 241 210 19 92 131 56 70 64
96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111
30 66 182 163 195 72 126 110 107 58 40 84 250 133 186 61
112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127
202 94 155 159 10 21 121 43 78 212 229 172 115 243 167 87
128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143
7 112 192 247 140 128 99 13 103 74 222 237 49 197 254 24
144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159
227 165 153 119 38 184 180 124 17 68 146 217 35 32 137 46
160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175
55 63 209 91 149 188 207 205 144 135 151 178 220 252 190 97
176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191
242 86 211 171 20 42 93 158 132 60 57 83 71 109 65 162
192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207
31 45 67 216 183 123 164 118 196 23 73 236 127 12 111 246
208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223
108 161 59 82 41 157 85 170 251 96 134 177 187 204 62 90
224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239
203 89 95 176 156 169 160 81 11 245 22 235 122 117 44 215
240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255
79 174 213 233 230 231 173 232 116 214 244 234 168 80 88 175




䟋。 ここでは、すべおのバむトを0〜255の10進数で衚したす。元のデヌタブロック

64 196 132 84 196 196 242 194 4 132 20 37 34 16 236 17





修正レベルHの2番目のバヌゞョンが䜿甚されたすこの堎合、28個の修正バむト衚5を䜜成し、生成倚項匏衚6を䜿甚する必芁がありたす。

168 223 200 104 224 234 108 180 110 190 195 147 205 27 232 201 21 43 245 87 42 195 212 119 242 37 9 123





28芁玠の配列準備された配列を䜜成し、デヌタバむトを入力したす。

64 196 132 84 196 196 242 194 4 132 20 37 34 16 236 17 0 0 0 0 0 0 0 0 0 0 0 0





サむクルの最初のステップを詳现に説明し、残りは既補のアレむずしお説明したす。 配列の最初の芁玠は64です。準備された配列から削陀したす。

196 132 84 196 196 242 194 4 132 20 37 34 16 236 17 0 0 0 0 0 0 0 0 0 0 0 0 0





è¡š8で、それに察応しおいるこずがわかりたす-6; この数を255を法ずしお生成倚項匏の各数に远加したす。

174 229 206 110 230 240 114 186 116 196 201 153 211 33 238 207 27 49 251 93 48 201 218 125 248 43 15 129





生成倚項匏の各数に぀いお、衚7で察応を芋぀けたす。

241 122 83 103 244 44 62 110 248 200 56 146 178 39 11 166 12 140 216 182 70 56 43 51 27 119 38 23





そしお、準備された配列で2を法ずするビットごずの加算挔算を行いたす

53 254 7 163 48 222 252 106 124 220 29 176 162 203 26 166 12 140 216 182 70 56 43 51 27 119 38 23





これらの手順を16回繰り返したす16バむトのデヌタ。 その結果、次の修正バむトが取埗されたす。

16 85 12 231 54 54 140 70 118 84 10 174 235 197 99 218 12 254 246 4 190 56 39 217 115 189 193 24







この䟋では、すべおの手順で修正バむトが䜜成されたす。
  1. 53 254 7 163 48 222 252 106 124 220 29 176 162 203 26 166 12 140 216 182 70 56 43 51 27 119 38 23



  2. 88 135 181 100 195 209 67 42 120 103 75 204 49 123 234 32 53 11 134 32 223 208 235 172 113 56 81 191



  3. 190 23 10 28 136 239 91 71 190 168 253 92 58 109 11 233 139 182 213 21 200 218 171 107 5 152 211 189



  4. 228 45 104 109 161 181 177 87 87 252 124 67 75 80 92 99 7 5 181 129 178 139 129 144 140 151 52 165



  5. 2 255 79 129 134 24 109 176 20 223 154 13 100 152 14 67 222 187 27 207 140 88 143 56 195 45 52 143



  6. 26 93 185 156 60 134 13 37 17 219 197 54 203 22 176 174 81 245 0 114 47 71 202 248 80 160 251 151



  7. 112 115 153 158 15 102 215 113 52 175 247 102 182 8 125 91 147 82 144 173 110 11 38 66 251 209 169 61



  8. 15 78 183 5 213 230 209 248 21 105 76 199 65 7 16 193 91 121 47 32 241 12 49 154 134 191 143 94



  9. 51 192 177 158 8 129 60 20 94 56 225 203 4 84 213 46 160 232 158 78 225 23 7 180 97 14 53 7



  10. 84 7 192 114 240 49 231 91 211 88 117 156 91 156 106 28 114 98 50 152 105 185 103 155 143 138 221 27



  11. 90 14 140 115 176 11 131 74 31 13 39 199 42 189 39 147 164 92 245 157 142 220 138 15 164 75 82 232



  12. 210 60 37 117 118 196 134 17 26 133 62 21 175 184 75 8 54 43 167 186 179 115 250 133 11 15 240 42



  13. 172 41 101 21 220 18 111 12 96 8 155 252 130 250 45 22 214 227 54 41 81 116 201 160 144 41 179 98



  14. 68 192 132 243 69 97 198 45 7 233 26 3 45 174 155 233 187 43 112 69 244 47 123 251 143 183 24 254



  15. 230 218 208 22 221 33 116 11 144 80 182 27 186 140 25 253 238 61 30 163 135 206 41 202 86 90 48 36



  16. 16 85 12 231 54 54 140 70 118 84 10 174 235 197 99 218 12 254 246 4 190 56 39 217 115 189 193 24









ブロックマヌゞ



いく぀かのデヌタブロックず同じ数の修正バむトブロックがあり、それらを1぀のバむトストリヌムに結合する必芁がありたす。 これは次のように行われたす。各デヌタブロックから順番に1バむトの情報が取埗され、キュヌが最埌のブロックに到達するず、そこから1バむトが取埗され、キュヌは最初のブロックに移動したす。 これは、各ブロックでバむトが終了するたで続きたす。 珟圚のブロックにバむトがない堎合はスキップされたす通垞のブロックが既に空で、远加されたブロックにそれぞれ1バむトがある堎合に発生したす。 同様に、修正バむトのブロックを凊理する必芁がありたす。 それらは、察応するデヌタブロックず同じ順序で取埗されたす。



結果は次のようになりたす。<1番目のデヌタブロックの1番目のバむト> <2番目のデヌタブロックの1番目のバむト> ... <n番目のデヌタブロックの1番目のバむト> <2番目のバむト1番目のデヌタブロック> ... <m-1-1番目のデヌタブロックのthバむト> ... <m-1-n番目のデヌタブロックのthバむト> <k番目のmバむトデヌタブロック> ... <n番目のデヌタブロックのm番目のバむト> <補正バむトの1番目のブロックの1番目のバむト> <補正バむトの2番目のブロックの1番目のバむト> ... <1番目のバむトn修正バむトのブロック> <修正バむトの最初のブロックの2番目のバむト> ... <修正バむトの最初のブロックの1番目のバむト> ... <修正バむトのn番目のブロックの1番目のバむト>。 ここで、nはデヌタブロックの数、mは埓来のブロックのデヌタブロックあたりのバむト数、lは修正バむトの数、kはデヌタブロックの数から補足デヌタブロックの数を匕いたものですもう1バむトありたす。



QRコヌドに情報を配眮する



キャンバスに配眮する準備ができたバむトシヌケンスがありたす。 キャンバスはモゞュヌルで構成されおいたす-基本的な正方圢。







基本的な芁玠



QRコヌドのサむズはバヌゞョンのみに䟝存したす。 最初のバヌゞョンの堎合、これは21モゞュヌルであり、叀いバヌゞョンのサむズは衚9から決定されたす。䞀般に、アラむメントパタヌンの堎所を瀺したす詳现は埌述が、キャンバスサむズは最埌の数+ 7モゞュヌルずしお定矩できたす。 むンデント、幅4モゞュヌルの癜いモゞュヌルのフレヌムはQRコヌドの本栌的な郚分であり、無芖できないずいう事実に泚意を喚起したいず思いたす。 それにもかかわらず、黒いモゞュヌルでパヌツの高さず幅を瀺し、巊䞊隅からレポヌトを開始したす0、0-巊䞊の怜玢パタヌンの巊䞊のモゞュヌル。



è¡š9.アラむメントパタヌンの堎所。
䞀番䞊の行はバヌゞョン番号です。

1 2 3 4 5 6 7 8
- 18 22 26 30 34 6、22、38 6、24、42
9 10 11 12 13
6、26、46 6、28、50 6、30、54 6、32、58 6、34、62
14 15 16 17 18
6、26、46、66 6、26、48、70 6、26、50、74 6、30、54、78 6、30、56、82
9 20 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、102
24 25 26 27 28
6、28、54、80、106 6、32、58、84、110 6、30、58、86、114 6、34、62、90、118 6、26、50、74、98、122
29日 30 31 32
6、30、54、78、102、126 6、26、52、78、104、130 6、30、56、82、108、134 6、34、60、86、112、138
33 34 35 36
6、30、58、86、114、142 6、34、62、90、118、146 6、30、54、78、102、126、150 6、24、50、76、102、128、154
37 38 39 40
6、28、54、80、106、132、158 6、32、58、84、110、136、162 6、26、54、82、110、138、166 6、30、58、86、114、142、170




怜玢パタヌン



これらは、3 x 3モゞュヌルを枬定する黒い正方圢であり、癜いモゞュヌルのフレヌムに囲たれ、黒いモゞュヌルのフレヌムに囲たれ、むンデントのない偎面のみに癜いモゞュヌルのフレヌムに囲たれたパタヌンです。 怜玢パタヌンは、巊䞊隅合蚈3぀にありたす。



敎列パタヌン



2番目のバヌゞョンから䜿甚された、1察1モゞュヌルの黒い正方圢で、癜いモゞュヌルのフレヌムに囲たれ、黒いモゞュヌルのフレヌムに囲たれおいたす。その結果、このパタヌンのサむズは5 x 5です。より正確には、グリッドノヌドは垂盎および氎平に瀺されおおり、パタヌンの䞭倮モゞュヌルが配眮されおいたす。 たずえば、衚に6、22、38ず曞かれおいる堎合、これはモゞュヌルの䞭心が次のポむントにあるこずを意味したす6、6、6、22、6、38、22、6、22 、22、22、38、38、6、38、22、38、38。 重芁な条件が1぀ありたす。アラむメントパタヌンが怜玢パタヌンず重なっおはいけたせん。 ぀たり、バヌゞョンが6を超える堎合、ポむント最初、最初、最初、最埌、および最埌、最初に䜍眮合わせパタヌンがないはずです。 この䟋では、これらは6、6、6、38および38、6です。



同期バンド



ここではすべおが簡単です。 バンドは、巊䞊の怜玢パタヌンの右䞋の黒いモゞュヌルから始たり、黒ず癜のモゞュヌルを亀互に、䞋から右に向かい、反察の怜玢パタヌンに移動したす。 䜍眮合わせパタヌンに重ねる堎合、倉曎しないでください。



バヌゞョンコヌド



これらの芁玠は、バヌゞョン7以降で䜿甚されおいたす。 バヌゞョンコヌドは2箇所で耇補され、ミラヌ化されおいたす。぀たり、座暙x、yでモゞュヌルの色を瀺しおいたす。座暙y、xで同じ色を安党に瀺すこずができたす。 これらの堎所のモゞュヌルは、䞋の図ず衚101-黒、0-癜に埓っお配眮されたす。







è¡š10.バヌゞョンコヌド。
バヌゞョン バヌゞョンコヌド
7 000010 011110 100110
8 010001 011100 111000
9 110111 011000 000100
10 101001 111110 000 000
11 001111 111010 111100
12 001101 100100 011010
13 101011 100000 100110
14 110101 000110 100010
15 010011 000010 011110
16 011100 010001 011100
17 111010 010101 100000
18 100100 110011 100100
19 000010110110 011000
20 000000 101001 111110
21 100110101101 000010
22 111000 001011 000110
23 011110 001111 111010
24 001101 001101 100100
25 101011 001001 011000
26 110101101111 011100
27 010011 101011 100000
28 010001 110101 000110
29日 110111 110001 111010
30 101001 010111 111110
31 001111 010011 000010
32 101000 011000 101101
33 001110 011100 010001
34 010000 111010 010101
35 110 110 110 110 1011
36 110100 100 000 001111
37 010010 100100 110011
38 001100 000010 110110
39 101010 000110 001011
40 111001 000100 010101




マスクコヌドず修正レベル



このコヌドは、前のコヌドず同様に、巊䞊の怜玢パタヌンの隣ず、䞋ず右の怜玢パタヌンの隣の2぀の堎所芁玠の区切りで耇補されたす。 マスクコヌドこれに぀いおは埌で詳しく説明したすず修正レベルのコヌドは、特別に暗号化されおいたす。 準備完了コヌドを衚11に瀺したす。マスクは、残りのすべおの空きスペヌスがデヌタで満たされた最埌のステップで決定されたす。 最適なオプションに基づいおマスクが遞択されるずいう事実によりこのためには、すべおのマスクを確認する必芁がありたす、マスクコヌドず修正レベルを远加するために、䜕床も戻っおくる必芁がありたす。 ただこのアむテムを远加しないでください。 この図は、この芁玠のモゞュヌルがどこでどの方向に䞊んでいるかを正確に瀺しおおり、垞に黒であるモゞュヌルは赀でマヌクされおいたす。







è¡š11.マスクのコヌドず修正レベル。
補正レベル マスクコヌド コヌド
L 0 111011111000100
L 1 111001011110011
L 2 111110110101010
L 3 111100010011101
L 4 110011000101111
L 5 110001100011000
L 6 110110001000001
L 7 110100110110110
M 0 101010000010010
M 1 101000100100101
M 2 101111001111100
M 3 101101101001011
M 4 100010111111001
M 5 100000011001110
M 6 100111110010111
M 7 100101010100000
Q 0 011010101011111
Q 1 011000001101000
Q 2 011111100110001
Q 3 011101000000110
Q 4 010010010110100
Q 5 010000110000011
Q 6 010111011011010
Q 7 010101111101101
H 0 001011010001001
H 1 001001110111110
H 2 001110011100111
H 3 001100111010000
H 4 000011101100010
H 5 000001001010101
H 6 000110100001100
H 7 000100000111011




デヌタを远加する



キャンバス䞊の残りの空き領域はすべお列に分割されたす。2぀のモゞュヌルごずに、これらのモゞュヌルの内容は関係ありたせん。ただし、垂盎同期バンドは単にスキップされたす。 塗り぀ぶしは右䞋から始たり、列内で右から巊、䞋から䞊ぞ行きたす。 珟圚のモゞュヌルがビゞヌ状態の堎合たずえば、同期ストリップやアラむメントパタヌン、単玔にスキップされたす。 列の最䞊郚に達するず、巊䞊にある列の右䞊隅から動きが続き、䞊から䞋に移動したす。 最䞋郚に達するず、移動は列の右䞋隅から続き、巊䞋にあり、䞋から䞊に移動したす。 など、すべおの空きスペヌスがいっぱいになるたで。







塗り぀ぶしはデヌタバむトからビットごずに行われ、1は黒のモゞュヌル、0は癜です。 十分なデヌタがない堎合、残りのスペヌスはれロモゞュヌルで埋められたす。



同時に、マスクの1぀が各モゞュヌルに重ねられたす。 合蚈で8぀のマスク0から7があり、それらのリストは衚12にありたす。衚の匏がれロの堎合、モゞュヌルの色は反転され、それ以倖の堎合は倉曎されたせん。 マスクはデヌタモゞュヌルにのみ適甚されたす。



è¡š12.マスク。
X-列、Y-行、-陀算の䜙り、/-敎数陀算。

マスク番号 仮面
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




マスクはさたざたな方法で遞択されたす。垞に同じマスクを䜿甚するものもあれば、毎回ランダムに䜿甚するものもありたすが、仕様では各マスクが評䟡され、最適なマスクが遞択されるず䞻匵しおいたす。 評䟡方法には時間がかかりたすが、間違ったマスクが遞択されおも心配する必芁はないため、䜿甚する必芁はありたせんが、ずにかく説明したす。 マスクのコヌドず修正レベル䞊蚘を参照は遞択したマスクに䟝存したす。今床はこの芁玠を远加したす。



最高のマスクを遞択する



この郚分はオプションであり、既にマスクを決定しおキャンバスにデヌタを远加しおいる堎合は、QRコヌドの準備ができおいたす。



この手順の本質は、8぀のマスクのそれぞれからQRコヌドを生成し、特定のルヌルに埓っおそれぞれにペナルティポむントを远加し、最小ポむントのマスクを遞択するこずです。 デヌタずずもに、マスクコヌドず修正レベルの芁玠がキャンバスに再远加されるこずに泚意しおください。



ルヌル1



氎平および垂盎に同じ色の連続する5぀以䞊のモゞュヌルごずに、ポむント数はこのセクションの長さから2を匕いた倀に蚈算されたす。このルヌルおよび他のすべおのルヌルでは、むンデントは考慮されず、すべおがメむンフィヌルドに制限されたす。







ルヌル2



2 x 2の同じ色のモゞュヌルの各正方圢に察しお、3ポむントが付䞎されたす。







ルヌル3



モゞュヌルBHHHBHBCHの各シヌケンスに察しお、片偎に4぀の癜いモゞュヌルたたは䞀床に2぀があり、40ポむントが远加されたす垂盎たたは氎平。 簡単に蚀えば、これらの芁玠に察しお







この䟋では、このような芁玠が3぀しかなく、120個の远加ポむントを受け取りたすこれらの芁玠は怜玢パタヌンず亀差する必芁はありたせん。







ルヌル4



このステップでのポむントの数は、黒ず癜のモゞュヌルの数の比率に䟝存したす。 比率が50から50に近いほど良い。 最初に行うこずは、黒いモゞュヌルの数をモゞュヌルの総数で割るこずですここでも、むンデントは考慮されたせん。

203 / 441 = 0.46032





次に、結果に100を掛け、50を匕きたす。

0.46032 * 100 - 50 = -3.986





小数郚分を砎棄し、モゞュロ数を取りたす。

-3.986 -> 3





結果の数倀に2を掛けたす。

3 * 2 = 6





この数をペナルティポむントの総数に远加したす。



たずめ



最終的には、各マスクに察しおペナルティポむントの独自の数を受け取りたす。ポむントが少ない方を遞択するだけで、QRコヌドは完党に準備が敎いたす。 実践が瀺すように、マスク番号が小さいほど、最良になる可胜性が高くなるため、最適化のために、すべおではなく、たずえば4から最適なマスクを遞択できたす。



基瀎ずなる蚘事






All Articles