BHT:TOP

QRコードの読み取りについて

QRコード

QRコードはデンソーウェーブが開発したデンソーウェーブの登録商標です。
ここらへんはQRコードドットコムなどで基礎を学んでいただければ良いですが、
バーコードにもいくつか種類があるように、
QRコードにはいくつかの種類があることを理解していれば良いです。



QRコードからのデータ取り出し

わたしが対応したQRコードのデータ形式には3種類ありました。

固定長の場合

この場合が一番簡単な処理です。
読取ったコードの文字列から固定の位置のデータを切り出せば良いのですから、
MID$("文字列", 開始位置, 文字数)
で取り出せます。

カンマ(その他デリミタ)区切りの場合

デリミタで区切られたデータの任意の箇所を取得する関数(SPLITX$)を作りました。
この関数を使用することで任意の箇所が取り出せます。
SPLITX

セパレータ記号の場合

初めに:
セパレータは以下の種類があります。(ISOで規定)
種類(省略形)読みISO/IEC上の符号BHT-Basicでの表現
【RS】レコードセパレータ1ECHR$(&H1E)
【GS】グループセパレータ1DCHR$(&H1D)
【EOT】メッセージトレーラ04CHR$(&H04)
一つのQRコードは1レコードとなる。
レコード内のセパレータはGS(グループセパレータ)です。

なお、ISO/IEC 15434で規定されているメッセージヘッダ(7桁)は以下。
[)> RS06GS


※初めの3桁はメッセージヘッダ。
"06" の部分は目的によって異なる。
01(輸送)、02(EDI)、03(ASC X12)など…


同規定されているメッセージトレーラ(2桁)は以下。
RSEOT


参考→http://www.idautomation.com/barcode-faq/iso-iec-15434/
参考→http://kikakurui.com/x0/X0533-2003-01.html
参考→http://www.jsa.or.jp/stdz/edu/pdf/b4/4_14.pdf
Office2013以降のバーコードコントロールを使用してQRコードを作成する場合、
1E(RS)、1D(GS)、04(EOT)を16進数から文字コードに変えます。
=CHAR(HEX2DEC("1D"))
=CHAR(HEX2DEC("1E"))
=CHAR(HEX2DEC("04"))