JANコード作成プログラム[.net]

| コメント(0) | トラックバック(0)


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

コードを表示するという単純なものです。

※とりあえず最低限の対応をしてみました。

 

20090124.jpg

 

[JANコード作成]

 

(注)

C#でのプログラミングは慣れていないので、とりあえず動作するように、

調べつつ作成しています。より洗練されたプログラム記述あれば、

コメントください。

 

コード

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());
        }

    }
}

トラックバック(0)

トラックバックURL: http://pg2se.com/mt6/mt-tb.cgi/15

コメントする