はろ

 

久しぶりに浅いエンジニアっぽい知識を・・・

 

今日はチェックデジットという言葉を知ったので

 

チェックデジットを使われているバーコードの仕組みについて簡単に書いていきます。

 

バーコードはみなさんも知っている通り商品についているあれですね!

 

バーコードの数字は、その商品を区別したりに使われます

 

なんか昔社会科とかでやったような~

 

バーコードはいろいろな種類があります、基本的に自分が目にするのは

 

JANという種類のバーコードです。

 

家にあったサプリのバーコードを見てみると

 

 

 

長い縦線が、端っこと真ん中にあるのがわかります。

 

この線がデータの区切りを表しています。

 

上のコードで見てみると

 

真ん中から←側の4946842

 

の値はGS1事業者コードといって、国とかどの事業者か表すものとなっています。

 

最初の49の値は日本を表します

 

そして真ん中から右側の63551の値はその商品のコードを表します。

 

そして一番右の値の「1」はチェックデジットとなっています。

 

チェックデジットというのは、バーコードを読んだときに誤りがないかをチェックするための値です。

 

 

 

たとえば

 

96123455というバーコードがあったときに

 

最後の5以外を足して 9+6+1+2+3+4+5=25

 

その値を10で割った余りの値が、末尾の値と一致するかの確認をしています。

 

25を10で割った余りは5なので

 

96123455の末尾の5と一致していることで読み取れている値が正しいと証明します。

 

↑はたとえの話なので、チェックディジットはそのバーコードの種類によって違います。

 

 

今回自分の家にあったサプリのバーコードでチェックデジットが本当に正しいか調べてみました

 

チェックディジットはモジュラス10/ウェイト3というチェック方式で計算します。

 

モジュラス10/ウェイト3の計算方法です

1データの末尾の桁からウエイトを3.1.3.1.とかけて総和を求めます。
2総和を"10"で割りその 余りを求めます。
3"10"より余りを引いた値がチェックデジットとなります。

 

なんだかめんどくさそうだな~

 

と思いがちな内容ですが結構簡単な計算方法です

 

今回のバーコード

4946842635511を使って計算します。

チェックデジットの一番右の「1」ははずします。

494684263551

1.まずそれぞれに3,1を交互にかけてすべて足します。

4*3 + 9*1 + 4*3 + 6*1 + 8*3 + 4*1 + 2*3 + 6*1 + 3*3 + 5*1 + 5*3 +1*1 = 109

2..総和109を10で割って余りを出します。

109/10 =10 余り9 

3.10から余りを引いた値がチェックデジットです

10-9=1

 

この値「1」が、チェックする値と一致しているため読み込みが正しいと判断されます。

 

だけど本当に正しいといえるのかまだ納得できない私はバーコードを作るサイトで確認することにしました。

 

↓のサイトにチェックデジットを除いた値をいれて、作成されたバーコードの最後の値を確認すると「1」となっているので正しそうです

 

 

 

 

まあ、バーコードのコード部分の仕組みはこんな感じです。

 

読み取り部分も調べてて面白かったから書きたかったんですけど、ちょっとチェックデジットに重みを置きすぎて

 

めちゃくちゃ長くなりそうなので終わります

 

結構面白いので気になる方は調べてみてください

 

んじゃ

 

参考サイト

https://www.aimjal.co.jp/gijutu/barcode/jan/jan.html