背景
GS1バーコードは広く採用されているバーコードの規格である。日本におけるJANコード(GTINコード)を内包している(もしかしたら内包していないケースもあるかも知れないが、見たことがない)。
本記事ではGS1Japanのサイトを主に引用しつつ
- そもそものGS1コードの話
- PC接続+キーボード入力系バーコードリーダでの読込、仕様・実装的な話
上記を纏める。
編集日:2021/05/17
そもそもGS1コードとは
- GS1(ジーエスワン)事業者コードとは、JAN( GTIN)コードとは
https://www.dsri.jp/jan/about_jan.html
GS1事業者コードは、JANコードやGLNなどの国際標準の識別コード(GS1識別コード)を設定するために必要な番号です。
JANコードは「どの事業者の、どの商品か」を表す、世界共通の商品識別番号です。
JANコードは、商品のブランドを持つ事業者が、当財団から貸与されたGS1事業者コードを用いて、商品ごとに設定します。
JANコードとJANシンボルは世界共通の仕組みであり、多くの国で使用されています。
JANコードは日本国内での呼び方です(JANとはJapaneseジャパニーズ Articleアーティクル Numberナンバーの略)。
国際的にはEANイアン(Europeanヨーロピアン Articleアーティクル Numberナンバー)コード、あるいは、GTINジーティン-13、GTIN-8と呼ばれます。(「GTIN」参照)
GS1コードの中にGTINコードなどが入ってくるイメージとなる。
GS1コードはどのように各コードを判別している?
各コードの先頭にGS1アプリケーション識別子を結合し
読取時にて先頭数文字を用いてどのコードであるかを判別する。
GS1アプリケーション識別子
より引用
GS1アプリケーション識別子とは
GS1が標準化した、さまざまな情報の種類とフォーマット(データの内容、長さ、および使用可能な文字)を管理する2桁から4桁の数字のコードです。商品製造日、ロット番号などのデータの先頭に付けて使用します。アプリケーション識別子は、英語名称のApplication(アプリケーション) Identifier(アイデンティフィァー)の頭文字をとって、AI(エーアイ)とも呼ばれます。AIを使うと、商品識別コードやさまざまな属性情報を、どこの誰とどのシステムとの間でも共通化された方式で、バーコード化して伝達することができます。
- AI一覧表
AI一覧表にはGTINコードのように14文字 固定 のものから、ロット番号など 可変長 のものまである。
可変長のモノを読み取るにはどのようにしている?
- AIを正しく実装するためのポイント(プリンター、スキャナーメーカー様向け)
より引用
2.重要な制御記号FNC1(ファンクション1)
FNC1(ファンクション1)は、AIをGS1標準シンボルに表現する際に重要な役割を果たす制御記号です。目視文字には表さないため、通常はユーザーに認識されない部分ですが、GS1標準シンボルを正しく表現し、正確なデータをシステムに取り込むために不可欠の機能です。 FNC1には2つの役割があり、使われる位置によって機能が異なります。
1)シンボルの先頭:そのシンボルが表現するデータがGS1標準のデータであることを示す
独自フォーマットのデータや、ANSIなど他の標準のデータと区別するために使用します。
2)シンボルの途中:FNC1の直前の可変長データの終了(区切り)を示す
可変長データの後ろに他のデータが続く場合に、可変長データの項目区切りとして使用されます。
なお、固定長のデータの終了時には、FNC1は必要ありません。
すなわち、 可変長データの末尾には「FNC1」なるデータを設定 し、 データが終了しているかを判別 する。
バーコードリーダ読込時
バーコードをバーコードリーダで読込、取得したデータを入力してもらうことで
文字データとして出力することが出来る。
この時留意したほうが良いことは、一般的なPC接続して利用するバーコードリーダの場合は、 「バーコードリーダ入力≒キーボード入力」 ということ。
我々がキーボードを入力するのと同じく、バーコードリーダも入力する。
よって、基本は
1:あり得るAIを列挙
2:合致したAIが固定長なら固定長取得、可変長なら可変長データ末尾を判別し取得
3:バーコード自体の末尾でなければ1に戻る、末尾ならば終了
となると考える。この「可変長なら可変長データ末尾を判別し取得」を後述する。
FNC1・GS
まず、可変長データ末尾として設定されるFNC1自体はキーボード入力として書き込まれない。
一般的なバーコードリーダは、設定によってFNC1部分を[GS(グループセパレータ)]
として出力することができる。
設定手法はバーコードリーダ機種によるが、概ね「Code128」の「GS送信あり」「UCC/EA1-128読み取りあり」と設定すればOKか?
上記の^]
29
の部分。
ここで問題なのは^]
という文字が入力される わけではない 。
コレは Ctrl + ]
とキーを叩いている。
以下のように実装し動作を確認した。insertGSの詳細コードは記載しない。
// vueでの書き方。キーボードがCtrlを押しながら221(])を押した場合、処理が走るようにする。
// どのように実装するか次第だが、置換用の文字列を追加して元値に返すイメージが安定するだろうか。
@keydown.ctrl.221="insertGS"
// バーコードリーダ出力の違いか、PCキーボード出力の違いか、
// 上記以外にもCtrl+219([)のケースでGSが出力されるケースがあるらしい。ソレもキャッチする。
@keydown.ctrl.219="insertGS"
GS1バーコードから外れたvue実装の余談
vueにて実装する時は上記のキー修飾子を参考にしたが、
keyCode イベントの使用は 非推奨 で、新しいブラウザではサポートされない可能性があります。
とある。同じ挙動が出来て推奨されているイベントがあれば良いのだが…
終わりに
本記事の内容には「一般的」と書いたように、バーコードリーダ自体でも様々な種類が存在する。
あくまでも「こういうドキュメントがあるよ」「こういう例があるよ」ぐらいの参考になれば幸い。