1. public class Code128
  2. {
  3. private DataTable m_Code128 = new DataTable();
  4. private uint m_Height = ;
  5. /// <summary>
  6. /// 高度
  7. /// </summary>
  8. public uint Height { get { return m_Height; } set { m_Height = value; } }
  9. private Font m_ValueFont = null;
  10. /// <summary>
  11. /// 是否显示可见号码 如果为NULL不显示号码
  12. /// </summary>
  13. public Font ValueFont { get { return m_ValueFont; } set { m_ValueFont = value; } }
  14. private byte m_Magnify = ;
  15. /// <summary>
  16. /// 放大倍数
  17. /// </summary>
  18. public byte Magnify { get { return m_Magnify; } set { m_Magnify = value; } }
  19. /// <summary>
  20. /// 条码类别
  21. /// </summary>
  22. public enum Encode
  23. {
  24. Code128A,
  25. Code128B,
  26. Code128C,
  27. EAN128
  28. }
  29. public Code128()
  30. {
  31. m_Code128.Columns.Add("ID");
  32. m_Code128.Columns.Add("Code128A");
  33. m_Code128.Columns.Add("Code128B");
  34. m_Code128.Columns.Add("Code128C");
  35. m_Code128.Columns.Add("BandCode");
  36. m_Code128.CaseSensitive = true;
  37. #region 数据表
  38. m_Code128.Rows.Add("", " ", " ", "", "");
  39. m_Code128.Rows.Add("", "!", "!", "", "");
  40. m_Code128.Rows.Add("", "\"", "\"", "", "");
  41. m_Code128.Rows.Add("", "#", "#", "", "");
  42. m_Code128.Rows.Add("", "$", "$", "", "");
  43. m_Code128.Rows.Add("", "%", "%", "", "");
  44. m_Code128.Rows.Add("", "&", "&", "", "");
  45. m_Code128.Rows.Add("", "'", "'", "", "");
  46. m_Code128.Rows.Add("", "(", "(", "", "");
  47. m_Code128.Rows.Add("", ")", ")", "", "");
  48. m_Code128.Rows.Add("", "*", "*", "", "");
  49. m_Code128.Rows.Add("", "+", "+", "", "");
  50. m_Code128.Rows.Add("", ",", ",", "", "");
  51. m_Code128.Rows.Add("", "-", "-", "", "");
  52. m_Code128.Rows.Add("", ".", ".", "", "");
  53. m_Code128.Rows.Add("", "/", "/", "", "");
  54. m_Code128.Rows.Add("", "", "", "", "");
  55. m_Code128.Rows.Add("", "", "", "", "");
  56. m_Code128.Rows.Add("", "", "", "", "");
  57. m_Code128.Rows.Add("", "", "", "", "");
  58. m_Code128.Rows.Add("", "", "", "", "");
  59. m_Code128.Rows.Add("", "", "", "", "");
  60. m_Code128.Rows.Add("", "", "", "", "");
  61. m_Code128.Rows.Add("", "", "", "", "");
  62. m_Code128.Rows.Add("", "", "", "", "");
  63. m_Code128.Rows.Add("", "", "", "", "");
  64. m_Code128.Rows.Add("", ":", ":", "", "");
  65. m_Code128.Rows.Add("", ";", ";", "", "");
  66. m_Code128.Rows.Add("", "<", "<", "", "");
  67. m_Code128.Rows.Add("", "=", "=", "", "");
  68. m_Code128.Rows.Add("", ">", ">", "", "");
  69. m_Code128.Rows.Add("", "?", "?", "", "");
  70. m_Code128.Rows.Add("", "@", "@", "", "");
  71. m_Code128.Rows.Add("", "A", "A", "", "");
  72. m_Code128.Rows.Add("", "B", "B", "", "");
  73. m_Code128.Rows.Add("", "C", "C", "", "");
  74. m_Code128.Rows.Add("", "D", "D", "", "");
  75. m_Code128.Rows.Add("", "E", "E", "", "");
  76. m_Code128.Rows.Add("", "F", "F", "", "");
  77. m_Code128.Rows.Add("", "G", "G", "", "");
  78. m_Code128.Rows.Add("", "H", "H", "", "");
  79. m_Code128.Rows.Add("", "I", "I", "", "");
  80. m_Code128.Rows.Add("", "J", "J", "", "");
  81. m_Code128.Rows.Add("", "K", "K", "", "");
  82. m_Code128.Rows.Add("", "L", "L", "", "");
  83. m_Code128.Rows.Add("", "M", "M", "", "");
  84. m_Code128.Rows.Add("", "N", "N", "", "");
  85. m_Code128.Rows.Add("", "O", "O", "", "");
  86. m_Code128.Rows.Add("", "P", "P", "", "");
  87. m_Code128.Rows.Add("", "Q", "Q", "", "");
  88. m_Code128.Rows.Add("", "R", "R", "", "");
  89. m_Code128.Rows.Add("", "S", "S", "", "");
  90. m_Code128.Rows.Add("", "T", "T", "", "");
  91. m_Code128.Rows.Add("", "U", "U", "", "");
  92. m_Code128.Rows.Add("", "V", "V", "", "");
  93. m_Code128.Rows.Add("", "W", "W", "", "");
  94. m_Code128.Rows.Add("", "X", "X", "", "");
  95. m_Code128.Rows.Add("", "Y", "Y", "", "");
  96. m_Code128.Rows.Add("", "Z", "Z", "", "");
  97. m_Code128.Rows.Add("", "[", "[", "", "");
  98. m_Code128.Rows.Add("", "\\", "\\", "", "");
  99. m_Code128.Rows.Add("", "]", "]", "", "");
  100. m_Code128.Rows.Add("", "^", "^", "", "");
  101. m_Code128.Rows.Add("", "_", "_", "", "");
  102. m_Code128.Rows.Add("", "NUL", "`", "", "");
  103. m_Code128.Rows.Add("", "SOH", "a", "", "");
  104. m_Code128.Rows.Add("", "STX", "b", "", "");
  105. m_Code128.Rows.Add("", "ETX", "c", "", "");
  106. m_Code128.Rows.Add("", "EOT", "d", "", "");
  107. m_Code128.Rows.Add("", "ENQ", "e", "", "");
  108. m_Code128.Rows.Add("", "ACK", "f", "", "");
  109. m_Code128.Rows.Add("", "BEL", "g", "", "");
  110. m_Code128.Rows.Add("", "BS", "h", "", "");
  111. m_Code128.Rows.Add("", "HT", "i", "", "");
  112. m_Code128.Rows.Add("", "LF", "j", "", "");
  113. m_Code128.Rows.Add("", "VT", "k", "", "");
  114. m_Code128.Rows.Add("", "FF", "I", "", "");
  115. m_Code128.Rows.Add("", "CR", "m", "", "");
  116. m_Code128.Rows.Add("", "SO", "n", "", "");
  117. m_Code128.Rows.Add("", "SI", "o", "", "");
  118. m_Code128.Rows.Add("", "DLE", "p", "", "");
  119. m_Code128.Rows.Add("", "DC1", "q", "", "");
  120. m_Code128.Rows.Add("", "DC2", "r", "", "");
  121. m_Code128.Rows.Add("", "DC3", "s", "", "");
  122. m_Code128.Rows.Add("", "DC4", "t", "", "");
  123. m_Code128.Rows.Add("", "NAK", "u", "", "");
  124. m_Code128.Rows.Add("", "SYN", "v", "", "");
  125. m_Code128.Rows.Add("", "ETB", "w", "", "");
  126. m_Code128.Rows.Add("", "CAN", "x", "", "");
  127. m_Code128.Rows.Add("", "EM", "y", "", "");
  128. m_Code128.Rows.Add("", "SUB", "z", "", "");
  129. m_Code128.Rows.Add("", "ESC", "{", "", "");
  130. m_Code128.Rows.Add("", "FS", "|", "", "");
  131. m_Code128.Rows.Add("", "GS", "}", "", "");
  132. m_Code128.Rows.Add("", "RS", "~", "", "");
  133. m_Code128.Rows.Add("", "US", "DEL", "", "");
  134. m_Code128.Rows.Add("", "FNC3", "FNC3", "", "");
  135. m_Code128.Rows.Add("", "FNC2", "FNC2", "", "");
  136. m_Code128.Rows.Add("", "SHIFT", "SHIFT", "", "");
  137. m_Code128.Rows.Add("", "CODEC", "CODEC", "", "");
  138. m_Code128.Rows.Add("", "CODEB", "FNC4", "CODEB", "");
  139. m_Code128.Rows.Add("", "FNC4", "CODEA", "CODEA", "");
  140. m_Code128.Rows.Add("", "FNC1", "FNC1", "FNC1", "");
  141. m_Code128.Rows.Add("", "StartA", "StartA", "StartA", "");
  142. m_Code128.Rows.Add("", "StartB", "StartB", "StartB", "");
  143. m_Code128.Rows.Add("", "StartC", "StartC", "StartC", "");
  144. m_Code128.Rows.Add("", "Stop", "Stop", "Stop", "");
  145. #endregion
  146. }
  147. /// <summary>
  148. /// 获取128图形
  149. /// </summary>
  150. /// <param name="p_Text">文字</param>
  151. /// <param name="p_Code">编码</param>
  152. /// <returns>图形</returns>
  153. public Bitmap GetCodeImage(string p_Text, Encode p_Code)
  154. {
  155. string _ViewText = p_Text;
  156. string _Text = "";
  157. IList<int> _TextNumb = new List<int>();
  158. int _Examine = ; //首位
  159. switch (p_Code)
  160. {
  161. case Encode.Code128C:
  162. _Examine = ;
  163. if (!((p_Text.Length & ) == )) throw new Exception("128C长度必须是偶数");
  164. while (p_Text.Length != )
  165. {
  166. int _Temp = ;
  167. try
  168. {
  169. int _CodeNumb128 = Int32.Parse(p_Text.Substring(, ));
  170. }
  171. catch
  172. {
  173. throw new Exception("128C必须是数字!");
  174. }
  175. _Text += GetValue(p_Code, p_Text.Substring(, ), ref _Temp);
  176. _TextNumb.Add(_Temp);
  177. p_Text = p_Text.Remove(, );
  178. }
  179. break;
  180. case Encode.EAN128:
  181. _Examine = ;
  182. if (!((p_Text.Length & ) == )) throw new Exception("EAN128长度必须是偶数");
  183. _TextNumb.Add();
  184. _Text += "";
  185. while (p_Text.Length != )
  186. {
  187. int _Temp = ;
  188. try
  189. {
  190. int _CodeNumb128 = Int32.Parse(p_Text.Substring(, ));
  191. }
  192. catch
  193. {
  194. throw new Exception("128C必须是数字!");
  195. }
  196. _Text += GetValue(Encode.Code128C, p_Text.Substring(, ), ref _Temp);
  197. _TextNumb.Add(_Temp);
  198. p_Text = p_Text.Remove(, );
  199. }
  200. break;
  201. default:
  202. if (p_Code == Encode.Code128A)
  203. {
  204. _Examine = ;
  205. }
  206. else
  207. {
  208. _Examine = ;
  209. }
  210.  
  211. while (p_Text.Length != )
  212. {
  213. int _Temp = ;
  214. string _ValueCode = GetValue(p_Code, p_Text.Substring(, ), ref _Temp);
  215. if (_ValueCode.Length == ) throw new Exception("无效的字符集!" + p_Text.Substring(, ).ToString());
  216. _Text += _ValueCode;
  217. _TextNumb.Add(_Temp);
  218. p_Text = p_Text.Remove(, );
  219. }
  220. break;
  221. }
  222. if (_TextNumb.Count == ) throw new Exception("错误的编码,无数据");
  223. _Text = _Text.Insert(, GetValue(_Examine)); //获取开始位
  224.  
  225. for (int i = ; i != _TextNumb.Count; i++)
  226. {
  227. _Examine += _TextNumb[i] * (i + );
  228. }
  229. _Examine = _Examine % ; //获得严效位
  230. _Text += GetValue(_Examine); //获取严效位
  231. _Text += ""; //结束位
  232. Bitmap _CodeImage = GetImage(_Text);
  233. GetViewText(_CodeImage, _ViewText);
  234. return _CodeImage;
  235. }
  236. /// <summary>
  237. /// 获取目标对应的数据
  238. /// </summary>
  239. /// <param name="p_Code">编码</param>
  240. /// <param name="p_Value">数值 A b 30</param>
  241. /// <param name="p_SetID">返回编号</param>
  242. /// <returns>编码</returns>
  243. private string GetValue(Encode p_Code, string p_Value, ref int p_SetID)
  244. {
  245. if (m_Code128 == null) return "";
  246. DataRow[] _Row = m_Code128.Select(p_Code.ToString() + "='" + p_Value + "'");
  247. if (_Row.Length != ) throw new Exception("错误的编码" + p_Value.ToString());
  248. p_SetID = Int32.Parse(_Row[]["ID"].ToString());
  249. return _Row[]["BandCode"].ToString();
  250. }
  251. /// <summary>
  252. /// 根据编号获得条纹
  253. /// </summary>
  254. /// <param name="p_CodeId"></param>
  255. /// <returns></returns>
  256. private string GetValue(int p_CodeId)
  257. {
  258. DataRow[] _Row = m_Code128.Select("ID='" + p_CodeId.ToString() + "'");
  259. if (_Row.Length != ) throw new Exception("验效位的编码错误" + p_CodeId.ToString());
  260. return _Row[]["BandCode"].ToString();
  261. }
  262. /// <summary>
  263. /// 获得条码图形
  264. /// </summary>
  265. /// <param name="p_Text">文字</param>
  266. /// <returns>图形</returns>
  267. private Bitmap GetImage(string p_Text)
  268. {
  269. char[] _Value = p_Text.ToCharArray();
  270. int _Width = ;
  271. for (int i = ; i != _Value.Length; i++)
  272. {
  273. _Width += Int32.Parse(_Value[i].ToString()) * (m_Magnify + );
  274. }
  275. Bitmap _CodeImage = new Bitmap(_Width, (int)m_Height);
  276. Graphics _Garphics = Graphics.FromImage(_CodeImage);
  277. //Pen _Pen;
  278. int _LenEx = ;
  279. for (int i = ; i != _Value.Length; i++)
  280. {
  281. int _ValueNumb = Int32.Parse(_Value[i].ToString()) * (m_Magnify + ); //获取宽和放大系数
  282. if (!((i & ) == ))
  283. {
  284. //_Pen = new Pen(Brushes.White, _ValueNumb);
  285. _Garphics.FillRectangle(Brushes.White, new Rectangle(_LenEx, , _ValueNumb, (int)m_Height));
  286. }
  287. else
  288. {
  289. //_Pen = new Pen(Brushes.Black, _ValueNumb);
  290. _Garphics.FillRectangle(Brushes.Black, new Rectangle(_LenEx, , _ValueNumb, (int)m_Height));
  291. }
  292. //_Garphics.(_Pen, new Point(_LenEx, 0), new Point(_LenEx, m_Height));
  293. _LenEx += _ValueNumb;
  294. }
  295. _Garphics.Dispose();
  296. return _CodeImage;
  297. }
  298. /// <summary>
  299. /// 显示可见条码文字 如果小于40 不显示文字
  300. /// </summary>
  301. /// <param name="p_Bitmap">图形</param>
  302. private void GetViewText(Bitmap p_Bitmap, string p_ViewText)
  303. {
  304. if (m_ValueFont == null) return;
  305.  
  306. Graphics _Graphics = Graphics.FromImage(p_Bitmap);
  307. SizeF _DrawSize = _Graphics.MeasureString(p_ViewText, m_ValueFont);
  308. if (_DrawSize.Height > p_Bitmap.Height - || _DrawSize.Width > p_Bitmap.Width)
  309. {
  310. _Graphics.Dispose();
  311. return;
  312. }
  313.  
  314. int _StarX = p_Bitmap.Width - (int)_DrawSize.Width;
  315. int _StarY = p_Bitmap.Height - (int)_DrawSize.Height;
  316. _Graphics.FillRectangle(Brushes.White, new Rectangle(, _StarY, p_Bitmap.Width, (int)_DrawSize.Height));
  317. _Graphics.DrawString(p_ViewText, m_ValueFont, Brushes.Black, _StarX / , _StarY);//文字在图片的中间位置
  318. }
  319.  
  320. //12345678
  321. //(105 + (1 * 12 + 2 * 34 + 3 * 56 + 4 *78)) % 103 = 47
  322. //结果为starc +12 +34 +56 +78 +47 +end
  323.  
  324. internal Image GetCodeImage(string p)
  325. {
  326. throw new NotImplementedException();
  327. }
  328. }

条形码Code128源代码的更多相关文章

  1. C#生成条形码 Code128算法

    条形有很多种,Code128是比较常用的一种,是一种高密度条码, CODE128 码可表示从 ASCII 0 到ASCII 127 共128个字符,故称128码.其中包含了数字.字母和符号字符. Co ...

  2. 基于ASP.NET生成条形码(code128)

    using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.Dr ...

  3. iOS 原生库(AVFoundation)实现二维码扫描,封装的工具类,不依赖第三方库,可高度自定义扫描动画及界面(Swift 4.0)

    Create QRScanner.swift file // // QRScanner.swift // NativeQR // // Created by Harvey on 2017/10/24. ...

  4. 利用Code128字体将文本转换为code128条形码

    利用Code128字体将文本转换为code128条形码[转]   最近在做仓储的项目,许多的打印文件都包含条形码,之前一直使用C39P24DhTt字体直接转换为39码,但是最近要求使用code128编 ...

  5. 如何看懂Code128条形码

    条形码就是我们看到的商品上有的那些竖条条. 要不是项目上用到这个或许我一辈子也不会对那个感兴趣. 条形码其实是分成很多类的,虽然他们看起来都差不多…… 常见的条形码的码制被称为39码.128码.417 ...

  6. ean128与code128 条形码 算法分析

    [code128条形码组成] 除终止符(STOP)由13个模块组成外,其他字符均由11个模块组成 就是说,如果用‘1’表示黑线(实模块),用‘0’表示白线(空模块),那么每表示一个字符就需要11条线, ...

  7. 教你看懂Code128条形码

    首     页 条码控件 条码技术 条码新闻 合作伙伴 联系我们 常见问题 电话:010-84827961 当前位置:条形码控件网 > 条形码控件技术文章 > >正文   教你看懂C ...

  8. Code128条形码如何计算其宽度?如何得出其校验位?

    原文链接 Code128条形码是一个非常高密的字母数字条码,能够存储需要的编码数据,它可以编码所有128个ASCII码字符,它使用最少的空间. 在Code128符号体系中,每个数据字符编码都是由11个 ...

  9. C# vb .NET读取识别条形码线性条码code128

    code128是比较常见的条形码编码规则类型的一种.如何在C#,vb等.NET平台语言里实现快速准确读取该类型条形码呢?答案是使用SharpBarcode! SharpBarcode是C#快速高效.准 ...

随机推荐

  1. hdu 3006 枚举集合能够产生的全部并集的集合

    http://acm.hdu.edu.cn/showproblem.php? pid=3006 刚买的CHERRY键盘 手感真好 可惜不习惯 写代码老是打错.一个题写了一上午,都是各种按错键DEBUG ...

  2. Metadata Lock原理3

      http://blog.itpub.net/26515977/viewspace-1208250/   腾讯工程师 随着5.5.3引入MDL,更多的Query被“Waiting for table ...

  3. SQL SERVER数据库状态(脱机,联机,可疑)及SQL设置语句详解

      首先我们应该知道数据库总是处于一个特定的状态中,下面先来了解一下数据库的常见的三种状态:1,脱机:我们可以在Microsoft SQL Server Management中看到该数据库,但该数据库 ...

  4. Pass value from child popup window to parent page window using JavaScript--reference

    Here Mudassar Ahmed Khan has explained how to pass value from child popup window to parent page wind ...

  5. 关于删除linux多余内核

    step 1: 查找当前正在使用的内核文件的版本号 #uname -r step 2: 列出所有的内核文件,使用rpm 或者 dpkg(基于linux系统) 命令  #rpm -q kernel 或者 ...

  6. HBase-分布式安装

    HBase的安装很简单,也是分为单机伪分布式和分布式 先保证hadoop环境JDK环境,我的是2.2.0和1.6_45 1.确定hadoop正常 2.上传HBase并解压,我用的是和hadoop2.2 ...

  7. [Java] Eclipse注释模板设置详解

    设置注释模板的入口: Window->Preference->Java->Code Style->Code Template 然后展开Comments节点就是所有需设置注释的元 ...

  8. PHP正则提取或替换img标记属性实现文章预览

    今天在想如何实现文章预览时,如果文章里面包含照片,那么就选取第一张照片作为预览图,如果没有照片,则截取文章的头150个字作为预览文字,但是因为保存在数据库的文章都是以富文本的形式,没办法直接提取,在网 ...

  9. CF A and B and Team Training (数学)

    A and B and Team Training time limit per test 1 second memory limit per test 256 megabytes input sta ...

  10. 关于Java序列化和Hadoop的序列化

    import java.io.DataInput; import java.io.DataOutput; import java.io.DataOutputStream; import java.io ...