【问题标题】:C# Created Barcodes Scanning Different Values Than Those EncodedC# 创建的条形码扫描与编码不同的值
【发布时间】:2018-10-29 15:12:01
【问题描述】:

我正在开发一个创建和显示 UPCA 条形码的 C# 程序(使用 NuGet 包 BarCodeLib)。这些条形码似乎工作得很好,至少在您扫描它们之前。当它们被扫描时,我看到扫描的数字比编码值多或少 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 - 扫描正常

48990 - 扫描到 48996

【问题讨论】:

  • 没有看到任何代码,这将是一个疯狂的猜测,但是当你让一些代码不恰当地被视为例如,这种事情很容易发生。处理过程中某个时间点的浮点数。
  • 没有浮点数 - 我已经验证 100% 正确的数字被发送到库中。我可以提供任何所需的代码,但我不知道出于这个原因有什么帮助。 -- 在没有任何帮助的情况下,我一直在谷歌搜索,我希望能在此线程关闭之前提供一些建设性的反馈(它似乎正在做......)
  • 因为没有代码,这甚至不是一个编程问题。您提出的问题只是关于影响可读性的条形码尺寸。我们甚至不知道您是在纸上打印这些东西,还是试图从屏幕上扫描它们。
  • Could this be an image size issue? 不太可能,因为条形码应该有线条来指示开始和结束以及校验和,以便很难获得错误读数。
  • 我认为可能发生的情况是您将零填充到 12 位,并且库正在使用第一个(或最后一个)11 位并自动生成最终校验和数字。尝试将零填充到 11 位然后扫描。

标签: c# barcode


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 2012-08-08
    • 1970-01-01
    • 1970-01-01
    • 2012-03-13
    • 2016-10-29
    • 1970-01-01
    • 2016-09-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多