C#创建的条形码扫描的值与编码值不同

时间:2018-10-29 15:12:01

标签: c# barcode

我正在研究一个C#程序,该程序创建并显示UPCA条形码(使用NuGet包BarCodeLib)。在您至少扫描它们之前,这些条形码似乎可以完美工作。扫描它们时,我发现扫描数比编码值最多多3个或少于3个。有时他们是2折,有时是1折,而且很少真正匹配。这可能是图像尺寸问题吗?条形码过高或过宽会导致此问题吗?

public string barcodePath
        {
            get
            {
                try
                {
                    string dir = System.Configuration.ConfigurationManager.AppSettings["BarcodeDirectory"];
                    System.IO.Directory.CreateDirectory(dir);
                    BarcodeLib.Barcode b = new BarcodeLib.Barcode();
                    string oid = recipientId.ToString();
                    char[] array = oid.ToCharArray();
                    int end = 12 - oid.Length;
                    for (int i = 0; i < end; i++)
                    {
                        oid = "0" + oid;
                    }

                    Image img = b.Encode(BarcodeLib.TYPE.UPCA, oid, Color.Black, Color.White, 290, 201); //290, 120
                    string imgPath = dir + @"\" + recipientId + ".jpg";
                    img.Save(imgPath, System.Drawing.Imaging.ImageFormat.Jpeg);
                    return "file:///" + imgPath;
                }
                catch (Exception ex)
                {
                    return "";
                }
            }

这两个条形码是在一个循环中顺序创建的。

48989-扫描正常 48989

48990-扫描至48996 enter image description here

1 个答案:

答案 0 :(得分:2)

图书馆正在纠正12位零填充数字的最后一位。

请参见http://codeproject.com/Articles/20823/Barcode-Image-Generation-Library中的注释“◦现在,每次输入11或12位数字时,都会计算UPC-A校验数字。如果输入12则有不正确的校验数字,然后将其替换为正确的校验位。这可以防止生成无法扫描的条形码。”

“ 00000004898”的正确校验位为9。对于“ 00000004899”,正确的校验位为6。

您可以将数字零填充到11位数字,并允许库添加正确的校验和值-或自己执行-请参见:http://www.makebarcode.com/specs/upc_a.html