• ean128与code128 条形码 算法分析


    【code128条形码组成】

    除终止符(STOP)由13个模块组成外,其他字符均由11个模块组成

    就是说,如果用‘1’表示黑线(实模块),用‘0’表示白线(空模块),那么每表示一个字符就需要11条线,也就是11个模块。

    在条码字符中,每三个条和三个空组成一个字符,终止符有四个条和三个空组成。
    就是说,这11条线的颜色,是依据一定的规则将其分布于三个黑线区和三个白线区,当然是黑白相间的。就像这样:
                11100110100,11011011000。具体的编码要参照码表,查找对应的字符或编码。
     
    【code128码表】其中b=>black代表黑线,s=>space代表白线
     
    ID Code128A Code128B Code128C BandCode 编码值
    0 SP  SP 0 212222 bbsbbssbbss
    1 ! ! 1 222122 bbssbbsbbss
    2 " " 2 222221 bbssbbssbbs
    3 # # 3 121223 bssbssbbsss
    4 $ $ 4 121322 bssbsssbbss
    5 % % 5 131222 bsssbssbbss
    6 & & 6 122213 bssbbssbsss
    7 ' ' 7 122312 bssbbsssbss
    8 ( ( 8 132212 bsssbbssbss
    9 ) ) 9 221213 bbssbssbsss
    10 * * 10 221312 bbssbsssbss
    11 + + 11 231212 bbsssbssbss
    12 , , 12 112232 bsbbssbbbss
    13 - - 13 122132 bssbbsbbbss
    14 . . 14 122231 bssbbssbbbs
    15 / / 15 113222 bsbbbssbbss
    16 0 0 16 123122 bssbbbsbbss
    17 1 1 17 123221 bssbbbssbbs
    18 2 2 18 223211 bbssbbbssbs
    19 3 3 19 221132 bbssbsbbbss
    20 4 4 20 221231 bbssbssbbbs
    21 5 5 21 213212 bbsbbbssbss
    22 6 6 22 223112 bbssbbbsbss
    23 7 7 23 312131 bbbsbbsbbbs
    24 8 8 24 311222 bbbsbssbbss
    25 9 9 25 321122 bbbssbsbbss
    26 : : 26 321221 bbbssbssbbs
    27 ; ; 27 312212 bbbsbbssbss
    28 < < 28 322112 bbbssbbsbss
    29 = = 29 322211 bbbssbbssbs
    30 > > 30 212123 bbsbbsbbsss
    31 ? ? 31 212321 bbsbbsssbbs
    32 @ @ 32 232121 bbsssbbsbbs
    33 A A 33 111323 bsbsssbbsss
    34 B B 34 131123 bsssbsbbsss
    35 C C 35 131321 bsssbsssbbs
    36 D D 36 112313 bsbbsssbsss
    37 E E 37 132113 bsssbbsbsss
    38 F F 38 132311 bsssbbsssbs
    39 G G 39 211313 bbsbsssbsss
    40 H H 40 231113 bbsssbsbsss
    41 I I 41 231311 bbsssbsssbs
    42 J J 42 112133 bsbbsbbbsss
    43 K K 43 112331 bsbbsssbbbs
    44 L L 44 132131 bsssbbsbbbs
    45 M M 45 113123 bsbbbsbbsss
    46 N N 46 113321 bsbbbsssbbs
    47 O O 47 133121 bsssbbbsbbs
    48 P P 48 313121 bbbsbbbsbbs
    49 Q Q 49 211331 bbsbsssbbbs
    50 R R 50 231131 bbsssbsbbbs
    51 S S 51 213113 bbsbbbsbsss
    52 T T 52 213311 bbsbbbsssbs
    53 U U 53 213131 bbsbbbsbbbs
    54 V V 54 311123 bbbsbsbbsss
    55 W W 55 311321 bbbsbsssbbs
    56 X X 56 331121 bbbsssbsbbs
    57 Y Y 57 312113 bbbsbbsbsss
    58 Z Z 58 312311 bbbsbbsssbs
    59 [ [ 59 332111 bbbsssbbsbs
    60 60 314111 bbbsbbbbsbs
    61 ] ] 61 221411 bbssbssssbs
    62 ^ ^ 62 431111 bbbbsssbsbs
    63 _ _ 63 111224 bsbssbbssss
    64 NUL ` 64 111422 bsbssssbbss
    65 SOH a 65 121124 bssbsbbssss
    66 STX b 66 121421 bssbssssbbs
    67 ETX c 67 141122 bssssbsbbss
    68 EOT d 68 141221 bssssbssbbs
    69 ENQ e 69 112214 bsbbssbssss
    70 ACK f 70 112412 bsbbssssbss
    71 BEL g 71 122114 bssbbsbssss
    72 BS h 72 122411 bssbbssssbs
    73 HT i 73 142112 bssssbbsbss
    74 LF j 74 142211 bssssbbssbs
    75 VT k 75 241211 bbssssbssbs
    76 FF I 76 221114 bbssbsbssss
    77 CR m 77 413111 bbbbsbbbsbs
    78 SO n 78 241112 bbssssbsbss
    79 SI o 79 134111 bsssbbbbsbs
    80 DLE p 80 111242 bsbssbbbbss
    81 DC1 q 81 121142 bssbsbbbbss
    82 DC2 r 82 121241 bssbssbbbbs
    83 DC3 s 83 114212 bsbbbbssbss
    84 DC4 t 84 124112 bssbbbbsbss
    85 NAK u 85 124211 bssbbbbssbs
    86 SYN v 86 411212 bbbbsbssbss
    87 ETB w 87 421112 bbbbssbsbss
    88 CAN x 88 421211 bbbbssbssbs
    89 EM y 89 212141 bbsbbsbbbbs
    90 SUB z 90 214121 bbsbbbbsbbs
    91 ESC { 91 412121 bbbbsbbsbbs
    92 FS | 92 111143 bsbsbbbbsss
    93 GS } 93 111341 bsbsssbbbbs
    94 RS ~ 94 131141 bsssbsbbbbs
    95 US DEL 95 114113 bsbbbbsbsss
    96 FNC3 FNC3 96 114311 bsbbbbsssbs
    97 FNC2 FNC2 97 411113 bbbbsbsbsss
    98 SHIFT SHIFT 98 411311 bbbbsbsssbs
    99 CODEC CODEC 99 113141 bsbbbsbbbbs
    100 CODEB FNC4 CODEB 114131 bsbbbbsbbbs
    101 FNC4 CODEA CODEA 311141 bbbsbsbbbbs
    102 FNC1 FNC1 FNC1 411131 bbbbsbsbbbs
    103 StartA StartA StartA 211412 bbsbssssbss
    104 StartB StartB StartB 211214 bbsbssbssss
    105 StartC StartC StartC 211232 bbsbssbbbss
    106 Stop Stop Stop 2331112 bbsssbbbsbsbb
     

    【Code128各编码方式的编码范围

    1、Code128A:标准数字和字母,控制符,特殊字符;

    2、Code128B:标准数字和字母,小写字母,特殊字符;

    3、Code128C/EAN128:[00]-[99]的数字对集合,共100个,即只能表示偶数位长度的数字。

    【Code128编码规则】:开始位 + [FNC1(为EAN128码时加)] + 数据位 + 检验位 + 结束位

    【Code128检验位计算】:(开始位对应的ID值 + 每位数据在整个数据中的位置×每位数据对应的ID值)% 103

     

    编码类型 开始位 FNC1
    Code128A StartA 无  
    Code128B StartB
    Code128C StartC
    Ean128 StartC FNC1

    【C#代码】

      1 using System;
      2 using System.Data;
      3 using System.Collections.Generic;
      4 using System.Text;
      5 using System.Drawing;
      6 
      7 
      8 namespace XXXX.Common
      9 {
     10     /// <summary>
     11     /// 生成Code128A,Code128B,Code128C,EAN128条码
     12     /// </summary>
     13     public class BarCode
     14     {
     15         /// <summary>
     16         /// 生成条形码
     17         /// </summary>
     18         /// <param name="barNumber">条形码,位数必须为2的倍数</param>
     19         public void CreateBarCode(string barNumber)
     20         {
     21             if (barNumber.Length % 2 == 1) barNumber = "0" + barNumber;
     22             Code128 code = new Code128();
     23             //code.ValueFont = new Font("Arial", 9); //显示条码文字字体
     24             code.Height = 38;
     25             Bitmap image = code.GetCodeImage(barNumber, Common.BarCode.Code128.Encode.Code128C);
     26             image.Save(System.Web.HttpContext.Current.Response.OutputStream, System.Drawing.Imaging.ImageFormat.Gif);
     27         }
     28         public class Code128
     29         {
     30             private DataTable m_Code128 = new DataTable();
     31             private uint m_Height = 40;
     32             ///&nbsp;<summary>
     33             ///&nbsp;高度
     34             ///&nbsp;</summary>
     35             public uint Height { get { return m_Height; } set { m_Height = value; } }
     36             private Font m_ValueFont = null;
     37             ///&nbsp;<summary>
     38             ///&nbsp;是否显示可见号码&nbsp;如果为NULL不显示号码
     39             ///&nbsp;</summary>
     40             public Font ValueFont { get { return m_ValueFont; } set { m_ValueFont = value; } }
     41             private byte m_Magnify = 0;
     42             ///&nbsp;<summary>
     43             ///&nbsp;放大倍数
     44             ///&nbsp;</summary>
     45             public byte Magnify { get { return m_Magnify; } set { m_Magnify = value; } }
     46             ///&nbsp;<summary>
     47             ///&nbsp;条码类别
     48             ///&nbsp;</summary>
     49             public enum Encode
     50             {
     51                 Code128A,
     52                 Code128B,
     53                 Code128C,
     54                 EAN128
     55             }
     56             /// <summary>
     57             /// 数据表
     58             /// </summary>
     59             public Code128()
     60             {
     61                 m_Code128.Columns.Add("ID");
     62                 m_Code128.Columns.Add("Code128A");
     63                 m_Code128.Columns.Add("Code128B");
     64                 m_Code128.Columns.Add("Code128C");
     65                 m_Code128.Columns.Add("BandCode");
     66                 m_Code128.CaseSensitive = true;
     67                 #region&nbsp;数据表
     68                 m_Code128.Rows.Add("0", "&nbsp;", "&nbsp;", "00", "212222");
     69                 m_Code128.Rows.Add("1", "!", "!", "01", "222122");
     70                 m_Code128.Rows.Add("2", """, """, "02", "222221");
     71                 m_Code128.Rows.Add("3", "#", "#", "03", "121223");
     72                 m_Code128.Rows.Add("4", "$", "$", "04", "121322");
     73                 m_Code128.Rows.Add("5", "%", "%", "05", "131222");
     74                 m_Code128.Rows.Add("6", "&", "&", "06", "122213");
     75                 m_Code128.Rows.Add("7", "'", "'", "07", "122312");
     76                 m_Code128.Rows.Add("8", "(", "(", "08", "132212");
     77                 m_Code128.Rows.Add("9", ")", ")", "09", "221213");
     78                 m_Code128.Rows.Add("10", "*", "*", "10", "221312");
     79                 m_Code128.Rows.Add("11", "+", "+", "11", "231212");
     80                 m_Code128.Rows.Add("12", ",", ",", "12", "112232");
     81                 m_Code128.Rows.Add("13", "-", "-", "13", "122132");
     82                 m_Code128.Rows.Add("14", ".", ".", "14", "122231");
     83                 m_Code128.Rows.Add("15", "/", "/", "15", "113222");
     84                 m_Code128.Rows.Add("16", "0", "0", "16", "123122");
     85                 m_Code128.Rows.Add("17", "1", "1", "17", "123221");
     86                 m_Code128.Rows.Add("18", "2", "2", "18", "223211");
     87                 m_Code128.Rows.Add("19", "3", "3", "19", "221132");
     88                 m_Code128.Rows.Add("20", "4", "4", "20", "221231");
     89                 m_Code128.Rows.Add("21", "5", "5", "21", "213212");
     90                 m_Code128.Rows.Add("22", "6", "6", "22", "223112");
     91                 m_Code128.Rows.Add("23", "7", "7", "23", "312131");
     92                 m_Code128.Rows.Add("24", "8", "8", "24", "311222");
     93                 m_Code128.Rows.Add("25", "9", "9", "25", "321122");
     94                 m_Code128.Rows.Add("26", ":", ":", "26", "321221");
     95                 m_Code128.Rows.Add("27", ";", ";", "27", "312212");
     96                 m_Code128.Rows.Add("28", "<", "<", "28", "322112");
     97                 m_Code128.Rows.Add("29", "=", "=", "29", "322211");
     98                 m_Code128.Rows.Add("30", ">", ">", "30", "212123");
     99                 m_Code128.Rows.Add("31", "?", "?", "31", "212321");
    100                 m_Code128.Rows.Add("32", "@", "@", "32", "232121");
    101                 m_Code128.Rows.Add("33", "A", "A", "33", "111323");
    102                 m_Code128.Rows.Add("34", "B", "B", "34", "131123");
    103                 m_Code128.Rows.Add("35", "C", "C", "35", "131321");
    104                 m_Code128.Rows.Add("36", "D", "D", "36", "112313");
    105                 m_Code128.Rows.Add("37", "E", "E", "37", "132113");
    106                 m_Code128.Rows.Add("38", "F", "F", "38", "132311");
    107                 m_Code128.Rows.Add("39", "G", "G", "39", "211313");
    108                 m_Code128.Rows.Add("40", "H", "H", "40", "231113");
    109                 m_Code128.Rows.Add("41", "I", "I", "41", "231311");
    110                 m_Code128.Rows.Add("42", "J", "J", "42", "112133");
    111                 m_Code128.Rows.Add("43", "K", "K", "43", "112331");
    112                 m_Code128.Rows.Add("44", "L", "L", "44", "132131");
    113                 m_Code128.Rows.Add("45", "M", "M", "45", "113123");
    114                 m_Code128.Rows.Add("46", "N", "N", "46", "113321");
    115                 m_Code128.Rows.Add("47", "O", "O", "47", "133121");
    116                 m_Code128.Rows.Add("48", "P", "P", "48", "313121");
    117                 m_Code128.Rows.Add("49", "Q", "Q", "49", "211331");
    118                 m_Code128.Rows.Add("50", "R", "R", "50", "231131");
    119                 m_Code128.Rows.Add("51", "S", "S", "51", "213113");
    120                 m_Code128.Rows.Add("52", "T", "T", "52", "213311");
    121                 m_Code128.Rows.Add("53", "U", "U", "53", "213131");
    122                 m_Code128.Rows.Add("54", "V", "V", "54", "311123");
    123                 m_Code128.Rows.Add("55", "W", "W", "55", "311321");
    124                 m_Code128.Rows.Add("56", "X", "X", "56", "331121");
    125                 m_Code128.Rows.Add("57", "Y", "Y", "57", "312113");
    126                 m_Code128.Rows.Add("58", "Z", "Z", "58", "312311");
    127                 m_Code128.Rows.Add("59", "[", "[", "59", "332111");
    128                 m_Code128.Rows.Add("60", "\", "\", "60", "314111");
    129                 m_Code128.Rows.Add("61", "]", "]", "61", "221411");
    130                 m_Code128.Rows.Add("62", "^", "^", "62", "431111");
    131                 m_Code128.Rows.Add("63", "_", "_", "63", "111224");
    132                 m_Code128.Rows.Add("64", "NUL", "`", "64", "111422");
    133                 m_Code128.Rows.Add("65", "SOH", "a", "65", "121124");
    134                 m_Code128.Rows.Add("66", "STX", "b", "66", "121421");
    135                 m_Code128.Rows.Add("67", "ETX", "c", "67", "141122");
    136                 m_Code128.Rows.Add("68", "EOT", "d", "68", "141221");
    137                 m_Code128.Rows.Add("69", "ENQ", "e", "69", "112214");
    138                 m_Code128.Rows.Add("70", "ACK", "f", "70", "112412");
    139                 m_Code128.Rows.Add("71", "BEL", "g", "71", "122114");
    140                 m_Code128.Rows.Add("72", "BS", "h", "72", "122411");
    141                 m_Code128.Rows.Add("73", "HT", "i", "73", "142112");
    142                 m_Code128.Rows.Add("74", "LF", "j", "74", "142211");
    143                 m_Code128.Rows.Add("75", "VT", "k", "75", "241211");
    144                 m_Code128.Rows.Add("76", "FF", "I", "76", "221114");
    145                 m_Code128.Rows.Add("77", "CR", "m", "77", "413111");
    146                 m_Code128.Rows.Add("78", "SO", "n", "78", "241112");
    147                 m_Code128.Rows.Add("79", "SI", "o", "79", "134111");
    148                 m_Code128.Rows.Add("80", "DLE", "p", "80", "111242");
    149                 m_Code128.Rows.Add("81", "DC1", "q", "81", "121142");
    150                 m_Code128.Rows.Add("82", "DC2", "r", "82", "121241");
    151                 m_Code128.Rows.Add("83", "DC3", "s", "83", "114212");
    152                 m_Code128.Rows.Add("84", "DC4", "t", "84", "124112");
    153                 m_Code128.Rows.Add("85", "NAK", "u", "85", "124211");
    154                 m_Code128.Rows.Add("86", "SYN", "v", "86", "411212");
    155                 m_Code128.Rows.Add("87", "ETB", "w", "87", "421112");
    156                 m_Code128.Rows.Add("88", "CAN", "x", "88", "421211");
    157                 m_Code128.Rows.Add("89", "EM", "y", "89", "212141");
    158                 m_Code128.Rows.Add("90", "SUB", "z", "90", "214121");
    159                 m_Code128.Rows.Add("91", "ESC", "{", "91", "412121");
    160                 m_Code128.Rows.Add("92", "FS", "|", "92", "111143");
    161                 m_Code128.Rows.Add("93", "GS", "}", "93", "111341");
    162                 m_Code128.Rows.Add("94", "RS", "~", "94", "131141");
    163                 m_Code128.Rows.Add("95", "US", "DEL", "95", "114113");
    164                 m_Code128.Rows.Add("96", "FNC3", "FNC3", "96", "114311");
    165                 m_Code128.Rows.Add("97", "FNC2", "FNC2", "97", "411113");
    166                 m_Code128.Rows.Add("98", "SHIFT", "SHIFT", "98", "411311");
    167                 m_Code128.Rows.Add("99", "CODEC", "CODEC", "99", "113141");
    168                 m_Code128.Rows.Add("100", "CODEB", "FNC4", "CODEB", "114131");
    169                 m_Code128.Rows.Add("101", "FNC4", "CODEA", "CODEA", "311141");
    170                 m_Code128.Rows.Add("102", "FNC1", "FNC1", "FNC1", "411131");
    171                 m_Code128.Rows.Add("103", "StartA", "StartA", "StartA", "211412");
    172                 m_Code128.Rows.Add("104", "StartB", "StartB", "StartB", "211214");
    173                 m_Code128.Rows.Add("105", "StartC", "StartC", "StartC", "211232");
    174                 m_Code128.Rows.Add("106", "Stop", "Stop", "Stop", "2331112");
    175                 #endregion
    176             }
    177             ///&nbsp;<summary>
    178             ///&nbsp;获取128图形
    179             ///&nbsp;</summary>
    180             ///&nbsp;<param&nbsp;name="p_Text">文字</param>
    181             ///&nbsp;<param&nbsp;name="p_Code">编码</param>
    182             ///&nbsp;<returns>图形</returns>
    183             public Bitmap GetCodeImage(string p_Text, Encode p_Code)
    184             {
    185                 string _ViewText = p_Text;
    186                 string _Text = "";
    187                 IList<int> _TextNumb = new List<int>();
    188                 int _Examine = 0;&nbsp;//首位
    189                 switch (p_Code)
    190                 {
    191                     case Encode.Code128C:
    192                         _Examine = 105;
    193                         if (!((p_Text.Length & 1) == 0)) throw new Exception("128C长度必须是偶数");
    194                         while (p_Text.Length != 0)
    195                         {
    196                             int _Temp = 0;
    197                             try
    198                             {
    199                                 int _CodeNumb128 = Int32.Parse(p_Text.Substring(0, 2));
    200                             }
    201                             catch
    202                             {
    203                                 throw new Exception("128C必须是数字!");
    204                             }
    205                             _Text += GetValue(p_Code, p_Text.Substring(0, 2), ref&nbsp;_Temp);
    206                             _TextNumb.Add(_Temp);
    207                             p_Text = p_Text.Remove(0, 2);
    208                         }
    209                         break;
    210                     case Encode.EAN128:
    211                         _Examine = 105;
    212                         if (!((p_Text.Length & 1) == 0)) throw new Exception("EAN128长度必须是偶数");
    213                         _TextNumb.Add(102);
    214                         _Text += "411131";
    215                         while (p_Text.Length != 0)
    216                         {
    217                             int _Temp = 0;
    218                             try
    219                             {
    220                                 int _CodeNumb128 = Int32.Parse(p_Text.Substring(0, 2));
    221                             }
    222                             catch
    223                             {
    224                                 throw new Exception("128C必须是数字!");
    225                             }
    226                             _Text += GetValue(Encode.Code128C, p_Text.Substring(0, 2), ref&nbsp;_Temp);
    227                             _TextNumb.Add(_Temp);
    228                             p_Text = p_Text.Remove(0, 2);
    229                         }
    230                         break;
    231                     default:
    232                         if (p_Code == Encode.Code128A)
    233                         {
    234                             _Examine = 103;
    235                         }
    236                         else
    237                         {
    238                             _Examine = 104;
    239                         }
    240                         while (p_Text.Length != 0)
    241                         {
    242                             int _Temp = 0;
    243                             string _ValueCode = GetValue(p_Code, p_Text.Substring(0, 1), ref&nbsp;_Temp);
    244                             if (_ValueCode.Length == 0) throw new Exception("无效的字符集!" + p_Text.Substring(0, 1).ToString());
    245                             _Text += _ValueCode;
    246                             _TextNumb.Add(_Temp);
    247                             p_Text = p_Text.Remove(0, 1);
    248                         }
    249                         break;
    250                 }
    251                 if (_TextNumb.Count == 0) throw new Exception("错误的编码,无数据");
    252                 _Text = _Text.Insert(0, GetValue(_Examine));&nbsp;//获取开始位
    253                 for (int i = 0; i != _TextNumb.Count; i++)
    254                 {
    255                     _Examine += _TextNumb[i] * (i + 1);
    256                 }
    257                 _Examine = _Examine % 103;&nbsp;//获得严效位
    258                 _Text += GetValue(_Examine);&nbsp;//获取严效位
    259                 _Text += "2331112";&nbsp;//结束位
    260                 Bitmap _CodeImage = GetImage(_Text);
    261                 GetViewText(_CodeImage, _ViewText);
    262                 return _CodeImage;
    263             }
    264 
    265             ///&nbsp;<summary>
    266             ///&nbsp;获取目标对应的数据
    267             ///&nbsp;</summary>
    268             ///&nbsp;<param&nbsp;name="p_Code">编码</param>
    269             ///&nbsp;<param&nbsp;name="p_Value">数值&nbsp;A&nbsp;b&nbsp;30</param>
    270             ///&nbsp;<param&nbsp;name="p_SetID">返回编号</param>
    271             ///&nbsp;<returns>编码</returns>
    272             private string GetValue(Encode p_Code, string p_Value, ref&nbsp;int p_SetID)
    273             {
    274                 if (m_Code128 == null) return "";
    275                 DataRow[] _Row = m_Code128.Select(p_Code.ToString() + "='" + p_Value + "'");
    276                 if (_Row.Length != 1) throw new Exception("错误的编码" + p_Value.ToString());
    277                 p_SetID = Int32.Parse(_Row[0]["ID"].ToString());
    278                 return _Row[0]["BandCode"].ToString();
    279             }
    280             ///&nbsp;<summary>
    281             ///&nbsp;根据编号获得条纹
    282             ///&nbsp;</summary>
    283             ///&nbsp;<param&nbsp;name="p_CodeId"></param>
    284             ///&nbsp;<returns></returns>
    285             private string GetValue(int p_CodeId)
    286             {
    287                 DataRow[] _Row = m_Code128.Select("ID='" + p_CodeId.ToString() + "'");
    288                 if (_Row.Length != 1) throw new Exception("验效位的编码错误" + p_CodeId.ToString());
    289                 return _Row[0]["BandCode"].ToString();
    290             }
    291             ///&nbsp;<summary>
    292             ///&nbsp;获得条码图形
    293             ///&nbsp;</summary>
    294             ///&nbsp;<param&nbsp;name="p_Text">文字</param>
    295             ///&nbsp;<returns>图形</returns>
    296             private Bitmap GetImage(string p_Text)
    297             {
    298                 char[] _Value = p_Text.ToCharArray();
    299                 int _Width = 0;
    300                 for (int i = 0; i != _Value.Length; i++)
    301                 {
    302                     _Width += Int32.Parse(_Value[i].ToString()) * (m_Magnify + 1);
    303                 }
    304                 Bitmap _CodeImage = new Bitmap(_Width, (int)m_Height);
    305                 Graphics _Garphics = Graphics.FromImage(_CodeImage);
    306                 //Pen&nbsp;_Pen;
    307                 int _LenEx = 0;
    308                 for (int i = 0; i != _Value.Length; i++)
    309                 {
    310                     int _ValueNumb = Int32.Parse(_Value[i].ToString()) * (m_Magnify + 1);&nbsp;//获取宽和放大系数
    311                     if (!((i & 1) == 0))
    312                     {
    313                         //_Pen&nbsp;=&nbsp;new&nbsp;Pen(Brushes.White,&nbsp;_ValueNumb);
    314                         _Garphics.FillRectangle(Brushes.White, new Rectangle(_LenEx, 0, _ValueNumb, (int)m_Height));
    315                     }
    316                     else
    317                     {
    318                         //_Pen&nbsp;=&nbsp;new&nbsp;Pen(Brushes.Black,&nbsp;_ValueNumb);
    319                         _Garphics.FillRectangle(Brushes.Black, new Rectangle(_LenEx, 0, _ValueNumb, (int)m_Height));
    320                     }
    321                     //_Garphics.(_Pen,&nbsp;new&nbsp;Point(_LenEx,&nbsp;0),&nbsp;new&nbsp;Point(_LenEx,&nbsp;m_Height));
    322                     _LenEx += _ValueNumb;
    323                 }
    324                 _Garphics.Dispose();
    325                 return _CodeImage;
    326             }
    327             ///&nbsp;<summary>
    328             ///&nbsp;显示可见条码文字&nbsp;如果小于40&nbsp;不显示文字
    329             ///&nbsp;</summary>
    330             ///&nbsp;<param&nbsp;name="p_Bitmap">图形</param>
    331             private void GetViewText(Bitmap p_Bitmap, string p_ViewText)
    332             {
    333                 if (m_ValueFont == null) return;
    334                 Graphics _Graphics = Graphics.FromImage(p_Bitmap);
    335                 SizeF _DrawSize = _Graphics.MeasureString(p_ViewText, m_ValueFont);
    336                 if (_DrawSize.Height > p_Bitmap.Height - 10 || _DrawSize.Width > p_Bitmap.Width)
    337                 {
    338                     _Graphics.Dispose();
    339                     return;
    340                 }
    341                 int _StarY = p_Bitmap.Height - (int)_DrawSize.Height;
    342                 _Graphics.FillRectangle(Brushes.White, new Rectangle(0, _StarY, p_Bitmap.Width, (int)_DrawSize.Height));
    343                 _Graphics.DrawString(p_ViewText, m_ValueFont, Brushes.Black, 0, _StarY);
    344             }
    345         }
    346     }
    347 }
    code128

    [代码转自]http://blog.csdn.net/anchenyanyue/article/details/7666284

    现实中很多现有的代码库有code128码,但是没有ean128码,所以根据算法我们也可以很容易添加ean128.

    一下是在barcodelib添加ean128的代码,这边只有code128部分,就当作是扩展吧 【BarcodeLibExtend下载】

  • 相关阅读:
    【alpha】Scrum站立会议第2次....10.17
    【alpha】Scrum站立会议第1次····10.16
    【week4】技术随笔psp
    【week4】课堂Scrum站立会议
    【week3】psp (技术随笔)
    【week3】四则运算 单元测试
    【week3】词频统计 单元测试
    Oracle Split字符串

    指针函数与指针数组
  • 原文地址:https://www.cnblogs.com/AspDotNetMVC/p/3812031.html
Copyright © 2020-2023  润新知