C#以图形方式输出Code128C条形码

图形方式输出Code128C条形码

最近的项目牵涉到一维条码打印的问题。条码的选型上倒没什么,因为要求短且仅包含数字,所以决定选用Code128C。在国外的网站上找了点资料研究了下,终于大致搞懂了Code128C的原理和实现方法。

Code128C只能编码长度是偶数的数字串,这是它的前提之一。说起来编码规则很简单,00 - 99 这100个数字每个数字都预先规定好一个条码,然后把原始的待编码字符串两位两位的读取,每个两位都从上面提到的码表中找到对应的条码,追加。

举个例子,我们要打印12345678的Code128c条码。首先打印Code128c的条码头,bbsbssbbbss。(b代表1个单位宽度的竖线,s代表1个单位宽度的空白)

然后对12345678编码。我们把它看成 12 34 56 78。12对应的条码是bsbbssbbbss,34对应的条码是bsssbsbbsss,56对应的条码是bbbsssbsbbs,78对应的条码是bbssssbsbss。按次序堆积起来就是了。

现在应该很好理解为什么C型128码可以打印的比较短,就是因为输出的信息被压缩到原来的一半。

接下来就是一个自校验码。计算方法是:(105 + (1 * 12 + 2 * 34 + 3 * 56 + 4 *78)) % 103 = 47。再追加47对应的条码bsssbbbsbbs。

这里有个注意点是,第n组数字要乘以n。比如,12是第一组所以乘1,而34是第二组所以乘2。

最后就是终结符,固定为bbsssbbbsbsbb,也追加。

如此得出一个可以代表条形码的字符串:
bbsbssbbbss bsbbssbbbss bsssbsbbsss bbbsssbsbbs bbssssbsbss bsssbbbsbbs bbsssbbbsbsbb (实际上没空格)

也就是 StartC 12 34 56 78 47 Stop (实际上没空格)

有了这些,完全可以写一个算法以图片形式输出条形码了!


        ///


        /// 生成条码
        ///

        /// 条码模式字符串
        /// 生成的条码高度
        /// 条码图形
        public Bitmap KiCode128C(string BarString,int Height)
        {
            Bitmap b = new Bitmap(BarString.Length,Height,PixelFormat.Format24bppRgb);

            try
            {

                char[] cs = BarString.ToCharArray();

                for (int i = 0; i < cs.Length; i++)
                {
                    for (int j = 0; j < Height; j++)
                    {
                        if (cs[i] == 'b')
                        {
                            b.SetPixel(i, j, Color.Black);
                        }
                        else
                        {
                            b.SetPixel(i, j, Color.White);
                        }
                    }
                }

                return b;
            }
            catch
            {
                return null;
            }
        }

你可能感兴趣的:(C#,-,其他)