C#生成code128条形码的方法
本文实例讲述了物流条形码的C#实现方法,分享一下供大家参考。具体实现方法如下:
主要功能代码如下:
usingSystem; usingSystem.Collections.Generic; usingSystem.Data; usingSystem.Drawing; namespaceCode { classBarCode { publicclassCode128 { privateDataTablem_Code128=newDataTable(); privateuintm_Height=40; ///<summary> ///高度 ///</summary> publicuintHeight{get{returnm_Height;}set{m_Height=value;}} privateFontm_ValueFont=null; ///<summary> ///是否显示可见号码如果为NULL不显示号码 ///</summary> publicFontValueFont{get{returnm_ValueFont;}set{m_ValueFont=value;}} privatebytem_Magnify=0; ///<summary> ///放大倍数 ///</summary> publicbyteMagnify{get{returnm_Magnify;}set{m_Magnify=value;}} ///<summary> ///条码类别 ///</summary> publicenumEncode { Code128A, Code128B, Code128C, EAN128 } publicCode128() { 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","0","16","123122"); m_Code128.Rows.Add("17","1","1","17","123221"); m_Code128.Rows.Add("18","2","2","18","223211"); m_Code128.Rows.Add("19","3","3","19","221132"); m_Code128.Rows.Add("20","4","4","20","221231"); m_Code128.Rows.Add("21","5","5","21","213212"); m_Code128.Rows.Add("22","6","6","22","223112"); m_Code128.Rows.Add("23","7","7","23","312131"); m_Code128.Rows.Add("24","8","8","24","311222"); m_Code128.Rows.Add("25","9","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","A","33","111323"); m_Code128.Rows.Add("34","B","B","34","131123"); m_Code128.Rows.Add("35","C","C","35","131321"); m_Code128.Rows.Add("36","D","D","36","112313"); m_Code128.Rows.Add("37","E","E","37","132113"); m_Code128.Rows.Add("38","F","F","38","132311"); m_Code128.Rows.Add("39","G","G","39","211313"); m_Code128.Rows.Add("40","H","H","40","231113"); m_Code128.Rows.Add("41","I","I","41","231311"); m_Code128.Rows.Add("42","J","J","42","112133"); m_Code128.Rows.Add("43","K","K","43","112331"); m_Code128.Rows.Add("44","L","L","44","132131"); m_Code128.Rows.Add("45","M","M","45","113123"); m_Code128.Rows.Add("46","N","N","46","113321"); m_Code128.Rows.Add("47","O","O","47","133121"); m_Code128.Rows.Add("48","P","P","48","313121"); m_Code128.Rows.Add("49","Q","Q","49","211331"); m_Code128.Rows.Add("50","R","R","50","231131"); m_Code128.Rows.Add("51","S","S","51","213113"); m_Code128.Rows.Add("52","T","T","52","213311"); m_Code128.Rows.Add("53","U","U","53","213131"); m_Code128.Rows.Add("54","V","V","54","311123"); m_Code128.Rows.Add("55","W","W","55","311321"); m_Code128.Rows.Add("56","X","X","56","331121"); m_Code128.Rows.Add("57","Y","Y","57","312113"); m_Code128.Rows.Add("58","Z","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","I","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","FNC3","96","114311"); m_Code128.Rows.Add("97","FNC2","FNC2","97","411113"); m_Code128.Rows.Add("98","SHIFT","SHIFT","98","411311"); m_Code128.Rows.Add("99","CODEC","CODEC","99","113141"); m_Code128.Rows.Add("100","CODEB","FNC4","CODEB","114131"); m_Code128.Rows.Add("101","FNC4","CODEA","CODEA","311141"); m_Code128.Rows.Add("102","FNC1","FNC1","FNC1","411131"); m_Code128.Rows.Add("103","StartA","StartA","StartA","211412"); m_Code128.Rows.Add("104","StartB","StartB","StartB","211214"); m_Code128.Rows.Add("105","StartC","StartC","StartC","211232"); m_Code128.Rows.Add("106","Stop","Stop","Stop","2331112"); #endregion } ///<summary> ///获取128图形 ///</summary> ///<paramname="p_Text">文字</param> ///<paramname="p_Code">编码</param> ///<returns>图形</returns> publicBitmapGetCodeImage(stringp_Text,Encodep_Code) { string_ViewText=p_Text; string_Text=""; IList<int>_TextNumb=newList<int>(); int_Examine=0;//首位 switch(p_Code) { caseEncode.Code128C: _Examine=105; if(!((p_Text.Length&1)==0))thrownewException("128C长度必须是偶数"); while(p_Text.Length!=0) { int_Temp=0; try { int_CodeNumb128=Int32.Parse(p_Text.Substring(0,2)); } catch { thrownewException("128C必须是数字!"); } _Text+=GetValue(p_Code,p_Text.Substring(0,2),ref_Temp); _TextNumb.Add(_Temp); p_Text=p_Text.Remove(0,2); } break; caseEncode.EAN128: _Examine=105; if(!((p_Text.Length&1)==0))thrownewException("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 { thrownewException("128C必须是数字!"); } _Text+=GetValue(Encode.Code128C,p_Text.Substring(0,2),ref_Temp); _TextNumb.Add(_Temp); p_Text=p_Text.Remove(0,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,p_Text.Substring(0,1),ref_Temp); if(_ValueCode.Length==0)thrownewException("无效的字符集!"+p_Text.Substring(0,1).ToString()); _Text+=_ValueCode; _TextNumb.Add(_Temp); p_Text=p_Text.Remove(0,1); } break; } if(_TextNumb.Count==0)thrownewException("错误的编码,无数据"); _Text=_Text.Insert(0,GetValue(_Examine));//获取开始位 for(inti=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> ///<paramname="p_Code">编码</param> ///<paramname="p_Value">数值Ab30</param> ///<paramname="p_SetID">返回编号</param> ///<returns>编码</returns> privatestringGetValue(Encodep_Code,stringp_Value,refintp_SetID) { if(m_Code128==null)return""; DataRow[]_Row=m_Code128.Select(p_Code.ToString()+"='"+p_Value+"'"); if(_Row.Length!=1)thrownewException("错误的编码"+p_Value.ToString()); p_SetID=Int32.Parse(_Row[0]["ID"].ToString()); return_Row[0]["BandCode"].ToString(); } ///<summary> ///根据编号获得条纹 ///</summary> ///<paramname="p_CodeId"></param> ///<returns></returns> privatestringGetValue(intp_CodeId) { DataRow[]_Row=m_Code128.Select("ID='"+p_CodeId.ToString()+"'"); if(_Row.Length!=1)thrownewException("验效位的编码错误"+p_CodeId.ToString()); return_Row[0]["BandCode"].ToString(); } ///<summary> ///获得条码图形 ///</summary> ///<paramname="p_Text">文字</param> ///<returns>图形</returns> privateBitmapGetImage(stringp_Text) { char[]_Value=p_Text.ToCharArray(); int_Width=0; for(inti=0;i!=_Value.Length;i++) { _Width+=Int32.Parse(_Value[i].ToString())*(m_Magnify+1); } Bitmap_CodeImage=newBitmap(_Width,(int)m_Height); Graphics_Garphics=Graphics.FromImage(_CodeImage); //Pen_Pen; int_LenEx=0; for(inti=0;i!=_Value.Length;i++) { int_ValueNumb=Int32.Parse(_Value[i].ToString())*(m_Magnify+1);//获取宽和放大系数 if(!((i&1)==0)) { //_Pen=newPen(Brushes.White,_ValueNumb); _Garphics.FillRectangle(Brushes.White,newRectangle(_LenEx,0,_ValueNumb,(int)m_Height)); } else { //_Pen=newPen(Brushes.Black,_ValueNumb); _Garphics.FillRectangle(Brushes.Black,newRectangle(_LenEx,0,_ValueNumb,(int)m_Height)); } //_Garphics.(_Pen,newPoint(_LenEx,0),newPoint(_LenEx,m_Height)); _LenEx+=_ValueNumb; } _Garphics.Dispose(); return_CodeImage; } ///<summary> ///显示可见条码文字如果小于40不显示文字 ///</summary> ///<paramname="p_Bitmap">图形</param> privatevoidGetViewText(Bitmapp_Bitmap,stringp_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,newRectangle(0,_StarY,p_Bitmap.Width,(int)_DrawSize.Height)); _Graphics.DrawString(p_ViewText,m_ValueFont,Brushes.Black,0,_StarY); } //12345678 //(105+(1*12+2*34+3*56+4*78))%103=47 //结果为starc+12+34+56+78+47+end internalImageGetCodeImage(stringp) { thrownewNotImplementedException(); } } } }
调用代码为:
Code128_Code=newCode128(); _Code.ValueFont=newFont("宋体",20); System.Drawing.BitmapimgTemp=_Code.GetCodeImage("T26200-1900-123-1-0900",Code128.Encode.Code128A); imgTemp.Save(System.AppDomain.CurrentDomain.BaseDirectory+"\\"+"BarCode.gif",System.Drawing.Imaging.ImageFormat.Gif);
希望本文所述方法对大家的C#程序设计有所帮助。