JANコード
JANコードとは、ご存じのとおり、日本で最も普及している、
商品識別コードおよびバーコードの規格のひとつです。
商品のパッケージや梱包された箱に印刷されたり、シールが貼付けられ、
商品を識別するための情報として、POSシステムや、販売管理・在庫管理等、
様々なシステムで利用されています。
構成
JANのコード体系(構成)は以下のようになっている。
標準の13桁のコードまたは、8桁の短縮のコードが存在する。
13桁
国コード(2桁) + メーカコード(5桁) + 商品コード(5桁) + チェックデジット(1桁)
国コード(2桁) + メーカコード(7桁) + 商品コード(3桁) + チェックデジット(1桁)
8桁
国コード(2桁) + メーカコード(4桁) + 商品コード(1桁) + チェックデジット(1桁)
日本の国コードは、”49″または”45″となっている。
チェックデジット
チェックデジットは、コードの入力誤りや、バーコードの読み取りミスを防止するために、
12桁のコードから算出した、誤り検出用の付加コードです。
コードを読みとった際に、再度チェックデジットを計算し、読み取ったチェックデジットと
相違がないかで確認をすることができる。
JANコードの作成
上記のように、JANコードは決められたルールを基に作成されていることがわかる。
特に、チェックデジットについては、作成した12桁のコードからさらに計算をおこない
13桁目のコードを算出することになる。
※チェックデジットの算出についてはここを参照。
そこで、簡単ではあるが、JANコード作成用のプログラムを作成してみた。
国コードは、”49″または”45″より選択し、メーカコード(5桁)、商品コード(5桁)の
タイプで入力し、”作成”ボタンを押すと、チェックデジットを計算し、13桁のJAN
コードを表示するという単純なものです。
※とりあえず最低限の対応をしてみました。
[JANコード作成]
C#.net 2008
.net framework2.0以上
コード
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
namespace JanCodeMaker
{
public partial class frmJan : Form
{
public frmJan()
{
InitializeComponent();
}
private void Form1_Load(object sender, EventArgs e)
{
cmbCountry.SelectedIndex = 1;
txtMaker.Text = "";
txtSyohin.Text = "";
txtJan13.Text = "";
}
private void frmJan_Shown(object sender, EventArgs e)
{
txtMaker.Focus();
}
private void frmJan_KeyDown(object sender, KeyEventArgs e)
{
if (e.KeyCode == Keys.Enter) {
bool forward = e.Modifiers != Keys.Shift;
this.SelectNextControl(this.ActiveControl, forward, true, true, true);
e.Handled = true;
}
}
//チェックディジットを計算する
private void btnMake_Click(object sender, EventArgs e)
{
string source = cmbCountry.Text + txtMaker.Text + txtSyohin.Text;
if (source.Length != 12) {
MessageBox.Show("12桁で入力してください。");
}
int chk1 = 3 * (Int16.Parse(source.Substring( 1, 1)) +
Int16.Parse(source.Substring( 3, 1)) +
Int16.Parse(source.Substring( 5, 1)) +
Int16.Parse(source.Substring( 7, 1)) +
Int16.Parse(source.Substring( 9, 1)) +
Int16.Parse(source.Substring(11, 1)));
int chk2 = 1 * (Int16.Parse(source.Substring( 0, 1)) +
Int16.Parse(source.Substring( 2, 1)) +
Int16.Parse(source.Substring( 4, 1)) +
Int16.Parse(source.Substring( 6, 1)) +
Int16.Parse(source.Substring( 8, 1)) +
Int16.Parse(source.Substring(10, 1)));
int chk3 = 10 - ((chk1 + chk2) - (((chk1 + chk2) / 10) * 10));
if (chk3 == 10) { chk3 = 0; }
txtJan13.Text = source + chk3.ToString();
//MessageBox.Show(chk1.ToString() + "/" + chk2.ToString() + "/" + chk3.ToString());
}
}
}