zoukankan      html  css  js  c++  java
  • 普通字符 转 CODE128 算法 摘自网络

    1、CODE128基础知识

    CODE128有三个版本:
    CODE128A: 标准数字和字母, 控制符, 特殊字符
    CODE128B: 标准数字和字母, 小写字母, 特殊字符
    CODE128C: [00]-[99]的数字对集合, 共100个

    这里采用CODE128B版本,系统内需要安装Code 128字体

    2、条码编码规则

    条码由开始位、数据、校验位、停止位组成

    条码=Convert.ToChar(204)+数据+Convert.ToChar(校验码)+Convert.ToChar(206);

    需要计算的就是校验码了,下面直接给出转换函数:

     


    private string Get128CodeString(string inputData)
    {
        string result;
        int checksum=104;
        for(int ii=0;ii<inputData.Length;ii++)
        {
            if(inputData[ii]>=32)
            {
                checksum+=(inputData[ii]-32)*(ii+1);
            }
            else        
            {
                checksum+=(inputData[ii]+64)*(ii+1);
            }            
        }
        checksum=checksum%103;        
        if(checksum<95)
        {
            checksum+=32;
        }
        else
        {
            checksum+=100;        
        }
        result=Convert.ToChar(204)+inputData.ToString()+Convert.ToChar(checksum)+Convert.ToChar(206);
        return result;
    }

    3、打印


    public void PrintLable()
    {
        PrintDocument pd = new PrintDocument();
        StandardPrintController controler = new StandardPrintController();

        try
        {    
            pd.PrintPage+=new PrintPageEventHandler(this.PrintCustomLable);
            pd.PrintController = controler;
            pd.Print();                    
            return;
        }
        catch(Exception err)
        {
            Console.WriteLine(err.Message);
            return;
        }
        finally
        {
            pd.Dispose();
        }

    }
    public void PrintCustomLable(Object Sender,PrintPageEventArgs av)
    {
        Font ft1 = new System.Drawing.Font("Times New Roman",18,FontStyle.Regular,GraphicsUnit.World);
        Font ft2 = new System.Drawing.Font("Code 128",64,FontStyle.Regular,GraphicsUnit.World);
        Brush br = new SolidBrush(Color.Black);
        Margins margins = new Margins(50,50,50,145);
        av.PageSettings.Margins = margins;
        
        av.Graphics.DrawString(Get128CodeString(inputString),ft2,br,50,-3);
        av.Graphics.DrawString(inputString,ft1,br,110,60);
        av.HasMorePages = false;
    }

    看到评论说是不能用,今天测试了一下,发现写错了一个地方:

    条码=Convert.ToChar(204)+数据+Convert.ToChar(校验码)+Convert.ToChar(206);

    代码:

    result=Convert.ToChar(204)+checksum.ToString()+Convert.ToChar(checksum)+Convert.ToChar(206);

    应该改为:
    result=Convert.ToChar(204)+inputData.ToString()+Convert.ToChar(checksum)+Convert.ToChar(206);

    简单测试程序:

    Vs2008测试程序

    代码用到打印的东西需要引用:

    using System.Drawing.Printing;

    定义全局变量:

    string inputString;

    在按钮click中测试:

    inputString = "0123456789";

    //查看Code128码的值:

    //lblBarCode.Text = Get128CodeString(inputString);

    PrintLable();

    如果还有问题,那是系统里没有安装Code 128字体 Code128字体下载

  • 相关阅读:
    android 管理wifi
    andriod 剪贴板操作
    andriod绘制图形
    andriod读写XML
    androd 获得wifi列表
    一个小时内学习SQLite数据库
    Android 使用SQLite本地数据库
    Android可伸缩列表ExpandableListView
    三甲医院涉医疗反腐,今年已有 149 位被查!
    2015各地区顶尖中学排行榜
  • 原文地址:https://www.cnblogs.com/haoliansheng/p/3056772.html
Copyright © 2011-2022 走看看