PageRenderTime 29ms CodeModel.GetById 16ms RepoModel.GetById 0ms app.codeStats 0ms

/Utilities.Media/Media/Image/BarCode/Symbologies/Code39.cs

#
C# | 266 lines | 28 code | 3 blank | 235 comment | 0 complexity | e3ba0e7305f0e0ca71cbb0eeae610b61 MD5 | raw file
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Text;
  5. using Utilities.Media.Image.BarCode.Interfaces;
  6. namespace Utilities.Media.Image.BarCode.Symbologies
  7. {
  8. public class Code39 : ISymbology
  9. {
  10. public Code39(string Data)
  11. { }
  12. public string Encode()
  13. {
  14. throw new NotImplementedException();
  15. }
  16. public string Input
  17. {
  18. get
  19. {
  20. throw new NotImplementedException();
  21. }
  22. set
  23. {
  24. throw new NotImplementedException();
  25. }
  26. }
  27. }
  28. }
  29. /* class Code39 : BarcodeCommon, IBarcode
  30. {
  31. private System.Collections.Hashtable C39_Code = new System.Collections.Hashtable(); //is initialized by init_Code39()
  32. private System.Collections.Hashtable ExtC39_Translation = new System.Collections.Hashtable();
  33. private bool _AllowExtended = false;
  34. /// <summary>
  35. /// Encodes with Code39.
  36. /// </summary>
  37. /// <param name="input">Data to encode.</param>
  38. public Code39(string input)
  39. {
  40. Raw_Data = input;
  41. }//Code39
  42. /// <summary>
  43. /// Encodes with Code39.
  44. /// </summary>
  45. /// <param name="input">Data to encode.</param>
  46. /// <param name="AllowExtended">Allow Extended Code 39 (Full Ascii mode).</param>
  47. public Code39(string input, bool AllowExtended)
  48. {
  49. Raw_Data = input;
  50. _AllowExtended = AllowExtended;
  51. }
  52. /// <summary>
  53. /// Encode the raw data using the Code 39 algorithm.
  54. /// </summary>
  55. private string Encode_Code39()
  56. {
  57. this.init_Code39();
  58. this.init_ExtendedCode39();
  59. string strFormattedData = "*" + Raw_Data.Replace("*", "") + "*";
  60. if (_AllowExtended)
  61. InsertExtendedCharsIfNeeded(ref strFormattedData);
  62. string result = "";
  63. //foreach (char c in this.FormattedData)
  64. foreach (char c in strFormattedData)
  65. {
  66. try
  67. {
  68. result += C39_Code[c].ToString();
  69. result += "0";//whitespace
  70. }//try
  71. catch
  72. {
  73. if (_AllowExtended)
  74. Error("EC39-1: Invalid data.");
  75. else
  76. Error("EC39-1: Invalid data. (Try using Extended Code39)");
  77. }//catch
  78. }//foreach
  79. result = result.Substring(0, result.Length-1);
  80. //clear the hashtable so it no longer takes up memory
  81. this.C39_Code.Clear();
  82. return result;
  83. }//Encode_Code39
  84. private void init_Code39()
  85. {
  86. C39_Code.Clear();
  87. C39_Code.Add('0', "101001101101");
  88. C39_Code.Add('1', "110100101011");
  89. C39_Code.Add('2', "101100101011");
  90. C39_Code.Add('3', "110110010101");
  91. C39_Code.Add('4', "101001101011");
  92. C39_Code.Add('5', "110100110101");
  93. C39_Code.Add('6', "101100110101");
  94. C39_Code.Add('7', "101001011011");
  95. C39_Code.Add('8', "110100101101");
  96. C39_Code.Add('9', "101100101101");
  97. C39_Code.Add('A', "110101001011");
  98. C39_Code.Add('B', "101101001011");
  99. C39_Code.Add('C', "110110100101");
  100. C39_Code.Add('D', "101011001011");
  101. C39_Code.Add('E', "110101100101");
  102. C39_Code.Add('F', "101101100101");
  103. C39_Code.Add('G', "101010011011");
  104. C39_Code.Add('H', "110101001101");
  105. C39_Code.Add('I', "101101001101");
  106. C39_Code.Add('J', "101011001101");
  107. C39_Code.Add('K', "110101010011");
  108. C39_Code.Add('L', "101101010011");
  109. C39_Code.Add('M', "110110101001");
  110. C39_Code.Add('N', "101011010011");
  111. C39_Code.Add('O', "110101101001");
  112. C39_Code.Add('P', "101101101001");
  113. C39_Code.Add('Q', "101010110011");
  114. C39_Code.Add('R', "110101011001");
  115. C39_Code.Add('S', "101101011001");
  116. C39_Code.Add('T', "101011011001");
  117. C39_Code.Add('U', "110010101011");
  118. C39_Code.Add('V', "100110101011");
  119. C39_Code.Add('W', "110011010101");
  120. C39_Code.Add('X', "100101101011");
  121. C39_Code.Add('Y', "110010110101");
  122. C39_Code.Add('Z', "100110110101");
  123. C39_Code.Add('-', "100101011011");
  124. C39_Code.Add('.', "110010101101");
  125. C39_Code.Add(' ', "100110101101");
  126. C39_Code.Add('$', "100100100101");
  127. C39_Code.Add('/', "100100101001");
  128. C39_Code.Add('+', "100101001001");
  129. C39_Code.Add('%', "101001001001");
  130. C39_Code.Add('*', "100101101101");
  131. }//init_Code39
  132. private void init_ExtendedCode39()
  133. {
  134. ExtC39_Translation.Clear();
  135. ExtC39_Translation.Add(Convert.ToChar(0).ToString(), "%U");
  136. ExtC39_Translation.Add(Convert.ToChar(1).ToString(), "$A");
  137. ExtC39_Translation.Add(Convert.ToChar(2).ToString(), "$B");
  138. ExtC39_Translation.Add(Convert.ToChar(3).ToString(), "$C");
  139. ExtC39_Translation.Add(Convert.ToChar(4).ToString(), "$D");
  140. ExtC39_Translation.Add(Convert.ToChar(5).ToString(), "$E");
  141. ExtC39_Translation.Add(Convert.ToChar(6).ToString(), "$F");
  142. ExtC39_Translation.Add(Convert.ToChar(7).ToString(), "$G");
  143. ExtC39_Translation.Add(Convert.ToChar(8).ToString(), "$H");
  144. ExtC39_Translation.Add(Convert.ToChar(9).ToString(), "$I");
  145. ExtC39_Translation.Add(Convert.ToChar(10).ToString(), "$J");
  146. ExtC39_Translation.Add(Convert.ToChar(11).ToString(), "$K");
  147. ExtC39_Translation.Add(Convert.ToChar(12).ToString(), "$L");
  148. ExtC39_Translation.Add(Convert.ToChar(13).ToString(), "$M");
  149. ExtC39_Translation.Add(Convert.ToChar(14).ToString(), "$N");
  150. ExtC39_Translation.Add(Convert.ToChar(15).ToString(), "$O");
  151. ExtC39_Translation.Add(Convert.ToChar(16).ToString(), "$P");
  152. ExtC39_Translation.Add(Convert.ToChar(17).ToString(), "$Q");
  153. ExtC39_Translation.Add(Convert.ToChar(18).ToString(), "$R");
  154. ExtC39_Translation.Add(Convert.ToChar(19).ToString(), "$S");
  155. ExtC39_Translation.Add(Convert.ToChar(20).ToString(), "$T");
  156. ExtC39_Translation.Add(Convert.ToChar(21).ToString(), "$U");
  157. ExtC39_Translation.Add(Convert.ToChar(22).ToString(), "$V");
  158. ExtC39_Translation.Add(Convert.ToChar(23).ToString(), "$W");
  159. ExtC39_Translation.Add(Convert.ToChar(24).ToString(), "$X");
  160. ExtC39_Translation.Add(Convert.ToChar(25).ToString(), "$Y");
  161. ExtC39_Translation.Add(Convert.ToChar(26).ToString(), "$Z");
  162. ExtC39_Translation.Add(Convert.ToChar(27).ToString(), "%A");
  163. ExtC39_Translation.Add(Convert.ToChar(28).ToString(), "%B");
  164. ExtC39_Translation.Add(Convert.ToChar(29).ToString(), "%C");
  165. ExtC39_Translation.Add(Convert.ToChar(30).ToString(), "%D");
  166. ExtC39_Translation.Add(Convert.ToChar(31).ToString(), "%E");
  167. ExtC39_Translation.Add("!", "/A");
  168. ExtC39_Translation.Add("\"", "/B");
  169. ExtC39_Translation.Add("#", "/C");
  170. ExtC39_Translation.Add("$", "/D");
  171. ExtC39_Translation.Add("%", "/E");
  172. ExtC39_Translation.Add("&", "/F");
  173. ExtC39_Translation.Add("'", "/G");
  174. ExtC39_Translation.Add("(", "/H");
  175. ExtC39_Translation.Add(")", "/I");
  176. ExtC39_Translation.Add("*", "/J");
  177. ExtC39_Translation.Add("+", "/K");
  178. ExtC39_Translation.Add(",", "/L");
  179. ExtC39_Translation.Add("/", "/O");
  180. ExtC39_Translation.Add(":", "/Z");
  181. ExtC39_Translation.Add(";", "%F");
  182. ExtC39_Translation.Add("<", "%G");
  183. ExtC39_Translation.Add("=", "%H");
  184. ExtC39_Translation.Add(">", "%I");
  185. ExtC39_Translation.Add("?", "%J");
  186. ExtC39_Translation.Add("[", "%K");
  187. ExtC39_Translation.Add("\\", "%L");
  188. ExtC39_Translation.Add("]", "%M");
  189. ExtC39_Translation.Add("^", "%N");
  190. ExtC39_Translation.Add("_", "%O");
  191. ExtC39_Translation.Add("{", "%P");
  192. ExtC39_Translation.Add("|", "%Q");
  193. ExtC39_Translation.Add("}", "%R");
  194. ExtC39_Translation.Add("~", "%S");
  195. ExtC39_Translation.Add("`", "%W");
  196. ExtC39_Translation.Add("@", "%V");
  197. ExtC39_Translation.Add("a", "+A");
  198. ExtC39_Translation.Add("b", "+B");
  199. ExtC39_Translation.Add("c", "+C");
  200. ExtC39_Translation.Add("d", "+D");
  201. ExtC39_Translation.Add("e", "+E");
  202. ExtC39_Translation.Add("f", "+F");
  203. ExtC39_Translation.Add("g", "+G");
  204. ExtC39_Translation.Add("h", "+H");
  205. ExtC39_Translation.Add("i", "+I");
  206. ExtC39_Translation.Add("j", "+J");
  207. ExtC39_Translation.Add("k", "+K");
  208. ExtC39_Translation.Add("l", "+L");
  209. ExtC39_Translation.Add("m", "+M");
  210. ExtC39_Translation.Add("n", "+N");
  211. ExtC39_Translation.Add("o", "+O");
  212. ExtC39_Translation.Add("p", "+P");
  213. ExtC39_Translation.Add("q", "+Q");
  214. ExtC39_Translation.Add("r", "+R");
  215. ExtC39_Translation.Add("s", "+S");
  216. ExtC39_Translation.Add("t", "+T");
  217. ExtC39_Translation.Add("u", "+U");
  218. ExtC39_Translation.Add("v", "+V");
  219. ExtC39_Translation.Add("w", "+W");
  220. ExtC39_Translation.Add("x", "+X");
  221. ExtC39_Translation.Add("y", "+Y");
  222. ExtC39_Translation.Add("z", "+Z");
  223. ExtC39_Translation.Add(Convert.ToChar(127).ToString(), "%T"); //also %X, %Y, %Z
  224. }
  225. private void InsertExtendedCharsIfNeeded(ref string FormattedData)
  226. {
  227. string output = "";
  228. foreach (char c in FormattedData)
  229. {
  230. try
  231. {
  232. string s = C39_Code[c].ToString();
  233. output += c;
  234. }//try
  235. catch
  236. {
  237. //insert extended substitution
  238. object oTrans = ExtC39_Translation[c.ToString()];
  239. output += oTrans.ToString();
  240. }//catch
  241. }//foreach
  242. FormattedData = output;
  243. }
  244. #region IBarcode Members
  245. public string Encoded_Value
  246. {
  247. get { return Encode_Code39(); }
  248. }
  249. #endregion
  250. }//class*/