• C#如何打印条形码EAN13码


    假设将EAN的内容从右到左的顺序编号:N13、N12、N11、N10、N9、N8、N7、N6、N5、N4、N3、N2、N1,其中N1是准备要求的校验位:
    1、C1=(N2+N4+N6+N8+N10+N12)*3;
    2、C2=N3+N5+N7+N9+N11+N13;
    3、将C1与C2相加,取其个位数,设为C3;4、校验位N1=10-C3

    using System;
    using System.Collections;
    using System.ComponentModel;
    using System.Drawing;
    using System.Data;
    using System.Windows.Forms;

    namespace BarCodeEAN13
    {
    /// <summary>
    /// Barcode control.
    /// </summary>
    public class wctrl_BarCode
    {

       private static string getENA13Code(string Numbers12bit)
       {
        int c1 = 0;
        int c2 = 0;

        for (int i=0; i<11; i= i+2)
        {
         c1 += int.Parse(Numbers12bit[i].ToString());
         c2 += int.Parse(Numbers12bit[i+1].ToString());
        }

        int c3 = c1 + c2 *3;

        c3 = c3 - c3/10 *10;

        if (c3 == 0)
        {
         return Numbers12bit + 0;
        }
        else
        {
         int N = 10 - c3;

         return Numbers12bit + N;
        }
       }

       /// <summary>
       /// Paint EAN13 barcode to specified graphics into specified draw rectangle.
       /// </summary>
       /// <param name="barCode">BarCode value.</param>
       /// <param name="g">Graphics where to draw.</param>
       /// <param name="drawBounds">Draw bounds.</param>
       public static void Paint_EAN13(string Numbers12bit,Graphics g,Rectangle drawBounds)
       {
        string barCode = getENA13Code(Numbers12bit);

        char[] symbols = barCode.ToCharArray();

        //--- Validate barCode -------------------------------------------------------------------//
        if(barCode.Length != 13){    
         return;
        }
        foreach(char c in symbols){
         if(!Char.IsDigit(c)){
          return;
         }
        }

        //--- Check barcode checksum ------------------------//
        int checkSum = Convert.ToInt32(symbols[12].ToString());
        int calcSum = 0;
        bool one_three = true;
        for(int i=0;i<12;i++){
         if(one_three){
          calcSum += (Convert.ToInt32(symbols[i].ToString()) * 1);
          one_three = false;
         }
         else{
          calcSum += (Convert.ToInt32(symbols[i].ToString()) * 3);
          one_three = true;
         }    
        }
       
        char[] calcSumChar = calcSum.ToString().ToCharArray();
        if(checkSum !=0 && checkSum != (10 - Convert.ToInt32(calcSumChar[calcSumChar.Length - 1].ToString()))){
         return;
          }   
        //--------------------------------------------------//
        //---------------------------------------------------------------------------------------//

        Font font = new Font("Microsoft Sans Serif",8);
       
        // Fill backround with white color
    //    g.Clear(Color.White);

        int lineWidth = 1;
        int x = drawBounds.X;

        // Paint human readable 1 system symbol code
        g.DrawString(symbols[0].ToString(),font,new SolidBrush(Color.Black),x,drawBounds.Y + drawBounds.Height - 16);
        x += 10;

        // Paint left 'guard bars', always same '101'
        g.DrawLine(new Pen(Color.Black,lineWidth),x,drawBounds.Y,x,drawBounds.Y + drawBounds.Height);
        x += lineWidth;
        g.DrawLine(new Pen(Color.White,lineWidth),x,drawBounds.Y,x,drawBounds.Y + drawBounds.Height);
        x += lineWidth;
        g.DrawLine(new Pen(Color.Black,lineWidth),x,drawBounds.Y,x,drawBounds.Y + drawBounds.Height);
        x += lineWidth;

        // First number of barcode specifies how to encode each character in the left-hand
        // side of the barcode should be encoded.
        bool[] leftSideParity = new bool[6];
        switch(symbols[0])
        {
         case '0':
          leftSideParity[0] = true; // Odd
          leftSideParity[1] = true; // Odd
          leftSideParity[2] = true; // Odd
          leftSideParity[3] = true; // Odd
          leftSideParity[4] = true; // Odd
          leftSideParity[5] = true; // Odd
          break;
         case '1':
          leftSideParity[0] = true; // Odd
          leftSideParity[1] = true; // Odd
          leftSideParity[2] = false; // Even
          leftSideParity[3] = true; // Odd
          leftSideParity[4] = false; // Even
          leftSideParity[5] = false; // Even
          break;
         case '2':
          leftSideParity[0] = true; // Odd
          leftSideParity[1] = true; // Odd
          leftSideParity[2] = false; // Even
          leftSideParity[3] = false; // Even
          leftSideParity[4] = true; // Odd
          leftSideParity[5] = false; // Even
          break;
         case '3':
          leftSideParity[0] = true; // Odd
          leftSideParity[1] = true; // Odd
          leftSideParity[2] = false; // Even
          leftSideParity[3] = false; // Even
          leftSideParity[4] = false; // Even
          leftSideParity[5] = true; // Odd
          break;
         case '4':
          leftSideParity[0] = true; // Odd
          leftSideParity[1] = false; // Even
          leftSideParity[2] = true; // Odd
          leftSideParity[3] = true; // Odd
          leftSideParity[4] = false; // Even
          leftSideParity[5] = false; // Even
          break;
         case '5':
          leftSideParity[0] = true; // Odd
          leftSideParity[1] = false; // Even
          leftSideParity[2] = false; // Even
          leftSideParity[3] = true; // Odd
          leftSideParity[4] = true; // Odd
          leftSideParity[5] = false; // Even
          break;
         case '6':
          leftSideParity[0] = true; // Odd
          leftSideParity[1] = false; // Even
          leftSideParity[2] = false; // Even
          leftSideParity[3] = false; // Even
          leftSideParity[4] = true; // Odd
          leftSideParity[5] = true; // Odd
          break;
         case '7':
          leftSideParity[0] = true; // Odd
          leftSideParity[1] = false; // Even
          leftSideParity[2] = true; // Odd
          leftSideParity[3] = false; // Even
          leftSideParity[4] = true; // Odd
          leftSideParity[5] = false; // Even
          break;
         case '8':
          leftSideParity[0] = true; // Odd
          leftSideParity[1] = false; // Even
          leftSideParity[2] = true; // Odd
          leftSideParity[3] = false; // Even
          leftSideParity[4] = false; // Even
          leftSideParity[5] = true; // Odd
          break;
         case '9':
          leftSideParity[0] = true; // Odd
          leftSideParity[1] = false; // Even
          leftSideParity[2] = false; // Even
          leftSideParity[3] = true; // Odd
          leftSideParity[4] = false; // Even
          leftSideParity[5] = true; // Odd
          break;
        }

        // second number system digit + 5 symbol manufacter code
        string lines = "";
        for(int i=0;i<6;i++){
         bool oddParity = leftSideParity[i];
         if(oddParity){
          switch(symbols[i + 1])
          {
           case '0':
            lines += "0001101";
            break;
           case '1':
            lines += "0011001";
            break;
           case '2':
            lines += "0010011";
            break;
           case '3':
            lines += "0111101";
            break;
           case '4':
            lines += "0100011";
            break;
           case '5':
            lines += "0110001";
            break;
           case '6':
            lines += "0101111";
            break;
           case '7':
            lines += "0111011";
            break;
           case '8':
            lines += "0110111";
            break;
           case '9':
            lines += "0001011";
            break;
          }
         }
         // Even parity
         else{
          switch(symbols[i + 1])
          {
           case '0':
            lines += "0100111";
            break;
           case '1':
            lines += "0110011";
            break;
           case '2':
            lines += "0011011";
            break;
           case '3':
            lines += "0100001";
            break;
           case '4':
            lines += "0011101";
            break;
           case '5':
            lines += "0111001";
            break;
           case '6':
            lines += "0000101";
            break;
           case '7':
            lines += "0010001";
            break;
           case '8':
            lines += "0001001";
            break;
           case '9':
            lines += "0010111";
            break;
          }
         }
        }

        // Paint human readable left-side 6 symbol code
        g.DrawString(barCode.Substring(1,6),font,new SolidBrush(Color.Black),x,drawBounds.Y + drawBounds.Height - 12);

        char[] xxx = lines.ToCharArray();
        for(int i=0;i<xxx.Length;i++){
         if(xxx[i] == '1'){
          g.DrawLine(new Pen(Color.Black,lineWidth),x,drawBounds.Y,x,drawBounds.Y + drawBounds.Height - 12);
         }
         else{
          g.DrawLine(new Pen(Color.White,lineWidth),x,drawBounds.Y,x,drawBounds.Y + drawBounds.Height - 12);
         }
         x += lineWidth;
        }
       
        // Paint center 'guard bars', always same '01010'
        g.DrawLine(new Pen(Color.White,lineWidth),x,drawBounds.Y,x,drawBounds.Y + drawBounds.Height);
        x += lineWidth;
        g.DrawLine(new Pen(Color.Black,lineWidth),x,drawBounds.Y,x,drawBounds.Y + drawBounds.Height);
        x += lineWidth;
        g.DrawLine(new Pen(Color.White,lineWidth),x,drawBounds.Y,x,drawBounds.Y + drawBounds.Height);
        x += lineWidth;
        g.DrawLine(new Pen(Color.Black,lineWidth),x,drawBounds.Y,x,drawBounds.Y + drawBounds.Height);
        x += lineWidth;
        g.DrawLine(new Pen(Color.White,lineWidth),x,drawBounds.Y,x,drawBounds.Y + drawBounds.Height);
        x += lineWidth;

        // 5 symbol product code + 1 symbol parity
        lines = "";
        for(int i=7;i<13;i++){
         switch(symbols[i])
         {
          case '0':
           lines += "1110010";
           break;
          case '1':
           lines += "1100110";
           break;
          case '2':
           lines += "1101100";
           break;
          case '3':
           lines += "1000010";
           break;
          case '4':
           lines += "1011100";
           break;
          case '5':
           lines += "1001110";
           break;
          case '6':
           lines += "1010000";
           break;
          case '7':
           lines += "1000100";
           break;
          case '8':
           lines += "1001000";
           break;
          case '9':
           lines += "1110100";
           break;
         }
        }

        // Paint human readable left-side 6 symbol code
        g.DrawString(barCode.Substring(7,6),font,new SolidBrush(Color.Black),x,drawBounds.Y + drawBounds.Height - 12);

        xxx = lines.ToCharArray();
        for(int i=0;i<xxx.Length;i++){
         if(xxx[i] == '1'){
          g.DrawLine(new Pen(Color.Black,lineWidth),x,drawBounds.Y,x,drawBounds.Y + drawBounds.Height - 12);
         }
         else{
          g.DrawLine(new Pen(Color.White,lineWidth),x,drawBounds.Y,x,drawBounds.Y + drawBounds.Height - 12);
         }
         x += lineWidth;
        }
       
        // Paint right 'guard bars', always same '101'
        g.DrawLine(new Pen(Color.Black,lineWidth),x,drawBounds.Y,x,drawBounds.Y + drawBounds.Height);
        x += lineWidth;
        g.DrawLine(new Pen(Color.White,lineWidth),x,drawBounds.Y,x,drawBounds.Y + drawBounds.Height);
        x += lineWidth;
        g.DrawLine(new Pen(Color.Black,lineWidth),x,drawBounds.Y,x,drawBounds.Y + drawBounds.Height);
       }

    }
    }

  • 相关阅读:
    DateTime 格式化示例
    Linq To XML概述[转]
    .net邮件发送代码
    ASP.NET中c#的URL编码处理
    消息队列(Message Queue)简介及其使用
    C#多线程学习笔记之(abort与join配合使用)
    异常处理的性能损失
    推荐一款DataGridView的打印解决方案
    玩转App.Config
    推荐一个快速反射调用的类
  • 原文地址:https://www.cnblogs.com/zzxap/p/2175969.html
Copyright © 2020-2023  润新知