C#生成条形码

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

//效果

 

此条目发表在C#分类目录,贴了标签。将固定链接加入收藏夹。

发表评论