バーコード .Net ライブラリ

バーコードの仕様を調べつつ.NETで使えるAPIライブラリを作成。

データはJAN8,JAN13,ISBN10,ISBN13に対応。
機能は、チェックデジット計算とバーコードの描画。
(ISBN10は、ISBN13に変換してバーコード化)
バーコードリーダーが今手元にないので、動作確認は後日。
数字の表示の有無や、マージンとかつけて、非推奨だけど色も変化できるようにしたけど使わない機能になるでしょう^^
デフォルトに決められてるフォントはOfficeを入れるとインストールされるっぽいような記載があるが、とりあえず、ないので、適当なフォントを使用。


これで、インストアコードで、独自バーコードで何か整理する予定。


F#使おうとしたが使いこなせなかったのでやっぱりC#2010を使用。


バーコードの仕様で調べたもの
wikipedia
http://ja.wikipedia.org/wiki/%E3%83%90%E3%83%BC%E3%82%B3%E3%83%BC%E3%83%89
バーコード
http://ja.wikipedia.org/wiki/EAN%E3%82%B3%E3%83%BC%E3%83%89
EANコードJANコード
http://ja.wikipedia.org/wiki/%E6%9B%B8%E7%B1%8DJAN%E3%82%B3%E3%83%BC%E3%83%89
ISBN(書籍JANコード

UPC→EAN(JAN)→ISBN13な流れ。

ISBN10とISBN13でチェックデジットの計算方法が異なる。

JANの例
国コードは45か49
国コード+メーカーコードが7桁の場合
国コード(2桁)
メーカコード(5桁)
商品コード(5桁)
チェックデジット(1桁)

国コード+メーカーコードが9桁の場合
国コード(2桁)
メーカコード(7桁)
商品コード(3桁)
チェックデジット(1桁)


7桁か9桁のコードの見分け方。
456〜459:9桁JAN企業(メーカー)コード
450〜455:7桁JAN企業(メーカー)コード
490〜499:7桁JAN企業(メーカー)コード

9桁のコードのメーカーもアイテム数が増えたら7桁がもらえる。
9桁をもらうー>9桁を複数もらうー>7桁をもらうという流れみたい。


メーカーコード(国コードを含む)は財団法人流通システム開発センターJANコードのページ) http://www.dsri.jp/jan/ で申請。
JANコードからメーカー検索は、GEPIR Search http://www.gepir.jp/GEPIRJapanWebSite/RequestForm.aspx?LANG=JP


[インストアマーキング]
個人で使うならこれにしておくのが無難。


国コード (インストア系の国コードまとめ)
02 - (UPC 2)インストアコード NON-PLU
04 - (UPC 4)インストアコード
20〜29 - 小売業インストアコード用

http://www.dsri.jp/jan/instore_marking.htm
PLU[プライスルックアップ]
一般商品・雑貨等のインストアマーキング
国コード(20〜29、04)
商品コード(10桁)
チェックデジット(1桁)

NonPLU 価格が個々で違う、生鮮食品など。
国コード(20〜29、02)
商品コード(6桁)
価格コード (4桁)
チェックデジット(1桁)


別のパターン。(価格チェックデジットを入れているパターン)
国コード(2桁)
商品コード(5桁)
価格チェックデジット(1桁)
価格(4桁)
チェックデジット(1桁)


価格チェックデジットの計算方法は、複雑&価格チェックデジットの有無が判断できないので、これ以外の方法があるのか不明。
手順1
1桁x2 二桁になったら合計から2の桁を引く(例:14 14-1=13)
2桁x2 二桁になったら合計から2の桁を引く(例:14 14-1=13)
3桁x3
4桁x5 二桁になったら合計から2の桁を引く(例:14 14-1=13)

手順2
各4桁の計算結果の下1桁を合計

手順3
合計を3倍する。この計算により出た下1桁をチェックデジットとする。


インストアマーキングに関してはヴァリエーションがありそう。


書籍コード (ISBNじゃないほう)
000 0071 03800 1
フラッグ (3桁)
分類コード (4桁)
価格コード (5桁)
チェック・デジット (1桁)

チェックデジットはISBN13と同じ。モジュラス10 ウェイト3.1

1桁の数字は7モジュールで表す。

JANコードの描画まとめ
一番細い幅が1モジュール
太さは1-4まで、黒白、それぞれある。

[Left Light Margin] 11モジュール以上の空白
[Left Guard Bars] スタートコード 101 3モジュール
[Left Data Field (6キャラクタ)]
[Center Guard Bars] センターコード 01010 5モジュール
[Right Data Field (5キャラクタ)]
[Check Digit (1キャラクタ)]
[Right Guard Bars] ストップコード 101 3モジュール
[Right Light Margin] 7モジュール以上の空白

左マージン(11)+左ガードバー(3)+データキャラクタ6桁(42)+センターバー(5)+データキャラクタ5桁(35)+チェックデジット1桁(7)+右ガードバー(3)+右マージン(7)=113モジュール

EANシンボルは 12のキャラクタで13桁を表す。最初の1桁はプリフィクスと呼び、 キャラクタはないが、左側6桁のキャラクタの 奇数パリティ、 偶数パリティの組み合わせで表される。

右側の数字は、1種類の符号化だが、左は、最初の数字をあらわすために、偶数パリティと奇数パリティを使い分ける。


バーコード下はOCR−Bフォントというフォント