QR コード作成 JavaScript の説明 |
型番をあまり大きくすると処理が遅くなります.このプログラムではエンコード可能な型番を最大 10 に制限してあります.*:8 ビット バイト モード
型番 誤り訂正
レベルモード 数字 英数字 バイト* 漢字 1 L
M
Q
H41
34
27
1725
20
16
1017
14
11
710
8
7
42 L
M
Q
H77
63
48
3447
38
29
2032
26
20
1420
16
12
83 L
M
Q
H127
101
77
5877
61
47
3553
42
32
2432
26
20
154 L
M
Q
H187
149
111
82114
90
67
5078
62
46
3448
38
28
215 L
M
Q
H255
202
144
106154
122
87
64106
84
60
4465
52
37
276 L
M
Q
H322
255
178
139195
154
108
84134
106
74
5882
65
45
367 L
M
Q
H370
293
207
154224
178
125
93154
122
86
6495
75
53
398 L
M
Q
H461
365
259
202279
221
157
122192
152
108
84118
93
66
529 L
M
Q
H552
432
312
235335
262
189
143230
180
130
98141
111
80
6010 L
M
Q
H652
513
364
288395
311
221
174271
213
151
119167
131
93
74:
(略)
:40 L
M
Q
H7089
5596
3993
30574296
3391
2420
18522953
2331
1663
12731817
1435
1024
784
MAX_VER = 10;
で定義してあります.この数字を大きく(最大 40)すれば,より大きな型番の QR コードを作成できるようになりますが,型番を大きくするとそれだけ処理が遅くなります.● JIS X 0201 の円記号‘¥’(実際には半角,16進でコード 5C)の扱い(b) 半角カナ U+FF61 〜 U+FF9F
Unicode の U+005C は逆スラッシュ‘\’になっています.しかし,円記号が U+005C にマッピングされる可能性がある(私が試したブラウザではすべて U+005C にマッピングされました)ので,U+005C は円記号に変換しています.
円記号が U+00A5 にマッピングされる場合もあるので,U+00A5 も円記号に変換するようにしています.
漢字の逆スラッシュ‘\’が U+005C にマッピングされる場合もありますが,プログラムが U+005C を受け取ったとき,元の文字が JIS X 0201 の円記号だったのか漢字の逆スラッシュだったのかは判りませんので,その場合は入力データの漢字の逆スラッシュが円記号に化けてエンコードされてしまうことになります.
漢字の逆スラッシュ‘\’が U+FF3C にマッピングされる場合は問題ありません.
● JIS X 0201 のオーバライン‘ ̄’(実際には半角,16進でコード 7E)の扱い
Unicode の U+007E はティルダ‘〜’になっています.しかし,オーバラインが U+007E にマッピングされる可能性があるので,U+007E はオーバラインに変換しています.
オーバラインが U+203E にマッピングされる場合もあるので,U+203E もオーバラインに変換するようにしています.
文字
Unicode(16進)
シフトJIS〜 U+301C,U+FF5E 8160 ‖ U+2016,U+2225 8161 − U+2212,U+FF0D 817C ¢ U+00A2,U+FFE0 8191 £ U+00A3,U+FFE1 8192 ¬ U+00AC,U+FFE2 81CA
仕様では複数のモードを混在させることもできますが,このプログラムでは処理を簡単にするため,データ全体をひとつのモードでエンコードします.
モード エンコードできる文字 数字 ‘0’〜‘9’ 英数字 ‘0’〜‘9’,‘A’〜‘Z’,スペース,‘$’,‘%’,‘*’,‘+’,‘-’,‘.’,‘/’,‘:’ 8 ビット バイト JIS X 0201 のラテン文字・片仮名用 8 ビット符号 漢字 コード 8140 〜 9FFC,E040 〜 EBBF(16進)の範囲のシフト JIS 漢字
入力データがすべて(半角)数字の場合 → 「数字モード」8 ビット バイト モードでは コード 80 〜 9F,E0 〜 FF(16進)の位置は「未定義」となっていますが,シフト JIS 用に使用することもできるという記述があります.
それ以外ですべて「英数字モード」でエンコード可能な場合 → 「英数字モード」
入力データがすべて漢字の場合 → 「漢字モード」
上記以外の場合 → 「8 ビット バイト モード」