要生产10位以上的条码,单偶不定。用code128 A,B字符集生成的条码太长。为什么专业的条码打印软件生成的条码不计较短,有人说用的是code128 auto. 想问code128 auto用的什么字符集,怎么生成的。求代码或算法。

解决方案 »

  1.   

    为什么用条码软件生成的图像,黑白条的数量比我自己用code128 A或code128 B生成的要少很多
      

  2.   

    code 128 不需要算    把条码制指定为code128 字符就OK了    系统会自动转换为条码 
         注意:必须在 控制面板--字体 中  有code 128 的文件
      

  3.   

    CODE128A: 标准数字和字母, 控制符, 特殊字符
    CODE128B: 标准数字和字母, 小写字母, 特殊字符
    CODE128C: [00]-[99]的数字对集合, 共100个(只能包含数字,一个条码字符代表两位数字)
    CODE128AUTO:会自动在几个代码集中切换。由于Code128本身数据和条码图像是一对多的关系, 甚至Code128A-C可以同时存在于一个条码里面, 因此从标准上是不可能区分的. 如果要区分的话, 我觉得通过肉眼判断条码的起始符更简单一点。起始码
    编码类别  逻辑型态            相对值
    CODE A  11010000100   103
    CODE B  11010010000   104
    CODE C  11010011100   105
      

  4.   

            public static string GenBarCode128(string BarCode)
            {
                try
                {
                    Regex maRegexpChaine = new Regex("^[a-zA-Z0-9 ]+$");
                    Regex maRegexpNumber = new Regex("^[0-9]+$");
                    int Cheksum = 0;
                    string resultstring = "";                if (maRegexpNumber.IsMatch(BarCode) && ((BarCode.Length % 2) == 0))
                    {
                        resultstring = ((char)8250).ToString();
                        string incoming = BarCode;
                        Byte[] MesCode = new byte[incoming.Length / 2];
                        for (int j = 0; j < MesCode.Length; j++)
                        {
                            MesCode[j] = Convert.ToByte(incoming.Substring(j * 2, 2));
                        }                    Cheksum = 105;                    for (int i = 0; i < MesCode.Length; i++)
                        {
                            Cheksum += MesCode[i] * (i + 1);
                            switch (MesCode[i])
                            {
                                case 95: resultstring = resultstring + ((char)8216); break;
                                case 96: resultstring = resultstring + ((char)8217); break;
                                case 97: resultstring = resultstring + ((char)8220); break;
                                case 98: resultstring = resultstring + ((char)8221); break;
                                case 99: resultstring = resultstring + ((char)8226); break;
                                case 00: resultstring = resultstring + ((char)8364); break;
                                default: resultstring = resultstring + (char)(MesCode[i] + 32); break;
                            }
                        }
                    }
                    else if (maRegexpChaine.IsMatch(BarCode))
                    {
                        resultstring = ((char)353).ToString() + BarCode;
                        Byte[] MesCode = Encoding.ASCII.GetBytes(resultstring);
                        Cheksum = 104;
                        for (int i = 1; i < MesCode.Length; i++)
                        {
                            Cheksum += (MesCode[i] - 32) * (i);
                        }
                        resultstring = resultstring.Replace(' ', ((char)8364));
                    }                Cheksum = Cheksum % 103;                switch (Cheksum)
                    {
                        case 95: resultstring = resultstring + ((char)8216); break;
                        case 96: resultstring = resultstring + ((char)8217); break;
                        case 97: resultstring = resultstring + ((char)8220); break;
                        case 98: resultstring = resultstring + ((char)8221); break;
                        case 99: resultstring = resultstring + ((char)8226); break;
                        case 00: resultstring = resultstring + ((char)8364); break;
                        case 100: resultstring = resultstring + ((char)8211); break;
                        case 101: resultstring = resultstring + ((char)8212); break;
                        case 102: resultstring = resultstring + ((char)732); break;
                        default:
                            resultstring = resultstring + (char)(Cheksum + 32); break;
                    }
                    return (resultstring + ((char)339));
                }
                catch (System.Exception e)
                {
                    throw e;
                }
            }
      

  5.   

    在网找个条码控件吧,参照如下:
    http://www.cnblogs.com/liucfy/archive/2009/07/19/1526676.html
      

  6.   

    这个问题简单,由打码专业户来也,我问你答
    1.条码是一维的还是几唯的?
    2.使用什么牌子的打码机,Zebra,Marken。
    3.项目的目标是面向业务系统还是硬件系统
      现在的硬件商简直奸诈,硬件软件都要做。现代物联网领域质量追溯平台使用条形码技术普遍又广泛。我这有成套的打码软件,可以私下联系。
    最后,我要是畜生,你他妈畜生不如!
      

  7.   

    谢谢大家支持。只是还没找到答案。为了妹妹的终生幸福,现在把图加上来。希望妹妹能找到她自己的真相。
    我用code128 B字符集生成的条码图如下:
    http://my.csdn.net/my/album/detail/1148585用第三方软件生成的图如下:
    http://my.csdn.net/my/album/detail/1148586问题:显然他用的不是code128 A,B,C中的任何一个字符集。网上查阅说用的code128 auto,不知道这个怎么实现的。求算法
      

  8.   

    谢谢大家支持。只是还没找到答案。为了妹妹的终生幸福,现在把图加上来。希望妹妹能找到她自己的真相。
    我用code128 B字符集生成的条码图如下:用第三方软件生成的图如下:问题:显然他用的不是code128 A,B,C中的任何一个字符集。网上查阅说用的code128 auto,不知道这个怎么实现的。求算法
      

  9.   

    图片错了,重发下。
    我用code128 B字符集生成的条码图如下:用第三方软件生成的图如下:
    问题:显然他用的不是code128 A,B,C中的任何一个字符集。网上查阅说用的code128 auto,不知道这个怎么实现的。求算法
      

  10.   

    看在你妹妹的面子上,给你一个很好用的库:Barcode Image Generation Library
    http://www.codeproject.com/Articles/20823/Barcode-Image-Generation-Library这个我在实际项目中用过。很好用。如果你在使用中遇到问题,我可以进行技术支持不是为了娶你妹子!我有家室了,我们家夫人不会批准这件事的...
    只是为了不让你的大家闺秀妹妹落入众狼之手... 
      

  11.   


    首先要区别code128三种形式的区别,code 128A不能打印小写的字母,code 128B是默认的,128个ASCII都可以打印,code 128C只能打印数字,A,B的长度与C不一样长,code 128码总长度的计算公式为:
    L=(11C+35)X(字母数字)
    L=(5.5C+35)X(仅打印数字使用code 128c)L=code128条形码的宽度(不包括静止区)
    C=数据字符,代码字符和转移字符的数量
    X=X-尺寸(也就是每个条的尺寸)
    上面的单位都为英寸code 128 auto应该是打印内容中出现了都是数字就自动使用code 128C,其他的默认使用code 128B,具体也不清楚,要自己试一下各种情况,bartender中可以指定打印内容数字用code 128C,字母用Code 128B,使用shift转义。