生成条形码_条形码在线生成器

生成条形码_条形码在线生成器1usingSystem;2usingSystem.Collections.Generic;3usingSystem.Linq;4usingSystem.Web;5using

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE使用 1年只要46元 售后保障 童叟无欺

生成条形码_条形码在线生成器
生成条形码_条形码在线生成器

 1 using System;  2 using System.Collections.Generic;  3 using System.Linq;  4 using System.Web;  5 using System.Text;  6 using System.Drawing;  7 using System.Text.RegularExpressions;  8 using System.Collections;  9  10 /// <summary>  11 ///BarCode 的摘要说明  12 /// </summary>  13  14 public class BarCodeHelper  15 {  16 public static string get39(string s, int width, int height)  17  {  18 Hashtable ht = new Hashtable();  19  20 #region 39码 12位  21 ht.Add('A', "110101001011");  22 ht.Add('B', "101101001011");  23 ht.Add('C', "110110100101");  24 ht.Add('D', "101011001011");  25 ht.Add('E', "110101100101");  26 ht.Add('F', "101101100101");  27 ht.Add('G', "101010011011");  28 ht.Add('H', "110101001101");  29 ht.Add('I', "101101001101");  30 ht.Add('J', "101011001101");  31 ht.Add('K', "110101010011");  32 ht.Add('L', "101101010011");  33 ht.Add('M', "110110101001");  34 ht.Add('N', "101011010011");  35 ht.Add('O', "110101101001");  36 ht.Add('P', "101101101001");  37 ht.Add('Q', "101010110011");  38 ht.Add('R', "110101011001");  39 ht.Add('S', "101101011001");  40 ht.Add('T', "101011011001");  41 ht.Add('U', "110010101011");  42 ht.Add('V', "100110101011");  43 ht.Add('W', "110011010101");  44 ht.Add('X', "100101101011");  45 ht.Add('Y', "110010110101");  46 ht.Add('Z', "100110110101");  47 ht.Add('0', "101001101101");  48 ht.Add('1', "110100101011");  49 ht.Add('2', "101100101011");  50 ht.Add('3', "110110010101");  51 ht.Add('4', "101001101011");  52 ht.Add('5', "110100110101");  53 ht.Add('6', "101100110101");  54 ht.Add('7', "101001011011");  55 ht.Add('8', "110100101101");  56 ht.Add('9', "101100101101");  57 ht.Add('+', "100101001001");  58 ht.Add('-', "100101011011");  59 ht.Add('*', "100101101101");  60 ht.Add('/', "100100101001");  61 ht.Add('%', "101001001001");  62 ht.Add('$', "100100100101");  63 ht.Add('.', "110010101101");  64 ht.Add(' ', "100110101101");  65 #endregion  66 #region 39码 9位  67 #endregion  68  69 s = s.ToUpper();  70  71 string result_bin = "";//二进制串  72  73 try  74  {  75 foreach (char ch in s)  76  {  77 result_bin += ht[ch].ToString();  78 result_bin += "0";//间隔,与一个单位的线条宽度相等  79  }  80  }  81 catch { return "存在不允许的字符!"; }  82  83 string result_html = "";//HTML代码  84 string color = "";//颜色  85 foreach (char c in result_bin)  86  {  87 color = c == '0' ? "#FFFFFF" : "#000000";  88 result_html += "<div style=\"width:" + width + "px;height:" + height + "px;float:left;background:" + color + ";\"></div>";  89  }  90 result_html += "<div style=\"clear:both\"></div>";  91  92 int len = ht['*'].ToString().Length;  93 foreach (char c in s)  94  {  95 result_html += "<div style=\"width:" + (width * (len + 1)) + "px;float:left;color:#000000;text-align:center;\">" + c + "</div>";  96  }  97 result_html += "<div style=\"clear:both\"></div>";  98  99 return "<div style=\"background:#FFFFFF;padding:5px;font-size:" + (width * 10) + "px;font-family:'楷体';\">" + result_html + "</div>"; 100  } 101 public static string getEAN13(string s, int width, int height) 102  { 103 int checkcode_input = -1;//输入的校验码 104 if (!Regex.IsMatch(s, @"^\d{12}$")) 105  { 106 if (!Regex.IsMatch(s, @"^\d{13}$")) 107  { 108 return "存在不允许的字符!"; 109  } 110 else 111  { 112 checkcode_input = int.Parse(s[12].ToString()); 113 s = s.Substring(0, 12); 114  } 115  } 116 117 int sum_even = 0;//偶数位之和 118 int sum_odd = 0;//奇数位之和 119 120 for (int i = 0; i < 12; i++) 121  { 122 if (i % 2 == 0) 123  { 124 sum_odd += int.Parse(s[i].ToString()); 125  } 126 else 127  { 128 sum_even += int.Parse(s[i].ToString()); 129  } 130  } 131 132 int checkcode = (10 - (sum_even * 3 + sum_odd) % 10) % 10;//校验码 133 134 if (checkcode_input > 0 && checkcode_input != checkcode) 135  { 136 return "输入的校验码错误!"; 137  } 138 139 s += checkcode;//变成13位 140 141 // 000000000101左侧42个01010右侧35个校验7个101000000000 142 // 6 101左侧6位 01010右侧5位 校验1位101000000000 143 144 string result_bin = "";//二进制串 145 result_bin += "000000000101"; 146 147 string type = ean13type(s[0]); 148 for (int i = 1; i < 7; i++) 149  { 150 result_bin += ean13(s[i], type[i - 1]); 151  } 152 result_bin += "01010"; 153 for (int i = 7; i < 13; i++) 154  { 155 result_bin += ean13(s[i], 'C'); 156  } 157 result_bin += "101000000000"; 158 159 string result_html = "";//HTML代码 160 string color = "";//颜色 161 int height_bottom = width * 5; 162 foreach (char c in result_bin) 163  { 164 color = c == '0' ? "#FFFFFF" : "#000000"; 165 result_html += "<div style=\"width:" + width + "px;height:" + height + "px;float:left;background:" + color + ";\"></div>"; 166  } 167 result_html += "<div style=\"clear:both\"></div>"; 168 169 result_html += "<div style=\"float:left;color:#000000;width:" + (width * 9) + "px;text-align:center;\">" + s[0] + "</div>"; 170 result_html += "<div style=\"float:left;width:" + width + "px;height:" + height_bottom + "px;background:#000000;\"></div>"; 171 result_html += "<div style=\"float:left;width:" + width + "px;height:" + height_bottom + "px;background:#FFFFFF;\"></div>"; 172 result_html += "<div style=\"float:left;width:" + width + "px;height:" + height_bottom + "px;background:#000000;\"></div>"; 173 for (int i = 1; i < 7; i++) 174  { 175 result_html += "<div style=\"float:left;width:" + (width * 7) + "px;color:#000000;text-align:center;\">" + s[i] + "</div>"; 176  } 177 result_html += "<div style=\"float:left;width:" + width + "px;height:" + height_bottom + "px;background:#FFFFFF;\"></div>"; 178 result_html += "<div style=\"float:left;width:" + width + "px;height:" + height_bottom + "px;background:#000000;\"></div>"; 179 result_html += "<div style=\"float:left;width:" + width + "px;height:" + height_bottom + "px;background:#FFFFFF;\"></div>"; 180 result_html += "<div style=\"float:left;width:" + width + "px;height:" + height_bottom + "px;background:#000000;\"></div>"; 181 result_html += "<div style=\"float:left;width:" + width + "px;height:" + height_bottom + "px;background:#FFFFFF;\"></div>"; 182 for (int i = 7; i < 13; i++) 183  { 184 result_html += "<div style=\"float:left;width:" + (width * 7) + "px;color:#000000;text-align:center;\">" + s[i] + "</div>"; 185  } 186 result_html += "<div style=\"float:left;width:" + width + "px;height:" + height_bottom + "px;background:#000000;\"></div>"; 187 result_html += "<div style=\"float:left;width:" + width + "px;height:" + height_bottom + "px;background:#FFFFFF;\"></div>"; 188 result_html += "<div style=\"float:left;width:" + width + "px;height:" + height_bottom + "px;background:#000000;\"></div>"; 189 result_html += "<div style=\"float:left;color:#000000;width:" + (width * 9) + "px;\"></div>"; 190 result_html += "<div style=\"clear:both\"></div>"; 191 192 return "<div style=\"background:#FFFFFF;padding:0px;font-size:" + (width * 10) + "px;font-family:'楷体';\">" + result_html + "</div>"; 193  } 194 private static string ean13(char c, char type) 195  { 196 switch (type) 197  { 198 case 'A': 199  { 200 switch (c) 201  { 202 case '0': return "0001101"; 203 case '1': return "0011001"; 204 case '2': return "0010011"; 205 case '3': return "0111101";//011101 206 case '4': return "0100011"; 207 case '5': return "0110001"; 208 case '6': return "0101111"; 209 case '7': return "0111011"; 210 case '8': return "0110111"; 211 case '9': return "0001011"; 212 default: return "Error!"; 213  } 214  } 215 case 'B': 216  { 217 switch (c) 218  { 219 case '0': return "0100111"; 220 case '1': return "0110011"; 221 case '2': return "0011011"; 222 case '3': return "0100001"; 223 case '4': return "0011101"; 224 case '5': return "0111001"; 225 case '6': return "0000101";//000101 226 case '7': return "0010001"; 227 case '8': return "0001001"; 228 case '9': return "0010111"; 229 default: return "Error!"; 230  } 231  } 232 case 'C': 233  { 234 switch (c) 235  { 236 case '0': return "1110010"; 237 case '1': return "1100110"; 238 case '2': return "1101100"; 239 case '3': return "1000010"; 240 case '4': return "1011100"; 241 case '5': return "1001110"; 242 case '6': return "1010000"; 243 case '7': return "1000100"; 244 case '8': return "1001000"; 245 case '9': return "1110100"; 246 default: return "Error!"; 247  } 248  } 249 default: return "Error!"; 250  } 251  } 252 private static string ean13type(char c) 253  { 254 switch (c) 255  { 256 case '0': return "AAAAAA"; 257 case '1': return "AABABB"; 258 case '2': return "AABBAB"; 259 case '3': return "AABBBA"; 260 case '4': return "ABAABB"; 261 case '5': return "ABBAAB"; 262 case '6': return "ABBBAA";//中国 263 case '7': return "ABABAB"; 264 case '8': return "ABABBA"; 265 case '9': return "ABBABA"; 266 default: return "Error!"; 267  } 268  } 269 270 #region Code patterns 271 272 // in principle these rows should each have 6 elements 273 // however, the last one -- STOP -- has 7. The cost of the 274 // extra integers is trivial, and this lets the code flow 275 // much more elegantly 276 private static readonly int[,] cPatterns = 277  { 278 {2,1,2,2,2,2,0,0}, // 0 279 {2,2,2,1,2,2,0,0}, // 1 280 {2,2,2,2,2,1,0,0}, // 2 281 {1,2,1,2,2,3,0,0}, // 3 282 {1,2,1,3,2,2,0,0}, // 4 283 {1,3,1,2,2,2,0,0}, // 5 284 {1,2,2,2,1,3,0,0}, // 6 285 {1,2,2,3,1,2,0,0}, // 7 286 {1,3,2,2,1,2,0,0}, // 8 287 {2,2,1,2,1,3,0,0}, // 9 288 {2,2,1,3,1,2,0,0}, // 10 289 {2,3,1,2,1,2,0,0}, // 11 290 {1,1,2,2,3,2,0,0}, // 12 291 {1,2,2,1,3,2,0,0}, // 13 292 {1,2,2,2,3,1,0,0}, // 14 293 {1,1,3,2,2,2,0,0}, // 15 294 {1,2,3,1,2,2,0,0}, // 16 295 {1,2,3,2,2,1,0,0}, // 17 296 {2,2,3,2,1,1,0,0}, // 18 297 {2,2,1,1,3,2,0,0}, // 19 298 {2,2,1,2,3,1,0,0}, // 20 299 {2,1,3,2,1,2,0,0}, // 21 300 {2,2,3,1,1,2,0,0}, // 22 301 {3,1,2,1,3,1,0,0}, // 23 302 {3,1,1,2,2,2,0,0}, // 24 303 {3,2,1,1,2,2,0,0}, // 25 304 {3,2,1,2,2,1,0,0}, // 26 305 {3,1,2,2,1,2,0,0}, // 27 306 {3,2,2,1,1,2,0,0}, // 28 307 {3,2,2,2,1,1,0,0}, // 29 308 {2,1,2,1,2,3,0,0}, // 30 309 {2,1,2,3,2,1,0,0}, // 31 310 {2,3,2,1,2,1,0,0}, // 32 311 {1,1,1,3,2,3,0,0}, // 33 312 {1,3,1,1,2,3,0,0}, // 34 313 {1,3,1,3,2,1,0,0}, // 35 314 {1,1,2,3,1,3,0,0}, // 36 315 {1,3,2,1,1,3,0,0}, // 37 316 {1,3,2,3,1,1,0,0}, // 38 317 {2,1,1,3,1,3,0,0}, // 39 318 {2,3,1,1,1,3,0,0}, // 40 319 {2,3,1,3,1,1,0,0}, // 41 320 {1,1,2,1,3,3,0,0}, // 42 321 {1,1,2,3,3,1,0,0}, // 43 322 {1,3,2,1,3,1,0,0}, // 44 323 {1,1,3,1,2,3,0,0}, // 45 324 {1,1,3,3,2,1,0,0}, // 46 325 {1,3,3,1,2,1,0,0}, // 47 326 {3,1,3,1,2,1,0,0}, // 48 327 {2,1,1,3,3,1,0,0}, // 49 328 {2,3,1,1,3,1,0,0}, // 50 329 {2,1,3,1,1,3,0,0}, // 51 330 {2,1,3,3,1,1,0,0}, // 52 331 {2,1,3,1,3,1,0,0}, // 53 332 {3,1,1,1,2,3,0,0}, // 54 333 {3,1,1,3,2,1,0,0}, // 55 334 {3,3,1,1,2,1,0,0}, // 56 335 {3,1,2,1,1,3,0,0}, // 57 336 {3,1,2,3,1,1,0,0}, // 58 337 {3,3,2,1,1,1,0,0}, // 59 338 {3,1,4,1,1,1,0,0}, // 60 339 {2,2,1,4,1,1,0,0}, // 61 340 {4,3,1,1,1,1,0,0}, // 62 341 {1,1,1,2,2,4,0,0}, // 63 342 {1,1,1,4,2,2,0,0}, // 64 343 {1,2,1,1,2,4,0,0}, // 65 344 {1,2,1,4,2,1,0,0}, // 66 345 {1,4,1,1,2,2,0,0}, // 67 346 {1,4,1,2,2,1,0,0}, // 68 347 {1,1,2,2,1,4,0,0}, // 69 348 {1,1,2,4,1,2,0,0}, // 70 349 {1,2,2,1,1,4,0,0}, // 71 350 {1,2,2,4,1,1,0,0}, // 72 351 {1,4,2,1,1,2,0,0}, // 73 352 {1,4,2,2,1,1,0,0}, // 74 353 {2,4,1,2,1,1,0,0}, // 75 354 {2,2,1,1,1,4,0,0}, // 76 355 {4,1,3,1,1,1,0,0}, // 77 356 {2,4,1,1,1,2,0,0}, // 78 357 {1,3,4,1,1,1,0,0}, // 79 358 {1,1,1,2,4,2,0,0}, // 80 359 {1,2,1,1,4,2,0,0}, // 81 360 {1,2,1,2,4,1,0,0}, // 82 361 {1,1,4,2,1,2,0,0}, // 83 362 {1,2,4,1,1,2,0,0}, // 84 363 {1,2,4,2,1,1,0,0}, // 85 364 {4,1,1,2,1,2,0,0}, // 86 365 {4,2,1,1,1,2,0,0}, // 87 366 {4,2,1,2,1,1,0,0}, // 88 367 {2,1,2,1,4,1,0,0}, // 89 368 {2,1,4,1,2,1,0,0}, // 90 369 {4,1,2,1,2,1,0,0}, // 91 370 {1,1,1,1,4,3,0,0}, // 92 371 {1,1,1,3,4,1,0,0}, // 93 372 {1,3,1,1,4,1,0,0}, // 94 373 {1,1,4,1,1,3,0,0}, // 95 374 {1,1,4,3,1,1,0,0}, // 96 375 {4,1,1,1,1,3,0,0}, // 97 376 {4,1,1,3,1,1,0,0}, // 98 377 {1,1,3,1,4,1,0,0}, // 99 378 {1,1,4,1,3,1,0,0}, // 100 379 {3,1,1,1,4,1,0,0}, // 101 380 {4,1,1,1,3,1,0,0}, // 102 381 {2,1,1,4,1,2,0,0}, // 103 382 {2,1,1,2,1,4,0,0}, // 104 383 {2,1,1,2,3,2,0,0}, // 105 384 {2,3,3,1,1,1,2,0} // 106 385  }; 386 387 #endregion Code patterns 388 389 #region 128条形码 390 391 private const int cQuietWidth = 10; 392 393 /// <summary> 394 /// Make an image of a Code128 barcode for a given string 395 /// </summary> 396 /// <param name="InputData">Message to be encoded</param> 397 /// <param name="BarWeight">Base thickness for bar width (1 or 2 works well)</param> 398 /// <param name="AddQuietZone">Add required horiz margins (use if output is tight)</param> 399 /// <returns>An Image of the Code128 barcode representing the message</returns> 400 public static Image MakeBarcodeImage(string InputData, int BarWeight, bool AddQuietZone) 401  { 402 // get the Code128 codes to represent the message 403 Code128Content content = new Code128Content(InputData); 404 int[] codes = content.Codes; 405 406 int width, height; 407 width = ((codes.Length - 3) * 11 + 35) * BarWeight; 408 height = Convert.ToInt32(System.Math.Ceiling(Convert.ToSingle(width) * .15F)); 409 410 if (AddQuietZone) 411  { 412 width += 20; // on both sides 413  } 414 //draw the codetext bottom 415 height += 30; 416 // get surface to draw on 417 Image myimg = new System.Drawing.Bitmap(width, height); 418 using (Graphics gr = Graphics.FromImage(myimg)) 419  { 420 421 // set to white so we don't have to fill the spaces with white 422 gr.FillRectangle(System.Drawing.Brushes.White, 0, 0, width, height); 423 424 // skip quiet zone 425 int cursor = AddQuietZone ? 10 : 0; 426 427 for (int codeidx = 0; codeidx < codes.Length; codeidx++) 428  { 429 int code = codes[codeidx]; 430 431 // take the bars two at a time: a black and a white 432 for (int bar = 0; bar < 8; bar += 2) 433  { 434 int barwidth = cPatterns[code, bar] * BarWeight; 435 int spcwidth = cPatterns[code, bar + 1] * BarWeight; 436 437 // if width is zero, don't try to draw it 438 if (barwidth > 0) 439  { 440 gr.FillRectangle(System.Drawing.Brushes.Black, cursor, 5, barwidth, height - 20); 441  } 442 443 // note that we never need to draw the space, since we 444 // initialized the graphics to all white 445 446 // advance cursor beyond this pair 447 cursor += (barwidth + spcwidth); 448  } 449  } 450 gr.DrawString(InputData, new Font("Arial", 9), Brushes.Black, new PointF(10, height - 15)); 451  } 452 return myimg; 453 454  } 455 456 #endregion 457 } 458 459 #region Code128Content 460 461 public enum CodeSet 462 { 463  CodeA 464  , CodeB 465 // ,CodeC // not supported 466 } 467 468 /// <summary> 469 /// Represent the set of code values to be output into barcode form 470 /// </summary> 471 public class Code128Content 472 { 473 private int[] mCodeList; 474 475 /// <summary> 476 /// Create content based on a string of ASCII data 477 /// </summary> 478 /// <param name="AsciiData">the string that should be represented</param> 479 public Code128Content(string AsciiData) 480  { 481 mCodeList = StringToCode128(AsciiData); 482  } 483 484 /// <summary> 485 /// Provides the Code128 code values representing the object's string 486 /// </summary> 487 public int[] Codes 488  { 489 get 490  { 491 return mCodeList; 492  } 493  } 494 495 /// <summary> 496 /// Transform the string into integers representing the Code128 codes 497 /// necessary to represent it 498 /// </summary> 499 /// <param name="AsciiData">String to be encoded</param> 500 /// <returns>Code128 representation</returns> 501 private int[] StringToCode128(string AsciiData) 502  { 503 // turn the string into ascii byte data 504 byte[] asciiBytes = Encoding.ASCII.GetBytes(AsciiData); 505 506 // decide which codeset to start with 507 Code128Code.CodeSetAllowed csa1 = asciiBytes.Length > 0 ? Code128Code.CodesetAllowedForChar(asciiBytes[0]) : Code128Code.CodeSetAllowed.CodeAorB; 508 Code128Code.CodeSetAllowed csa2 = asciiBytes.Length > 0 ? Code128Code.CodesetAllowedForChar(asciiBytes[1]) : Code128Code.CodeSetAllowed.CodeAorB; 509 CodeSet currcs = GetBestStartSet(csa1, csa2); 510 511 // set up the beginning of the barcode 512 System.Collections.ArrayList codes = new System.Collections.ArrayList(asciiBytes.Length + 3); // assume no codeset changes, account for start, checksum, and stop 513  codes.Add(Code128Code.StartCodeForCodeSet(currcs)); 514 515 // add the codes for each character in the string 516 for (int i = 0; i < asciiBytes.Length; i++) 517  { 518 int thischar = asciiBytes[i]; 519 int nextchar = asciiBytes.Length > (i + 1) ? asciiBytes[i + 1] : -1; 520 521 codes.AddRange(Code128Code.CodesForChar(thischar, nextchar, ref currcs)); 522  } 523 524 // calculate the check digit 525 int checksum = (int)(codes[0]); 526 for (int i = 1; i < codes.Count; i++) 527  { 528 checksum += i * (int)(codes[i]); 529  } 530 codes.Add(checksum % 103); 531 532  codes.Add(Code128Code.StopCode()); 533 534 int[] result = codes.ToArray(typeof(int)) as int[]; 535 return result; 536  } 537 538 /// <summary> 539 /// Determines the best starting code set based on the the first two 540 /// characters of the string to be encoded 541 /// </summary> 542 /// <param name="csa1">First character of input string</param> 543 /// <param name="csa2">Second character of input string</param> 544 /// <returns>The codeset determined to be best to start with</returns> 545 private CodeSet GetBestStartSet(Code128Code.CodeSetAllowed csa1, Code128Code.CodeSetAllowed csa2) 546  { 547 int vote = 0; 548 549 vote += (csa1 == Code128Code.CodeSetAllowed.CodeA) ? 1 : 0; 550 vote += (csa1 == Code128Code.CodeSetAllowed.CodeB) ? -1 : 0; 551 vote += (csa2 == Code128Code.CodeSetAllowed.CodeA) ? 1 : 0; 552 vote += (csa2 == Code128Code.CodeSetAllowed.CodeB) ? -1 : 0; 553 554 return (vote > 0) ? CodeSet.CodeA : CodeSet.CodeB; // ties go to codeB due to my own prejudices 555  } 556 } 557 558 /// <summary> 559 /// Static tools for determining codes for individual characters in the content 560 /// </summary> 561 public static class Code128Code 562 { 563 #region Constants 564 565 private const int cSHIFT = 98; 566 private const int cCODEA = 101; 567 private const int cCODEB = 100; 568 569 private const int cSTARTA = 103; 570 private const int cSTARTB = 104; 571 private const int cSTOP = 106; 572 573 #endregion 574 575 /// <summary> 576 /// Get the Code128 code value(s) to represent an ASCII character, with 577 /// optional look-ahead for length optimization 578 /// </summary> 579 /// <param name="CharAscii">The ASCII value of the character to translate</param> 580 /// <param name="LookAheadAscii">The next character in sequence (or -1 if none)</param> 581 /// <param name="CurrCodeSet">The current codeset, that the returned codes need to follow; 582 /// if the returned codes change that, then this value will be changed to reflect it</param> 583 /// <returns>An array of integers representing the codes that need to be output to produce the 584 /// given character</returns> 585 public static int[] CodesForChar(int CharAscii, int LookAheadAscii, ref CodeSet CurrCodeSet) 586  { 587 int[] result; 588 int shifter = -1; 589 590 if (!CharCompatibleWithCodeset(CharAscii, CurrCodeSet)) 591  { 592 // if we have a lookahead character AND if the next character is ALSO not compatible 593 if ((LookAheadAscii != -1) && !CharCompatibleWithCodeset(LookAheadAscii, CurrCodeSet)) 594  { 595 // we need to switch code sets 596 switch (CurrCodeSet) 597  { 598 case CodeSet.CodeA: 599 shifter = cCODEB; 600 CurrCodeSet = CodeSet.CodeB; 601 break; 602 case CodeSet.CodeB: 603 shifter = cCODEA; 604 CurrCodeSet = CodeSet.CodeA; 605 break; 606  } 607  } 608 else 609  { 610 // no need to switch code sets, a temporary SHIFT will suffice 611 shifter = cSHIFT; 612  } 613  } 614 615 if (shifter != -1) 616  { 617 result = new int[2]; 618 result[0] = shifter; 619 result[1] = CodeValueForChar(CharAscii); 620  } 621 else 622  { 623 result = new int[1]; 624 result[0] = CodeValueForChar(CharAscii); 625  } 626 627 return result; 628  } 629 630 /// <summary> 631 /// Tells us which codesets a given character value is allowed in 632 /// </summary> 633 /// <param name="CharAscii">ASCII value of character to look at</param> 634 /// <returns>Which codeset(s) can be used to represent this character</returns> 635 public static CodeSetAllowed CodesetAllowedForChar(int CharAscii) 636  { 637 if (CharAscii >= 32 && CharAscii <= 95) 638  { 639 return CodeSetAllowed.CodeAorB; 640  } 641 else 642  { 643 return (CharAscii < 32) ? CodeSetAllowed.CodeA : CodeSetAllowed.CodeB; 644  } 645  } 646 647 /// <summary> 648 /// Determine if a character can be represented in a given codeset 649 /// </summary> 650 /// <param name="CharAscii">character to check for</param> 651 /// <param name="currcs">codeset context to test</param> 652 /// <returns>true if the codeset contains a representation for the ASCII character</returns> 653 public static bool CharCompatibleWithCodeset(int CharAscii, CodeSet currcs) 654  { 655 CodeSetAllowed csa = CodesetAllowedForChar(CharAscii); 656 return csa == CodeSetAllowed.CodeAorB 657 || (csa == CodeSetAllowed.CodeA && currcs == CodeSet.CodeA) 658 || (csa == CodeSetAllowed.CodeB && currcs == CodeSet.CodeB); 659  } 660 661 /// <summary> 662 /// Gets the integer code128 code value for a character (assuming the appropriate code set) 663 /// </summary> 664 /// <param name="CharAscii">character to convert</param> 665 /// <returns>code128 symbol value for the character</returns> 666 public static int CodeValueForChar(int CharAscii) 667  { 668 return (CharAscii >= 32) ? CharAscii - 32 : CharAscii + 64; 669  } 670 671 /// <summary> 672 /// Return the appropriate START code depending on the codeset we want to be in 673 /// </summary> 674 /// <param name="cs">The codeset you want to start in</param> 675 /// <returns>The code128 code to start a barcode in that codeset</returns> 676 public static int StartCodeForCodeSet(CodeSet cs) 677  { 678 return cs == CodeSet.CodeA ? cSTARTA : cSTARTB; 679  } 680 681 /// <summary> 682 /// Return the Code128 stop code 683 /// </summary> 684 /// <returns>the stop code</returns> 685 public static int StopCode() 686  { 687 return cSTOP; 688  } 689 690 /// <summary> 691 /// Indicates which code sets can represent a character -- CodeA, CodeB, or either 692 /// </summary> 693 public enum CodeSetAllowed 694  { 695  CodeA, 696  CodeB, 697  CodeAorB 698  } 699 700 } 701 #endregion

View Code

 

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/167181.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)
blank

相关推荐

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号