C#生成Code128码
发布时间:2020-12-15 17:52:41 所属栏目:百科 来源:网络整理
导读:今天PHP站长网 52php.cn把收集自互联网的代码分享给大家,仅供参考。 using System; using System.Collections.Generic; using System.Data; using System.Drawing; namespace Code { class BarCode { public class Code1
以下代码由PHP站长网 52php.cn收集自互联网 现在PHP站长网小编把它分享给大家,仅供参考 using System; using System.Collections.Generic; using System.Data; using System.Drawing; namespace Code { class BarCode { public class Code128 { private DataTable m_Code128 = new DataTable(); private uint m_Height = 40; /// <summary> /// 高度 /// </summary> public uint Height { get { return m_Height; } set { m_Height = value; } } private Font m_ValueFont = null; /// <summary> /// 是否显示可见号码 如果为NULL不显示号码 /// </summary> public Font ValueFont { get { return m_ValueFont; } set { m_ValueFont = value; } } private byte m_Magnify = 0; /// <summary> /// 放大倍数 /// </summary> public byte Magnify { get { return m_Magnify; } set { m_Magnify = value; } } /// <summary> /// 条码类别 /// </summary> public enum Encode { Code128A,Code128B,Code128C,EAN128 } public Code128() { m_Code128.Columns.Add("ID"); m_Code128.Columns.Add("Code128A"); m_Code128.Columns.Add("Code128B"); m_Code128.Columns.Add("Code128C"); m_Code128.Columns.Add("BandCode"); m_Code128.CaseSensitive = true; #region 数据表 m_Code128.Rows.Add("0"," ","00","212222"); m_Code128.Rows.Add("1","!","01","222122"); m_Code128.Rows.Add("2",""","02","222221"); m_Code128.Rows.Add("3","#","03","121223"); m_Code128.Rows.Add("4","$","04","121322"); m_Code128.Rows.Add("5","%","05","131222"); m_Code128.Rows.Add("6","&","06","122213"); m_Code128.Rows.Add("7","'","07","122312"); m_Code128.Rows.Add("8","(","08","132212"); m_Code128.Rows.Add("9",")","09","221213"); m_Code128.Rows.Add("10","*","10","221312"); m_Code128.Rows.Add("11","+","11","231212"); m_Code128.Rows.Add("12",","12","112232"); m_Code128.Rows.Add("13","-","13","122132"); m_Code128.Rows.Add("14",".","14","122231"); m_Code128.Rows.Add("15","/","15","113222"); m_Code128.Rows.Add("16","0","16","123122"); m_Code128.Rows.Add("17","1","17","123221"); m_Code128.Rows.Add("18","2","18","223211"); m_Code128.Rows.Add("19","3","19","221132"); m_Code128.Rows.Add("20","4","20","221231"); m_Code128.Rows.Add("21","5","21","213212"); m_Code128.Rows.Add("22","6","22","223112"); m_Code128.Rows.Add("23","7","23","312131"); m_Code128.Rows.Add("24","8","24","311222"); m_Code128.Rows.Add("25","9","25","321122"); m_Code128.Rows.Add("26",":","26","321221"); m_Code128.Rows.Add("27",";","27","312212"); m_Code128.Rows.Add("28","<","28","322112"); m_Code128.Rows.Add("29","=","29","322211"); m_Code128.Rows.Add("30",">","30","212123"); m_Code128.Rows.Add("31","?","31","212321"); m_Code128.Rows.Add("32","@","32","232121"); m_Code128.Rows.Add("33","A","33","111323"); m_Code128.Rows.Add("34","B","34","131123"); m_Code128.Rows.Add("35","C","35","131321"); m_Code128.Rows.Add("36","D","36","112313"); m_Code128.Rows.Add("37","E","37","132113"); m_Code128.Rows.Add("38","F","38","132311"); m_Code128.Rows.Add("39","G","39","211313"); m_Code128.Rows.Add("40","H","40","231113"); m_Code128.Rows.Add("41","I","41","231311"); m_Code128.Rows.Add("42","J","42","112133"); m_Code128.Rows.Add("43","K","43","112331"); m_Code128.Rows.Add("44","L","44","132131"); m_Code128.Rows.Add("45","M","45","113123"); m_Code128.Rows.Add("46","N","46","113321"); m_Code128.Rows.Add("47","O","47","133121"); m_Code128.Rows.Add("48","P","48","313121"); m_Code128.Rows.Add("49","Q","49","211331"); m_Code128.Rows.Add("50","R","50","231131"); m_Code128.Rows.Add("51","S","51","213113"); m_Code128.Rows.Add("52","T","52","213311"); m_Code128.Rows.Add("53","U","53","213131"); m_Code128.Rows.Add("54","V","54","311123"); m_Code128.Rows.Add("55","W","55","311321"); m_Code128.Rows.Add("56","X","56","331121"); m_Code128.Rows.Add("57","Y","57","312113"); m_Code128.Rows.Add("58","Z","58","312311"); m_Code128.Rows.Add("59","[","59","332111"); m_Code128.Rows.Add("60","","60","314111"); m_Code128.Rows.Add("61","]","61","221411"); m_Code128.Rows.Add("62","^","62","431111"); m_Code128.Rows.Add("63","_","63","111224"); m_Code128.Rows.Add("64","NUL","`","64","111422"); m_Code128.Rows.Add("65","SOH","a","65","121124"); m_Code128.Rows.Add("66","STX","b","66","121421"); m_Code128.Rows.Add("67","ETX","c","67","141122"); m_Code128.Rows.Add("68","EOT","d","68","141221"); m_Code128.Rows.Add("69","ENQ","e","69","112214"); m_Code128.Rows.Add("70","ACK","f","70","112412"); m_Code128.Rows.Add("71","BEL","g","71","122114"); m_Code128.Rows.Add("72","BS","h","72","122411"); m_Code128.Rows.Add("73","HT","i","73","142112"); m_Code128.Rows.Add("74","LF","j","74","142211"); m_Code128.Rows.Add("75","VT","k","75","241211"); m_Code128.Rows.Add("76","FF","76","221114"); m_Code128.Rows.Add("77","CR","m","77","413111"); m_Code128.Rows.Add("78","SO","n","78","241112"); m_Code128.Rows.Add("79","SI","o","79","134111"); m_Code128.Rows.Add("80","DLE","p","80","111242"); m_Code128.Rows.Add("81","DC1","q","81","121142"); m_Code128.Rows.Add("82","DC2","r","82","121241"); m_Code128.Rows.Add("83","DC3","s","83","114212"); m_Code128.Rows.Add("84","DC4","t","84","124112"); m_Code128.Rows.Add("85","NAK","u","85","124211"); m_Code128.Rows.Add("86","SYN","v","86","411212"); m_Code128.Rows.Add("87","ETB","w","87","421112"); m_Code128.Rows.Add("88","CAN","x","88","421211"); m_Code128.Rows.Add("89","EM","y","89","212141"); m_Code128.Rows.Add("90","SUB","z","90","214121"); m_Code128.Rows.Add("91","ESC","{","91","412121"); m_Code128.Rows.Add("92","FS","|","92","111143"); m_Code128.Rows.Add("93","GS","}","93","111341"); m_Code128.Rows.Add("94","RS","~","94","131141"); m_Code128.Rows.Add("95","US","DEL","95","114113"); m_Code128.Rows.Add("96","FNC3","96","114311"); m_Code128.Rows.Add("97","FNC2","97","411113"); m_Code128.Rows.Add("98","SHIFT","98","411311"); m_Code128.Rows.Add("99","CODEC","99","113141"); m_Code128.Rows.Add("100","CODEB","FNC4","114131"); m_Code128.Rows.Add("101","CODEA","311141"); m_Code128.Rows.Add("102","FNC1","411131"); m_Code128.Rows.Add("103","StartA","211412"); m_Code128.Rows.Add("104","StartB","211214"); m_Code128.Rows.Add("105","StartC","211232"); m_Code128.Rows.Add("106","Stop","2331112"); #endregion } /// <summary> /// 获取128图形 /// </summary> /// <param name="p_Text">文字</param> /// <param name="p_Code">编码</param> /// <returns>图形</returns> public Bitmap GetCodeImage(string p_Text,Encode p_Code) { string _ViewText = p_Text; string _Text = ""; IList<int> _TextNumb = new List<int>(); int _Examine = 0; //首位 switch (p_Code) { case Encode.Code128C: _Examine = 105; if (!((p_Text.Length & 1) == 0)) throw new Exception("128C长度必须是偶数"); while (p_Text.Length != 0) { int _Temp = 0; try { int _CodeNumb128 = Int32.Parse(p_Text.Substring(0,2)); } catch { throw new Exception("128C必须是数字!"); } _Text += GetValue(p_Code,p_Text.Substring(0,2),ref _Temp); _TextNumb.Add(_Temp); p_Text = p_Text.Remove(0,2); } break; case Encode.EAN128: _Examine = 105; if (!((p_Text.Length & 1) == 0)) throw new Exception("EAN128长度必须是偶数"); _TextNumb.Add(102); _Text += "411131"; while (p_Text.Length != 0) { int _Temp = 0; try { int _CodeNumb128 = Int32.Parse(p_Text.Substring(0,2)); } catch { throw new Exception("128C必须是数字!"); } _Text += GetValue(Encode.Code128C,2); } break; default: if (p_Code == Encode.Code128A) { _Examine = 103; } else { _Examine = 104; } while (p_Text.Length != 0) { int _Temp = 0; string _ValueCode = GetValue(p_Code,1),ref _Temp); if (_ValueCode.Length == 0) throw new Exception("无效的字符集!" + p_Text.Substring(0,1).ToString()); _Text += _ValueCode; _TextNumb.Add(_Temp); p_Text = p_Text.Remove(0,1); } break; } if (_TextNumb.Count == 0) throw new Exception("错误的编码,无数据"); _Text = _Text.Insert(0,GetValue(_Examine)); //获取开始位 for (int i = 0; i != _TextNumb.Count; i++) { _Examine += _TextNumb[i] * (i + 1); } _Examine = _Examine % 103; //获得严效位 _Text += GetValue(_Examine); //获取严效位 _Text += "2331112"; //结束位 Bitmap _CodeImage = GetImage(_Text); GetViewText(_CodeImage,_ViewText); return _CodeImage; } /// <summary> /// 获取目标对应的数据 /// </summary> /// <param name="p_Code">编码</param> /// <param name="p_Value">数值 A b 30</param> /// <param name="p_SetID">返回编号</param> /// <returns>编码</returns> private string GetValue(Encode p_Code,string p_Value,ref int p_SetID) { if (m_Code128 == null) return ""; DataRow[] _Row = m_Code128.Select(p_Code.ToString() + "='" + p_Value + "'"); if (_Row.Length != 1) throw new Exception("错误的编码" + p_Value.ToString()); p_SetID = Int32.Parse(_Row[0]["ID"].ToString()); return _Row[0]["BandCode"].ToString(); } /// <summary> /// 根据编号获得条纹 /// </summary> /// <param name="p_CodeId"></param> /// <returns></returns> private string GetValue(int p_CodeId) { DataRow[] _Row = m_Code128.Select("ID='" + p_CodeId.ToString() + "'"); if (_Row.Length != 1) throw new Exception("验效位的编码错误" + p_CodeId.ToString()); return _Row[0]["BandCode"].ToString(); } /// <summary> /// 获得条码图形 /// </summary> /// <param name="p_Text">文字</param> /// <returns>图形</returns> private Bitmap GetImage(string p_Text) { char[] _Value = p_Text.ToCharArray(); int _Width = 0; for (int i = 0; i != _Value.Length; i++) { _Width += Int32.Parse(_Value[i].ToString()) * (m_Magnify + 1); } Bitmap _CodeImage = new Bitmap(_Width,(int)m_Height); Graphics _Garphics = Graphics.FromImage(_CodeImage); //Pen _Pen; int _LenEx = 0; for (int i = 0; i != _Value.Length; i++) { int _ValueNumb = Int32.Parse(_Value[i].ToString()) * (m_Magnify + 1); //获取宽和放大系数 if (!((i & 1) == 0)) { //_Pen = new Pen(Brushes.White,_ValueNumb); _Garphics.FillRectangle(Brushes.White,new Rectangle(_LenEx,_ValueNumb,(int)m_Height)); } else { //_Pen = new Pen(Brushes.Black,_ValueNumb); _Garphics.FillRectangle(Brushes.Black,(int)m_Height)); } //_Garphics.(_Pen,new Point(_LenEx,0),m_Height)); _LenEx += _ValueNumb; } _Garphics.Dispose(); return _CodeImage; } /// <summary> /// 显示可见条码文字 如果小于40 不显示文字 /// </summary> /// <param name="p_Bitmap">图形</param> private void GetViewText(Bitmap p_Bitmap,string p_ViewText) { if (m_ValueFont == null) return; Graphics _Graphics = Graphics.FromImage(p_Bitmap); SizeF _DrawSize = _Graphics.MeasureString(p_ViewText,m_ValueFont); if (_DrawSize.Height > p_Bitmap.Height - 10 || _DrawSize.Width > p_Bitmap.Width) { _Graphics.Dispose(); return; } int _StarY = p_Bitmap.Height - (int)_DrawSize.Height; _Graphics.FillRectangle(Brushes.White,new Rectangle(0,_StarY,p_Bitmap.Width,(int)_DrawSize.Height)); _Graphics.DrawString(p_ViewText,m_ValueFont,Brushes.Black,_StarY); } //12345678 //(105 + (1 * 12 + 2 * 34 + 3 * 56 + 4 *78)) % 103 = 47 //结果为starc +12 +34 +56 +78 +47 +end internal Image GetCodeImage(string p) { throw new NotImplementedException(); } } } } Code128 _Code = new Code128(); _Code.ValueFont = new Font("宋体",20); System.Drawing.Bitmap imgTemp = _Code.GetCodeImage("T26200-1900-123-1-0900",Code128.Encode.Code128A); imgTemp.Save(System.AppDomain.CurrentDomain.BaseDirectory + "" + "BarCode.gif",System.Drawing.Imaging.ImageFormat.Gif); 以上内容由PHP站长网【52php.cn】收集整理供大家参考研究 如果以上内容对您有帮助,欢迎收藏、点赞、推荐、分享。 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |