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

C# Created Barcodes Scanning Different Values Than Those Encoded

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

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 - 扫描正常

48990 - 扫描到 48996

图书馆正在做的是更正您的 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