// 生成条形码( 128条码,标准参考:GB/T 18347-2001 ) public class BarCode { public static byte[] CreateBarCode(string text) { //查检是否合条件 bool Checked = CheckErrerCode(text); if (!Checked) { throw new Exception("条形码字符不合要求,不能是汉字或全角字符"); } string BarString = CreateBarString(text); return BarCode_Code128C(BarString, 30); } private static string CreateBarString(string Bardata) { string BarHead = "bbsbssbssss"; //码头 string BarBody = ""; //码身 string BarCheck = ""; //码检 string BarEnd = "bbsssbbbsbsbb"; //码尾 int checkNum = 104; //循环添加码身,计算码检 for (int i = 1; i <= Bardata.Length; i++) { int index = (int)Bardata[i - 1] - 32; checkNum += (index * i); BarBody += AddBarcodeTag(index);//加入字符值的条码标记 } //码检值计算 BarCheck = AddBarcodeTag(int.Parse(Convert.ToDouble(checkNum % 103).ToString("0"))); string barstring = BarHead + BarBody + BarCheck + BarEnd; return barstring; } //增加一个条码标记 private static string AddBarcodeTag(int CodeIndex) { string result = ""; /// <summary>1-4的条的字符标识 </summary> string[] TagB = { "", "b", "bb", "bbb", "bbbb" }; /// <summary>1-4的空的字符标识 </summary> string[] TagS = { "", "s", "ss", "sss", "ssss" }; string[] Code128List = new string[] { "212222","222122","222221","121223","121322","131222","122213","122312","132212","221213", "221312","231212","112232","122132","122231","113222","123122","123221","223211","221132", "221231","213212","223112","312131","311222","321122","321221","312212","322112","322211", "212123","212321","232121","111323","131123","131321","112313","132113","132311","211313", "231113","231311","112133","112331","132131","113123","113321","133121","313121","211331", "231131","213113","213311","213131","311123","311321","331121","312113","312311","332111", "314111","221411","431111","111224","111422","121124","121421","141122","141221","112214", "112412","122114","122411","142112","142211","241211","221114","413111","241112","134111", "111242","121142","121241","114212","124112","124211","411212","421112","421211","212141", "214121","412121","111143","111341","131141","114113","114311","411113","411311","113141", "114131","311141","411131","211412","211214","211232" }; string tag = Code128List[CodeIndex]; for (int i = 0; i < tag.Length; i++) { string temp = ""; int num = int.Parse(tag[i].ToString()); if (i % 2 == 0) { temp = TagB[num]; } else { temp = TagS[num]; } result += temp; } return result; } private static bool CheckErrerCode(string CheckData) { foreach (char i in CheckData) { byte[] tmp = UnicodeEncoding.Default.GetBytes(i.ToString()); if (tmp.Length > 1) { return false; } } return true; } private static byte[] BarCode_Code128C(string BarString, int Height) { Bitmap BarCode = new Bitmap(BarString.Length, Height, System.Drawing.Imaging.PixelFormat.Format32bppArgb); try { char[] CharString = BarString.ToCharArray(); for (int i = 0; i < CharString.Length; i++) { for (int j = 0; j < Height; j++) { if (CharString[i] == 'b') { BarCode.SetPixel(i, j, Color.Black); } else { BarCode.SetPixel(i, j, Color.White); } } } MemoryStream Stream = new MemoryStream(); BarCode.Save(Stream, ImageFormat.Jpeg); return Stream.ToArray(); } catch { return null; } } }
重点来了,这样生成的效果变成只有条码,一般常见的条码下面那行字数字没有生成上去,请问各位大师应该修改。把文字也生成进去。
如果这个些代码中有那个功能的话就是循环少了;
如果代码中没有那个功能的话在最后补上就可以了吧;
原来还可以直接生成条码,学习了,留个记号