首页 > 解决方案 > 如何使用组分隔符解析 GS1 条码?

问题描述

我正在为设备 Zebra MC33 开发应用程序。
我需要根据组解析 GS1_EXP 条码。具有两组的条形码示例:

(01)12345678901234(10)ABCD1234

有 2 个类似的问题,我认为他们没有得到回答。
GS1-128条码解析
GS1条码解析

我只知道 2 种方法如何在我的代码中从扫描仪获取数据:

data.getData();

或者

data.getRawData()

数据来自扫描仪的方法的完整示例,我能够对其进行操作:

 public void onData(ScanDataCollection scanDataCollection) 
{
...
if (scanDataCollection != null && scanDataCollection.getResult() == ScannerResults.SUCCESS)
                {
                    ArrayList<ScanDataCollection.ScanData> scanData = scanDataCollection.getScanData();
                    for (ScanDataCollection.ScanData data : scanData) {
                        // Get the scanned data
                        data.getData();
                    }
                }
...
}

两种方法都返回与人类可见的符号相同的符号。而且我无法检测到作为部分之间分隔符的特殊 FNC1 字符。
有人知道如何正确解析条形码吗?

标签: javaandroidparsingbarcode-scanner

解决方案


FNC1 字符的解释可以/应该直接在扫描仪固件上编程。因此,如果 FCN1 字符放置在条形码中的某个位置,它将被替换为人类可读的字符。通常,FCN1 字符只能由扫描仪读取。

例如,取代码 30:变量计数 n2+n..8:条码中默认包含前两个字符(30),代码的第二部分最多可以占用 8 个字符。假设变量 count 只占用 8 个字符中的 3 个(n2+an3),所以这 3 个字符后面跟着一个 FCN1 字符来“终止”这部分条形码并开始下一个键值组。

看看如何对您的扫描仪进行编程,以将 FCN1 代码替换为人类可读的字符(例如 $)。为此,您必须使用扫描仪自己的编程手册——扫描仪可以通过按特定顺序扫描大量条形码来单独编程。完成此步骤后,扫描仪已正确配置,您将能够像冠军一样解析和解释提示的条形码:)。

我通过将查找表实现为哈希表来做到这一点,因此为特定键找到正确的值非常快。

希望这可以帮助您解决问题。祝你好运!


推荐阅读