詳細なQRコード(A)

約2次元コード、私は基本的に日常表示されていないQRコード、PDF417と漢の文字コードと基本的に日本では今、情報を確認し、そして。その理由は、すべての関係者が懸念していることである確かに最も優れたQRコードです。だから私は、それは不便かもしれな詳細に書かれた本を、書いている場合は、QRコードの記事の記事を書くつもりですが、記事がオンラインであれば、あなたはプレイを解放することができます。その後、一部の正則を取って、この記事を終了し、他のコンテンツとの統合は、書籍の章を形成します。便利で、かつ高速な絵を説明するために、将来のクラスを容易にするために、私はまた、QRコードのグラフィック部分を描画するのに役立つ「QRアシスタントプログラム」をやったし、最終的に2次元描画プログラムコードへと進化しました。もともと2次元コードを描画するために、独自のプログラムを書くつもりはなかった、多くのオンライン開発キット準備があります。しかし、2次元コード自体がより身近にする一方で、他の一方で、参照コードへの学生のための単純な2次元描画プログラムの実現と、効果的に学生の学習曲線を減らすことができます。
 
QRコードは、日本で発明の二次元コードであり、現在最も広く使用されている符号化です。中国では、このエンコーディングはほとんどどこでも、マイクロチャネルの支払いは、アリペイ、自転車の共有、広告の関心の様々なようにスキャンされます。
 
1. QRコード機能
1.ストレージ容量
従来のバーコード情報は、QRコードは、情報を数回百回を処理することができ、と比較して、約20扱うことができます。さらに、QRコードは、データのすべてのタイプ(:数字、文字、日本語、アルファベット、漢字、バイナリ、制御コード、などなど)をサポートすることができます。QRコードは、7089桁まで大量の情報を処理することができます。

2.小​​さなフットプリント
データ処理の縦方向と横方向、同じ量の情報を用いてQRコードは、QRコードは、より少ないスペースを占有します。図GS1-128は、符号化およびコードGS1 QRコードパターン `(02)66901234000049(17)050101(37)10(10)ABC`があります。私は、スキャンコード銃は、これまで認識されないまで、画像を縮小し、画面上のグラフィックスを描画した後、スキャンコードスキャン銃を使用したいと思います。最後に、以下の比較描画領域を取得するなど、拡大縮小。

 
3.強力なエラー訂正能力
これは、いくつか汚れて符号化されたまたは損傷し、データが復元できたとしても、QRコード「誤り訂正」を含みます。データ回復コードワード単位(内部データの単位が各8ビットのコードワードが1を表す、QRコードの場合には、)、誤り訂正約30%まで(損傷や汚れの程度に応じて、そこ状況を復元することはできません)。

図4は、任意の方向から読み取ることができ
QRコードは、いずれかの方向に360°から素早く読み取ることができます。3に位置QRコードパターン、高速で安定した読み取りを実現するために、背景パターンからQRコードに影響を与えることができます。従来のレーザスキャンコードガンは、バーコードをスキャンするだけ走査方向を使用することができるが、CCDスキャナを使用する場合、どちらの方向からバーコードをスキャンすることができます。
 
2. QRコード構造
グラフィックス機能とコード領域:QRコードは二つの部分に分けることができます。

機能性パターンと補正パターンは、ターゲティング、データを記録するための具体的なデータ領域、エラー訂正情報やバージョン情報で役割を果たしています。

2.1 QRコードシンボルのバージョンと仕様
それぞれの仕様、の40種類、バージョン1、バージョン2 ...... 40バージョンのQRコードシンボルの合計。仕様バージョン1は、バージョン40(サイズ177×モジュールまで、シンボルの各モジュール4側増加の各バージョンの以前のバージョンよりも、21×21ブロック、モジュール、仕様バージョン2ように25×25ブロックのモジュールであり、ました177モジュール)。
 

図から分かるように、21×21のグラフィックバージョンを小ブロックに分割され、モジュールこれらの小さな正方形を指し、QRコードが描画の最小単位であるQRコードを描画するときに、データブロックが暗いフィラーとして存在するであろう、 QRコードグラフィックの最終組成物。図は、図のモジュールのバージョンである。40、177×177からなる小ブロック。


 2.2ファインダーグラフィック
3つの位置検出用パターンを含むファインダー同じパターンを以下に示すように、各二次元コードは、左上、右上、左下、7×7のモジュールからなる位置検出パターンによってそれぞれに配置されています。

 
シンボルの可能性は、すぐにビューのQRコードフィールドでの可能なシンボルを識別することが可能である、他の場所で同様のパターンが非常に小さい遭遇しました。組成ファインダー3つの識別パターン位置検出パターンは明確に視野内の位置と、シンボルの向きを決定することができます。図は、バージョン1および図より高いバージョン番号、パターン全体におけるファインダパターンの小さな割合から見たファインダパターン、バージョン6です。


位置検出パターンの区切り2.3
図黄色領域に示されるように、容易に、コード領域と分離モジュールの幅と位置検出用パターンと、各位置検出パターンを特定します。この全体の面積は、空白にする必要がありますデータを記入することはできません。


2.4ポジショニンググラフィック
彼らは、それぞれ水平および垂直のグラフィックモジュールの位置決めと1行分の幅、開始および終了モジュールは暗い交互明暗モジュールです。(行、列が0からカウントを開始)は、それぞれ行および列6 6における水平方向および垂直方向のファインダパターンであり、位置検出用パターンを回避します。その目的は、密度と基準位置の座標を提供するために、シンボル決定モジュールのバージョンを決定することです。図は、バージョン1およびバージョンファインダパターン6パターンの後に描かれています。


2.5補正パターン
損傷のある程度に固定された基準パターンと補正パターン、画像、復号ソフトウェアモジュール、それを通して画像の画像座標を同期させることができます。5×5モジュールの各補正用パターン。下図のように:


シンボルの数とバージョン番号に応じた補正パターンは、補正用パターンバージョン1せず、バージョン2であると、上記補正パターンを含んでいてもよいです。所与のQRコードのバージョン番号の数に応じて補正用パターン。次の表は、データが付録18284から2000国家標準GB / T Eを参照してください完了し、データのトップ14のバージョンを示しています



ここで、モジュールの行/列座標の中心の見方について話をします。例えば、リリース7、6、22、および値の表38に示されています。行および列の座標(6,22)の補正用パターンの中心点(22,6)、(22,22)(22.38)(38,22)(38,38)。座標(6,6)、(6、38)(38,6)座標位置は、位置検出用パターンを占有しているので、したがって、補正用パターンの位置に配置されていない座標。それは別々に独自の値と座標からなる他の値と各値のモジュール/列座標の中心線を意味し、その後左下、すなわち結果を座標、左上、右上を取り除きます。

図バージョン補正パターン1とバージョン7:


次の図は、修正されたバージョン15と40のグラフィカルなバージョンです。


そこには、固定式中央モジュールの行/列座標値をされていないが、4より上に観察補正パターンは、見つけることができ、座標値の選択におけるQRコードの設計、このような補正パターンの1行1列目はちょうどファインダーパターンに組み込まれていること、これは、ファインダパターンの破壊を作成しません。

コーディング3.データ
画像認識のための様々な機能パターンが配置されている、次のステップは、データを符号化することです。数字、英数字、8ビットバイト、漢字、日本語の漢字文字である:標準のQRコードは、4つのタイプを符号化することができます。私たちの国家標準GB / T 18284-2000範囲は、QRコードの増加を表します。次の表は、データ型であり、対応するモードインジケータは、QRコードによって表すことができます。
 
モード インジケータ    モード インジケータ
ECI 0111   日文  1000年 
デジタル 0001    中文 1101
英数字 0010   FNC1 0101(第一位置)
8つのバイト 0100    FNC1 1001(第2位置)
表1:モードインジケーター

ECIは、私が知ってもらうのが好きませんが、インターネット上で、残念ながらほとんど情報、異物のAIM ECI仕様、ダウンロードするための手数料のために何かです。まさか、と私たちは、後でそれについて話していません。AIMは現在、1社だけを知って、ECIはこの事で、あなたは異なる文字セットのすべての種類をロードするために、二次元コードを使用することができ、この規範と、当たり前ですが、また、あなたが特定を行うために使用されるデータを知る前に、受信側システムを可能にされます拡張または復号化処理。

前回の本を読んで、「バーコード技術、」GS1-128バーコード内の記事は、コーディングのこのタイプは、GS1規格のために準備するように設計されて、非常に精通している必要がありbelieve've FNC1。本明細書で説明のみの数字、英数字、8ビットバイトとFNC1モードのために、サンプルプログラムは4つだけ符号化を実施しました。

3.1デジタルモード
一般的に10の密度を有する、0から9のエンコードにのみ小数デジタルモードは、3つの文字示します。

3.1.1は、デジタルビットストリームに変換されます。
各群の左から表現される数値は、その後、(バイナリ10が最大数は1023で表すことができる)、各10ビットのバイナリデータを変換し、3分割されています。これら2つの数の数値の最後のセットの2つだけは、7ビットのバイナリ表現(127としてバイナリ形式で表すことができ7の最大数)であれば。数字の唯一の最後の設定した場合、4ビットのバイナリ桁が最後の(バイナリ15として表すことができる4つの最大数)を表します。バイナリデータを連結し、モード表示と文字カウント表示が付いて。

〔実施例1〕**:** `デジタル01234567`:
図1に示すように3つの群に分けられる:01234567
2.各バイナリを変換します。
    012 - > 0000001100
    345 - > 0101011001
     67 - > 1000011
前記バイナリシーケンスのコネクタ:0000001100 0101011001 1000011

バイナリへの文字のカウント表示を3.1.2
文字数インジケータはQRコードのバージョンの異なる長さと、ロードされた文字の数、およびモードを示します。表2の長さに対応する編集モードと文字カウント表示。
 
デジタルモード 英数字モード  8ビットバイトモード  漢字モード
1〜9 10 9 8 8
10〜26 12 11 16 10
27〜40  14 13 16 12
表2:文字数インジケータビット

データのための8桁、バージョン1を示すために使用される場合、中央値は10であり、表の列にデジタルモードをチェック。決勝:
8 - > 0000001000

####を添加し、文字カウント表示モードインジケータました
ルックアップテーブル、デジタルモードインジケータ0001。[モード表示文字カウントインジケータ+ +]デジタルビットストリームデータは、最終的にビットストリームに接続されている場合:

0001 0000001000 0000001100 0101011001 1000011

その後、我々は例のより深い理解を行います。

[例2] **:** `デジタル0123456789012345`:
図1に示すように3つの群に分けられる:0,123,456,789,012,345
2.各バイナリを変換します。
    012 - > 0000001100
    345 - > 0101011001
    678 - > 1010100110
    901 - > 1110000101
    234 - > 0011101010
      > 0101から5
3.バイナリシーケンスとしてコネクター:
    0000001100 0101011001 1010100110 1110000101 0011101010 0101

4桁の数は16であり、それは10ビットであり、バージョン1を使用して表されます。決勝:
16 - > 0000010000

モード・インディケータ0001デジタル最終ビットストリーム:
    0000010000 0000001100 0101011001 1010100110 1110000101 0011101010 0101 0001

3.2英数字モード
45文字の英数字モードの文字セットは、符号化されている、すなわち:0 9から10個のまでの数字、26の大文字A〜Z、および9つのシンボルSP、$、%、*、+、 - ,, / .. 典型的には、入力された文字は、二つの11で表されます。次の表は、45文字で、そのコード化されました:
文字   文字   文字   文字   文字
0 0   9 9   18   R 27   SP 36
1 1   A 10   J 19   S 28   $ 37
2 2   B 11   K 20   T 29   38
3 3   C 12   L 21   ザ・ 30   * 39
4 4   D 13   M 22   V 31   + 40
5 5   E 14   N 23   W 32   - 41
6 6   F 15   ザ・ 24   バツ 33   42
7 7   G 16   P 25   34   / 43
8 8   H 17   Q 26   とともに 35   44

完全な45個の文字を表すために、それは、6ビットのバイナリ数($ 64 = $ ^ 6 2)に必要であり、その後の文字の各々は、2つの12ビットのスペースを取る必要があります。別の符号化方法を使用して、QRコードでは、2つの文字は、11ビットの空間を使用して圧縮表します。

将输入的数字分为两个字符一组,将左边的字符的值乘以 45 与第二个字符的值相加,将所得的结果转换为 11 位二进制数。最大字符组为"::"(44×45+44=2024,而2 11=2048)。如果输入的数据的字符不是 2 的倍数,将最后一个字符编码为 6 位二进制数。将所得的二进制数连接起来并在前面加上模式指示符和字符计数指示符,得到最终编码。

**【例 3】:** 数据`AC-42`,QR 码版本号 1:
1. 根据表 5 查出字符的值:AC-42 -> (10,12,41,4,2)
2. 将结果分为 2 个一组:(10,12)(41,4)(2)
3. 将每组数据转换为 11 位二进制数:
    (10,12) -> 10×45+12=462 -> 00111001110
    (41,4) -> 41×45+4=1849 -> 11100111001
    (2) -> 2 -> 000010
4. 二进制数据顺次连接得到数据位流: 00111001110 11100111001 000010
5. 字符数为 5,查表2,使用 9 位二进制数表示。将字符计数指示符转换为二进制,
    5 -> 000000101
6. 查表 1,模式指示符为 0010。以【模式指示符 + 字符计数指示符 + 数字位流】的方式连接数据最终位流为:
    0010 000000101 00111001110 11100111001 000010

3.3  8 位字节模式
在 8 位字节模式中,一个 8 位码字直接表示一个输入数据字符的 ASCII 字符值(ASCII 译码表请查[这里](http://iotxfd.cn/demo/ascii.html))。即密度为每个字符 8 位。将二进制数据连接起来并在前面加上模式指示符和字符计数指示符,得到最终编码。

**【例 4】:** 数据`Ab>Cd`,QR 码版本号 1:
1. 在 ASCII表中查出各字符的值,并转换为 8 位二进制:
    A -> 65 -> 01000001
    b -> 98 -> 01100010
    `>` -> 62 -> 00111110
    C -> 67 -> 01000011
    d -> 100 -> 01100100
2.  二进制数据顺次连接得到数据位流:01000001 01100010 00111110 01000011 01100100
3. 字符数为 5,查表2,使用 8 位二进制数表示。将字符计数指示符转换为二进制,
    5 -> 00000101
4. 查表 1,模式指示符为 0100。以【模式指示符 + 字符计数指示符 + 数字位流】的方式连接数据最终位流为:
    0100 00000101 01000001 01100010 00111110 01000011 01100100

3.4 混合模式
之前在学习 Code 128 编码时大家应该还记得,为了达到符号长度最小的目的,Code 128 条码支持混合编码的方式。QR 码也支持以混合方式进行编码。其基本结构为【模式指示符 + 字符计数指示符 + 数据】,其后紧跟下一段的指示符开始另一段。下图为有 n 段数据的结构。


由于 GS1 标准仅支持 ASCII 码,这里只针对数字模式、字母数字模式、8 位字节模式的混合编码进行讨论。以下是针对上述模式的编码规则,完整编码规则请参考 GB/T 18284-2000 的附录 H。

3.4.1 位流长度最优化的编码规则
下列是形成最短位流的算法的基础。在方括号中的字符数如[5,7,9]分别用于版本 1~9,10~26 和版本 27~40。

1. 选择初始模式
    * 如果初始输入数据是在 8 位字节的二进制字符的专有子集中,选择 8 位字节模式;
    * 如果初始输入数据是在字母数字字符集的专有子集中,并且如果字符个数少于[6,7,8],其后紧跟 8 位字节专有子集中的数据,那么选择 8 位字节模式,否则选择字母数据模式;
    * 如果初始数据是数字,并且如果数字个数少于[4,4,5],其后紧跟 8 位字节字符集专有子集中的数据,那么选择 8 位字节模式,否则如果少于[6,7,8]后随字母数字字符集的专有子集中的数据,那么选择字母数字模式,否则选择数字模式。
2. 在 8 位字节模式中
    * 如果有不少于[6,8,9]的数字字符序列出现在来自 8 位字节二进制字符集的专有子集的多个数据前,那么转至数字模式;
    * 如果有字母数字字符集的专有子集的不少于[11,15,16]的字符序列出现在来自 8 位字节二进制字符集的专有子集的数据前,那么转至字母数字模式。
3. 在字母数字模式中
    * 如果有 8 位字节字符集的专有子集的一个或多个字符出现,转至 8 位字节模式;
    * 如果有不少于[13,15,17]的数字字符数据序列在来自字母数字字符集的专有子集的数据前出现,转至数字模式。
4. 在数字模式中
    * 如果有一个或多个来自 8 位字节的专有子集中的字符出现,转至 8 位字节模式;
    * 如果有一个或多个字母数字的专有子集中的字符出现,转至字母数字模式。

> 编者注:上述规则摘抄至 GB/T 18284-2000,最后一句是有问题或者不完善的。如果在数字模式中出现字符`Aabcd`,因为`A`属于字母数字字符集,而`abcd`只属于 8 位字节字符集。此时按最后一句话,需先转换为字母数字模式,加入字符`A`,然后马上又转换为 8 位字节模式。很显然,这样做浪费了空间。由于字母数字字符集是 8 位字节字符集的子集,正确的做法应当是转换为 8 位字节模式,然后加入字符`Aabcd`。

**【例 5】:** 数据`123456ABC123`,QR 码版本号 1:
1. 根据编码规则,首先应选择数字模式作为初始模式:0001
2. 加入字符计数指示符:6 -> 0000000110
3. 加入 123 编码:123 -> 0001111011
4. 加入 456 编码:456 -> 0111001000
5. 根据编码规则,转换为字母数字模式:0010
6. 加入字符计数指示符:6 -> 000000110
7. 加入 AB 编码:(10,11) -> 10×45+11=461 -> 00111001101
8. 加入 C1 编码:(12,1) -> 12×45+1=541 -> 01000011101
9. 加入 23 编码:(2,3) -> 2×45+3=93 -> 00001011101

将以上生成的二进制数据从上至下连接,生成最终位流。

3.5 FNC1 模式
FNC1 模式有两种模式指示符,用于标识按特定的行业或应用格式化信息的符号。FNC1 在第一位置时支持 GS1 标准,FNC1 在第二位置时支持按 AIM 认可的特定行业或者特定应用规范格式化信息。由于 AIM 查不到资料,这里只介绍 FNC1 第一位置模式,即模式指示符为:0101。

在 GS1-128 中,FNC1 用于数据段分隔,而 QR 码中没有专用的 FNC1 字符,在字母数字模式中用 % 字符代替,如果在数据中也有 % 符号出现,则 应按 %% 进行编码。在 8 位字节模式中用字符 GS(ASCII 值 29)代替。

> 编者注:个人感觉,这个设计方式相比 GS1-128 来说,并不太合理。即使数据只是纯数字,但只要在其中需要分段,安置 FNC1 ,就必须转为字母数字模式,如果后面还有足够多的数字,还得再次转回来。这样做的成本太高了。数字模式,还有部分未使用的编码,应当有自已的 FNC1,即使这个编码占据 10 个位,还是合算的。

**【例 6】:** 数据`(02)66901234000049(17)050101(37)10(10)ABC`,QR 码版本号 1:
首先分析数据中的 AI:(02)表示物流单元内贸易项目,长度固定;(17)表示有效期,长度固定;(37)表示物流单元内贸易项目数量,长度不固定,需在此 AI 最后加入 FNC1;(10)表示批号,长度不固定,它为最后一个 AI,无需加入 FNC1 标志。最终编码变为:

`(02)66901234000049(17)050101(37)10<FNC1>(10)ABC`

编码过程:

1. 将 FNC1 第一位置作为初始模式:0101
2. 根据位流长度最优化的编码规则,加入数字模式指示符:0001
3. 加入字符计数指示符:28 -> 0000011100
4. 加入 026 编码:026 -> 0000011010
5. 加入 690 编码:690 -> 1010110010
6. 加入 123 编码:123 -> 0001111011
7. 加入 400 编码:400 -> 0110010000
8. 加入 004 编码:004 -> 0000000100
9. 加入 917 编码:917 -> 1110010101
10. 加入 050 编码:050 -> 0000110010
11. 加入 101 编码:101 -> 0001100101
12. 加入 371 编码:371 -> 0101110011
13. 加入 0 编码:0 -> 0000
14. 根据编码规则,转换为字母数字模式:0010
15. 加入字符计数指示符:6 -> 000000110
16. 加入 %1 编码:(38,1) -> 38×45+1=1711 -> 11010101111
17. 加入 0A 编码:(0,10) -> 0×45+10=10 -> 00000001010
18. 加入 BC 编码:(11,12) -> 11×45+12=507 -> 00111111011

将以上生成的二进制数据从上至下连接,生成最终位流。

3.6  终止符
符号的数据结尾由紧跟在最后一个模式段后面的终止符序列 0000 表示,当数据位流数量正好填满符号容量时,它可以省略,或者当符号所余的容量不足 4 位时它可以截短。

3.7  位流到码字的转换
每个模式段的位流需要按顺序连接在一起,最后添加终止符,除非数据位流正好填满符号容量。所得的数据位流将被分为一个个码字;所有码字长度都是 8 位,如果位流长度最后一个码字不足 8 位,则用二进制值为 0 的填充位填充至 8 位,填充位应加在数据位流最后 1 位(最低位)的后面。说白了就是将位流进行 8 位对齐。

我们以【例 1】最终生成的数据位流为例说明上述过程。

1. 【例 1】最终生成的数据位流:000000110001010110011000011
2. 加入终止符 0000,(现在符号容量足够,不用考虑容量不足的情况):
    0000001100010101100110000110000
3. 将数据位流划分为码字,这里在每 8 个位后加一个逗号表示:
    00000011,00010101,10011000,0110000
4. 我们发现最后一个码字只有 7 位数字,不足 8 位,补 1 个零,最终数据变为:
    00000011,00010101,10011000,01100000

最终【例 1】生成的数据使用了 4 个码字。

接下来就要查表了,下表列出了各个版本 QR 码的码字容量,这里只列出一小部分,完整表格请参考 GB/T 18284-2000。


注意表格中的红框部分,由于只使用了 4 个码字,我们完全可以选择最高纠错等级 H。所以最终选择为:版本 1 的 H 纠错等级 QR 码。在此等级中可放置 9 个码字,还剩余 5 个码字是不能放空的,需要交替填充码字 11101100 和 00010001,直至填满整个 9 个码字。

5. 将空位填满至 9 个码字,最终数据变为:
    00000011,00010101,10011000,01100000,11101100,00010001,11101100,00010001,11101100

好!上半场结束,图多,还是分两篇写吧。下半场内容就比较抽象了。

おすすめ

転載: www.cnblogs.com/abatei/p/11655984.html