Code128字体不可识别处理

C39字体"条"过细(前后带*),打印精度不够或磨损,就不易识别,转而使用Code128.

但直接用Code128字体做出的条形码扫描设备识别不了.后查阅才发现Code128字体与Code128条码并不是一回事.

现记录转换方法于下:

 class Code128ex
    {
        /// <summary>
        /// 转换成Code128A
        /// </summary>
        public static string ExCode128A(string barcode)
        {
            string result = "";
            int checksum = 103;
            int j = 1;
            for (int ii = 0; ii < barcode.Length; ii++)
            {
                if (barcode[ii] >= 32)
                {
                    checksum += (barcode[ii] - 32) * (ii + 1);
                }
                else
                {
                    checksum += (barcode[ii] + 64) * (ii + 1);
                }
            }
            checksum = checksum % 103;
            if (checksum < 95)
            {
                checksum += 32;
            }
            else
            {
                checksum += 100;
            }
            result = Convert.ToChar(203) + barcode.ToString() + Convert.ToChar(checksum) + Convert.ToChar(206);
            return result;
        }
        /// <summary>
        /// 转换成Code128B
        /// </summary>
        public static string ExCode128B(string barcode)
        {
            string result = "";
            int checksum = 104;
            int j = 1;
            for (int ii = 0; ii < barcode.Length; ii++)
            {
                if (barcode[ii] >= 32)
                {
                    checksum += (barcode[ii] - 32) * (ii + 1);
                }
                else
                {
                    checksum += (barcode[ii] + 64) * (ii + 1);
                }
            }
            checksum = checksum % 103;
            if (checksum < 95)
            {
                checksum += 32;
            }
            else
            {
                checksum += 100;
            }
            result = Convert.ToChar(204) + barcode.ToString() + Convert.ToChar(checksum) + Convert.ToChar(206);
            return result;
        }
        /// <summary>
        /// 转换成Code128C
        /// </summary>
        public static string ExCode128C(string barcode)
        {
            string result = "";
            int checksum = 105;
            int j = 1;
            for (int ii = 0; ii < barcode.Length; ii++)
            {
                if (ii % 2 == 0)
                {
                    checksum += Convert.ToInt32(barcode.Substring(ii, 2)) * j;
                    if (Convert.ToInt32(barcode.Substring(ii, 2)) < 95)
                    {
                        result += Convert.ToChar(Convert.ToInt32(barcode.Substring(ii, 2)) + 32);
                    }
                    else
                    {
                        result += Convert.ToChar(Convert.ToInt32(barcode.Substring(ii, 2)) + 100);
                    }
                    j++;
                }
                ii++;
            }
            checksum = checksum % 103;
            if (checksum < 95)
            {
                checksum += 32;
            }
            else
            {
                checksum += 100;
            }
            result = Convert.ToChar(205) + result + Convert.ToChar(checksum) + Convert.ToChar(206);
            return result;
        }
    }
View Code

 

另:
如何看懂Code128条形码

 

posted @ 2019-06-05 15:26  ShawSir  阅读(3247)  评论(0编辑  收藏  举报