1. 程式人生 > >C#以圖形方式輸出Code128C條形碼

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 (實際上沒空格)

有了這些,完全可以寫一個演算法以圖片形式輸出條形碼了!


        /// <summary>
        /// 生成條碼
        /// </summary>
        /// <param name="BarString">條碼模式字串</param>
        /// <param name="Height">生成的條碼高度</param>
        /// <returns>條碼圖形</returns>
        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;
            }
        }