バーコーディング:C#ソフトウェアの実装

ご挨拶! 情報をバーコードにエンコードできるプログラムを作成することです。 EAN13とCode 128の2つのオプションを検討します。



まず、バーコードが提供するものを把握し、EAN 13フォーマットから始めましょう外部では、バーコードは黒と白のストライプで構成されています。 標準による各ストリップの幅は0.33 mmです。 次に、もう少し詳しく見てみましょう。 標準に従って、バーコードアルゴリズムの情報はゼロと1のシーケンスに変換されます。 黒いバーはそれぞれ「1」に対応し、白いバーは「0」に対応します。 したがって、バーコードを取得します。 上記の説明は両方の形式に当てはまります。次に、形式の詳細に移りましょう。 EAN 13コードには、実際には12文字の情報を含めることができます(通常は国コード、工場コードなどに分割されますが、数字を使用してバーコードを作成することに煩わされることはありません)。 バーコードの13桁目(およびEAN 13には正確に13桁あります)はチェックサムです。 正しいデコードを検証するために使用され、それに応じて、対応するエンコードテーブルが選択されます。 これはすべてEAN 13形式に関するもので、エンコードアルゴリズムとチェックディジットの計算に関する詳細情報はこちらです。



それで、プログラムでバーコードを生成するために何をする必要があります(さらに、両方の形式)

  1. 1単位が0.33 mmに対応するようにグラフィカルインターフェイスを構成します
  2. コードをバイナリシーケンスに変換(「0」および「1」から)
  3. 各ユニットが幅0.33 mmの長方形になるようにシーケンスを表示します。 ストロークは変更できますが、標準では0.33mmと記載されています。




プログラムを作成するとき、私はこれをしました:

形式を選択し、コード、ストローク幅調整、コード生成ボタンを入力し、画像をクリップボードに保存するためのフィールドがあるフォームを作成しました。 次のようになりました。 設計

Abbyy FineReader 10 Professionalを使用して確認しました。

確認する

コードからバイナリシーケンスを形成する個別のクラスとして設計した各バーコード形式。 ちなみに、EAN 13形式は、コードに応じてテーブルが変更されるため、実装するのが少し難しいように見えました。 その結果、コード自体は次のように描かれました。

Bitmap bmp; private void button1_Click(object sender, EventArgs e) { Graphics g = panel1.CreateGraphics(); g.PageUnit = GraphicsUnit.Millimeter; if (comboBox1.Text == "EAN 13") { g.PageScale = scale; //g.DrawRectangle(new Pen(new SolidBrush(Color.Black)), 1, 1, 501, 1010); EAN13 ean = new EAN13(textBox1.Text); int cnt = ean.output.Length; panel1.Width = cnt ; float x = g.DpiX; int s1 =Convert.ToInt32( cnt * scale)+1; int s2 = Convert.ToInt32(s1 / 25.4); int res =(int) x * s2; panel1.Width = res; Draw(ref g, ean.output); } if (comboBox1.Text == "Code 128") { g.PageScale = scale; Code128B code = new Code128B(textBox1.Text); int cnt = code.output.Length; float x = g.DpiX; int s1 =Convert.ToInt32( cnt * scale)+1; int s2 = Convert.ToInt32(s1 / 25.4); int res =(int) x * s2; panel1.Width = res; Draw(ref g, code.output); bmp=new Bitmap(panel1.Width,panel1.Height); Graphics h=Graphics.FromImage(bmp); Draw(ref h, code.output); } }
      
      





ここでは、float型のスケール(ストリップの幅)は、DataBindingを使用してフォームから設定されます。



Code128コードについてもう少し説明します。 ここでは、コーディングは単に表に従っていますが、構造には開始、終了、移動のゾーンがあります。 移動とは、別のコードテーブルから別のコードテーブルに移動することを意味します(Code128A、Code 128B、Code 128Cを参照)



このコードは、前のコードとは異なり、任意の長さを持ち、1〜128のすべてのASCIIで構成できます。アルゴリズムに関する多くの情報があります。



www.barcodeman.com/info/c128.php3 )。



まあ、それがすべてです、主なことは言いました。 最後に、情報をコードのバイナリ表現に変換するために作成した独自のコードを添付します。 コードは正しく動作しない場合があり、最適に動作しない場合があります。 保証はいたしません。



ここにコード: pastebin.com/xsGVe9tG



All Articles