using System;
using System.Collections.Generic;
using System.Text;
using System.Drawing;
namespace BarCodeCreate
{
public class GBarcodeMgr
{
//起始位
enum Code128StartModes
{
CodeUnset = 0,
CodeA = 103,
CodeB = 104,
CodeC = 105
};
private const string mCode128Stop = “1100011101011”;
/// <summary>
/// 条码编码规则
/// </summary>
List<string> mCode128Encoding = new List<string>();
private void InitEncoding()
{
mCode128Encoding.Add(“11011001100”);
mCode128Encoding.Add(“11001101100”);
mCode128Encoding.Add(“11001100110”);
mCode128Encoding.Add(“10010011000”);
mCode128Encoding.Add(“10010001100”);
mCode128Encoding.Add(“10001001100”);
mCode128Encoding.Add(“10011001000”);
mCode128Encoding.Add(“10011000100”);
mCode128Encoding.Add(“10001100100”);
mCode128Encoding.Add(“11001001000”);
mCode128Encoding.Add(“11001000100”);
mCode128Encoding.Add(“11000100100”);
mCode128Encoding.Add(“10110011100”);
mCode128Encoding.Add(“10011011100”);
mCode128Encoding.Add(“10011001110”);
mCode128Encoding.Add(“10111001100”);
mCode128Encoding.Add(“10011101100”);
mCode128Encoding.Add(“10011100110”);
mCode128Encoding.Add(“11001110010”);
mCode128Encoding.Add(“11001011100”);
mCode128Encoding.Add(“11001001110”);
mCode128Encoding.Add(“11011100100”);
mCode128Encoding.Add(“11001110100”);
mCode128Encoding.Add(“11101101110”);
mCode128Encoding.Add(“11101001100”);
mCode128Encoding.Add(“11100101100”);
mCode128Encoding.Add(“11100100110”);
mCode128Encoding.Add(“11101100100”);
mCode128Encoding.Add(“11100110100”);
mCode128Encoding.Add(“11100110010”);
mCode128Encoding.Add(“11011011000”);
mCode128Encoding.Add(“11011000110”);
mCode128Encoding.Add(“11000110110”);
mCode128Encoding.Add(“10100011000”);
mCode128Encoding.Add(“10001011000”);
mCode128Encoding.Add(“10001000110”);
mCode128Encoding.Add(“10110001000”);
mCode128Encoding.Add(“10001101000”);
mCode128Encoding.Add(“10001100010”);
mCode128Encoding.Add(“11010001000”);
mCode128Encoding.Add(“11000101000”);
mCode128Encoding.Add(“11000100010”);
mCode128Encoding.Add(“10110111000”);
mCode128Encoding.Add(“10110001110”);
mCode128Encoding.Add(“10001101110”);
mCode128Encoding.Add(“10111011000”);
mCode128Encoding.Add(“10111000110”);
mCode128Encoding.Add(“10001110110”);
mCode128Encoding.Add(“11101110110”);
mCode128Encoding.Add(“11010001110”);
mCode128Encoding.Add(“11000101110”);
mCode128Encoding.Add(“11011101000”);
mCode128Encoding.Add(“11011100010”);
mCode128Encoding.Add(“11011101110”);
mCode128Encoding.Add(“11101011000”);
mCode128Encoding.Add(“11101000110”);
mCode128Encoding.Add(“11100010110”);
mCode128Encoding.Add(“11101101000”);
mCode128Encoding.Add(“11101100010”);
mCode128Encoding.Add(“11100011010”);
mCode128Encoding.Add(“11101111010”);
mCode128Encoding.Add(“11001000010”);
mCode128Encoding.Add(“11110001010”);
mCode128Encoding.Add(“10100110000”);
mCode128Encoding.Add(“10100001100”);
mCode128Encoding.Add(“10010110000”);
mCode128Encoding.Add(“10010000110”);
mCode128Encoding.Add(“10000101100”);
mCode128Encoding.Add(“10000100110”);
mCode128Encoding.Add(“10110010000”);
mCode128Encoding.Add(“10110000100”);
mCode128Encoding.Add(“10011010000”);
mCode128Encoding.Add(“10011000010”);
mCode128Encoding.Add(“10000110100”);
mCode128Encoding.Add(“10000110010”);
mCode128Encoding.Add(“11000010010”);
mCode128Encoding.Add(“11001010000”);
mCode128Encoding.Add(“1110111010”);
mCode128Encoding.Add(“1000010100”);
mCode128Encoding.Add(“0001111010”);
mCode128Encoding.Add(“10100111100”);
mCode128Encoding.Add(“10010111100”);
mCode128Encoding.Add(“10010011110”);
mCode128Encoding.Add(“10111100100”);
mCode128Encoding.Add(“10011110100”);
mCode128Encoding.Add(“10011110010”);
mCode128Encoding.Add(“11110100100”);
mCode128Encoding.Add(“11110010100”);
mCode128Encoding.Add(“11110010010”);
mCode128Encoding.Add(“11011011110”);
mCode128Encoding.Add(“11011110110”);
mCode128Encoding.Add(“11110110110”);
mCode128Encoding.Add(“10101111000”);
mCode128Encoding.Add(“10100011110”);
mCode128Encoding.Add(“10001011110”);
mCode128Encoding.Add(“10111101000”);
mCode128Encoding.Add(“10111100010”);
mCode128Encoding.Add(“11110101000”);
mCode128Encoding.Add(“11110100010”);
mCode128Encoding.Add(“10111011110”);
mCode128Encoding.Add(“10111101110”);
mCode128Encoding.Add(“11101011110”);
mCode128Encoding.Add(“11110101110”);
mCode128Encoding.Add(“11010000100”);
mCode128Encoding.Add(“11010010000”);
mCode128Encoding.Add(“11010011100”);
}
public GBarcodeMgr()
{
InitEncoding();
}
private string _OriginCode = “”;
/// <summary>
/// 条码原始内容
/// </summary>
public string OriginCode
{
get
{
return _OriginCode;
}
set
{
_OriginCode = value;
}
}
public Bitmap Create(int nHeight)
{
string encode = GetBarcodeContents();
int len = encode.Length;
int nWidth = len;
Bitmap b = new Bitmap((int)(1*nWidth+2), nHeight);
Graphics g = Graphics.FromImage(b);
g.FillRectangle(new SolidBrush(Color.White), new Rectangle(0,0,b.Width-1,b.Height-1));
Pen p = new Pen(Color.Black,1F);
int nBarcodeHeight = (int)(nHeight * 0.71);
int nTextHeight = nHeight – nBarcodeHeight;
Brush brush=new SolidBrush(Color.Black);
for (int i = 0; i < len; i++)
{
if (encode[i] == ‘1’)
{
g.FillRectangle(brush, new RectangleF((float)(1*i + 1), 0F, 1F, (float)(nBarcodeHeight – 1)));
}
}
string code = Encoding.ASCII.GetString(Encoding.Convert(Encoding.Default, Encoding.ASCII, Encoding.Default.GetBytes(_OriginCode)));
len = code.Length;
Font f=new Font(“微软雅黑”,(float)(nTextHeight*0.45));
for (int i = 0; i < len; i++)
{
char c = code[i];
string s=””;
s+=c;
RectangleF rf=new RectangleF((float)(i*nWidth/len),(float)(nBarcodeHeight-1+1),(float)(nWidth/len),(float)(nTextHeight*0.9));
g.DrawString(s, f, brush, rf);
}
return b;
}
//条码编码后的内容
string GetBarcodeContents()
{
//转换成ASCII
string code = Encoding.ASCII.GetString(Encoding.Convert(Encoding.Default, Encoding.ASCII, Encoding.Default.GetBytes(_OriginCode)));
List<int> codeDigit = new List<int>();
codeDigit.Add((int)Code128StartModes.CodeB);
int checkDigit = (int)Code128StartModes.CodeB;
int len = code.Length;
for (int i = 0; i < len; i++)
{
int tmp = (int)code[i];
int digit = tmp – 32;
codeDigit.Add(digit);
checkDigit += digit * (i + 1);
}
codeDigit.Add(checkDigit % 103);
string code128 = “”;
len = codeDigit.Count;
for (int i = 0; i < len; i++)
{
int index = codeDigit[i];
code128 += mCode128Encoding[index];
}
code128 += mCode128Stop;
return code128;
}
}
}
//调用代码
GBarcodeMgr mgr = new GBarcodeMgr();
mgr.OriginCode = textBox1.Text;
Bitmap b=mgr.Create(60);
b.Save(@”D:\Barcode.bmp”,ImageFormat.Bmp);
//效果



杭州格原