Simple EAN - 13 barcode generator
Here is a very simple EAN - 13 barcode generator written in C#.
using System;
using System.Text;
using System.Drawing;
using System.Drawing.Drawing2D;
using System.Drawing.Imaging;
using Karna.Barcode.Properties;
using System.Globalization;
namespace Karna.Barcode
{
public class Ean13
{
private string barcodeId;
private Image image;
public Ean13(Image image)
{
this.image = image;
}
public string BarcodeId
{
get { return barcodeId; }
set
{
if (value == null)
return;
if (value.Length != 13)
{
throw new ArgumentException("Wrong data length");
}
barcodeId = value;
string s = null;
string[,] encTable = new string[3, 10];
int[,] parityToEnc = new int[10, 8];
parityToEnc[1, 2] = 0;
parityToEnc[1, 3] = 0;
parityToEnc[1, 4] = 1;
parityToEnc[1, 5] = 0;
parityToEnc[1, 6] = 1;
parityToEnc[1, 7] = 1;
parityToEnc[2, 2] = 0;
parityToEnc[2, 3] = 0;
parityToEnc[2, 4] = 1;
parityToEnc[2, 5] = 1;
parityToEnc[2, 6] = 0;
parityToEnc[2, 7] = 1;
parityToEnc[3, 2] = 0;
parityToEnc[3, 3] = 0;
parityToEnc[3, 4] = 1;
parityToEnc[3, 5] = 1;
parityToEnc[3, 6] = 1;
parityToEnc[3, 7] = 0;
parityToEnc[4, 2] = 0;
parityToEnc[4, 3] = 1;
parityToEnc[4, 4] = 0;
parityToEnc[4, 5] = 0;
parityToEnc[4, 6] = 1;
parityToEnc[4, 7] = 1;
parityToEnc[5, 2] = 0;
parityToEnc[5, 3] = 1;
parityToEnc[5, 4] = 1;
parityToEnc[5, 5] = 0;
parityToEnc[5, 6] = 0;
parityToEnc[5, 7] = 1;
parityToEnc[6, 2] = 0;
parityToEnc[6, 3] = 1;
parityToEnc[6, 4] = 1;
parityToEnc[6, 5] = 1;
parityToEnc[6, 6] = 0;
parityToEnc[6, 7] = 0;
parityToEnc[7, 2] = 0;
parityToEnc[7, 3] = 1;
parityToEnc[7, 4] = 0;
parityToEnc[7, 5] = 1;
parityToEnc[7, 6] = 0;
parityToEnc[7, 7] = 1;
parityToEnc[8, 2] = 0;
parityToEnc[8, 3] = 1;
parityToEnc[8, 4] = 0;
parityToEnc[8, 5] = 1;
parityToEnc[8, 6] = 1;
parityToEnc[8, 7] = 0;
parityToEnc[9, 2] = 0;
parityToEnc[9, 3] = 1;
parityToEnc[9, 4] = 1;
parityToEnc[9, 5] = 0;
parityToEnc[9, 6] = 1;
parityToEnc[9, 7] = 0;
encTable[0, 0] = "0001101";
encTable[0, 1] = "0011001";
encTable[0, 2] = "0010011";
encTable[0, 3] = "0111101";
encTable[0, 4] = "0100011";
encTable[0, 5] = "0110001";
encTable[0, 6] = "0101111";
encTable[0, 7] = "0111011";
encTable[0, 8] = "0110111";
encTable[0, 9] = "0001011";
encTable[1, 0] = "0100111";
encTable[1, 1] = "0110011";
encTable[1, 2] = "0011011";
encTable[1, 3] = "0100001";
encTable[1, 4] = "0011101";
encTable[1, 5] = "0111001";
encTable[1, 6] = "0000101";
encTable[1, 7] = "0010001";
encTable[1, 8] = "0001001";
encTable[1, 9] = "0010111";
encTable[2, 0] = "1110010";
encTable[2, 1] = "1100110";
encTable[2, 2] = "1101100";
encTable[2, 3] = "1000010";
encTable[2, 4] = "1011100";
encTable[2, 5] = "1001110";
encTable[2, 6] = "1010000";
encTable[2, 7] = "1000100";
encTable[2, 8] = "1001000";
encTable[2, 9] = "1110100";
string lastString = "";
lastString += "101";
StringBuilder sb = new StringBuilder();
for (int i = 2; i <= 7; ++i)
{
string firstDigit_s = value[0].ToString();
int firstDigit_i = int.Parse(firstDigit_s, CultureInfo.InvariantCulture);
string curDigit_s = value[i-1].ToString();
int curDigit_i = int.Parse(curDigit_s, CultureInfo.InvariantCulture);
sb.Append(encTable[parityToEnc[firstDigit_i, i], curDigit_i]);
}
lastString += sb.ToString();
lastString += "01010";
StringBuilder sb2 = new StringBuilder();
for (int i = 8; i <= 13; ++i)
{
string curDigit_s = value[i-1].ToString();
int curDigit_i = int.Parse(curDigit_s, CultureInfo.InvariantCulture);
sb2.Append(encTable[2, curDigit_i]);
}
lastString += sb2.ToString();
lastString += "101";
Bitmap bitmap = new Bitmap(210, 146, PixelFormat.Format32bppArgb);
Graphics canvas = Graphics.FromImage(bitmap);
canvas.Clear(Color.White);
for (int i = 1; i <= 190; i = i + 2)
{
if (lastString[i / 2] == '1')
{
if (i <= 6 || (i >= 90 && i <= 100) || i >= 184)
{
canvas.DrawLine(Pens.Black, new Point(i + 14, 10), new Point(i + 14, 136));
canvas.DrawLine(Pens.Black, new Point(i + 15, 10), new Point(i + 15, 136));
}
else
{
canvas.DrawLine(Pens.Black, new Point(i + 14, 10), new Point(i + 14, 123));
canvas.DrawLine(Pens.Black, new Point(i + 15, 10), new Point(i + 15, 123));
}
}
}
canvas.SmoothingMode = SmoothingMode.HighQuality;
canvas.InterpolationMode = InterpolationMode.HighQualityBicubic;
canvas.PixelOffsetMode = PixelOffsetMode.HighQuality;
canvas.CompositingQuality = CompositingQuality.HighQuality;
Font font = new Font("Arial", 11);
canvas.DrawString(value[0].ToString(), font, Brushes.Black, 4, 116);
s = value[1] + " " + value[2] + " " + value[3] + " " + value[4] +
" " + value[5] + " " + value[6];
canvas.DrawString(s, font, Brushes.Black, 30, 123);
s = value[7] + " " + value[8] + " " + value[9] + " " + value[10] +
" " + value[11] + " " + value[12];
canvas.DrawString(s, font, Brushes.Black, 121, 123);
font.Dispose();
canvas.Dispose();
if (image != null)
{
Graphics g = Graphics.FromImage(image);
g.InterpolationMode = InterpolationMode.HighQualityBicubic;
g.SmoothingMode = SmoothingMode.HighQuality;
g.DrawImage(bitmap, 0, 0, image.Width, image.Height);
g.Dispose();
}
bitmap.Dispose();
}
}
}
}
Comments
Post a Comment