从扫描的 GS1 类型条形码中提取信息

2024-03-01

我还想从扫描的 GS1 条形码消息中确定产品信息,例如描述、制造商和有效期。

我怎样才能做到这一点?


获取以 GS1 应用标识符标准格式存储数据的 GS1 类型条形码所表示的信息涉及两个过程。

  1. 萃取通过扫描符号获得的 GS1 结构数据中包含的数据字段(称为应用标识符)。这始终包含称为 GTIN-14 的商品的唯一标识符,以及may包括补充信息,例如有效期、批号等。 该过程可以由独立的应用程序执行。
  2. Lookup在数据库中提取提取的 GTIN,无论是在您的应用程序本地还是通过某些公共 API,以提供原产国、制造商以及可能的商品描述的文本表示。 为了全面执行此过程,应用程序需要访问外部资源。

背景:GS1 应用标识符标准格式组成

GS1 格式的数据由应用程序标识符 (AI) 和值的串联列表组成,以代表 GTIN 的 AI (01) 开头。

例如,数据“(01)95012345678903(10)000123(17)150801”代表以下信息:

GTIN:             95012345678903
BATCH/LOT:        000123
USE BY OR EXPIRY: 1st August 2015

第 3 节:GS1 应用标识符定义 of the GS1 一般规格 http://www.gs1.org/docs/barcodes/GS1_General_Specifications.pdf提供了每个应用程序标识符的含义,重要的是还说明了 AI 值是否按照定义可变长度 or 固定长度在这种情况下,提供了强制长度。

GS1 条形码使用特殊的非数据字符 (FNC1) 来指示数据符合 GS1 应用标识符标准格式,并从下一个 AI 中定界可变长度数据字段的末尾。例如,上述数据可以用 Code 128 符号编码为{FNC1}019501234567890310000123{FNC1}17150801生成以下 GS1-128 符号:

When this symbol is read by a barcode scanner it is decoded as follows[†]:

019501234567890310000123{GS}17150801

请注意,初始 FNC1 非数据字符已被丢弃,并且用于可变长度 AI 分隔符角色的 FNC1 已由 GS 字符(ASCII 值 29)表示。

萃取(以及可选的验证)

GTIN 和任何补充信息的提取可以直接由您的应用程序执行。

要从条码扫描仪解码的 GS1 符号数据中提取原始应用程序标识符数据,需要您的应用程序包含一个数据结构,我们将其称为AI-TABLE将 AI 模式映射到从上面链接的 GS1 通用规范部分提供的数据导出的值的长度:

AI     | N (value length)
-------------------------
(00)   | 18
(01)   | 14
(10)   | variable
(17)   | 6
(240)  | variable
(310n) | 6
(37)   | variable
...

有了这个功能,您就可以从扫描的条形码数据中提取 AI 值,如下所示:

while more data:
    AI,N = Entry from AI-TABLE matching a prefix of the data, otherwise FAIL.

    if N is fixed-length:
        VALUE = next N characters
    else N is variable length:
        VALUE = characters until "GS" or end of data
     
    emit: (AI) VALUE

在实践中,您可以选择在您的产品中包含更多通用规范中的数据。AI-TABLE允许您的应用程序对每个执行增强验证VALUE的类型和长度。然而,上面的内容足以提取给定的数据,例如表示您正在查找的到期日期的 AI (17)。

2022 年 8 月更新:GS1 最近发布了 GS1 语法引擎,这是一个 C 库,是处理 GS1 应用程序标识符语法扫描数据的参考实现:https://github.com/gs1/gs1-syntax-engine https://github.com/gs1/gs1-syntax-engine

Lookup

要获取您感兴趣的其余数据(未直接编码在条形码中),例如商品名称和制造商详细信息,需要您使用外部资源(例如本地产品数据库或公共数据库之一)查找提取的 GTIN可用的 UPC 数据库 API。

GTIN 本身包含原产国(实际上它代表制造商注册的国家 GS1 成员组织,因此不完全是原产国)、制造商标识符 – 这些一起被称为 GS1 前缀,长度可变,并且由 GS1 分配 - 其余数字代表由制造商自由分配的产品代码。

给定 GTIN 后,某些 UPC 数据库将仅提供与 GS1 前缀相关的详细信息,例如 GS1 成员组织和制造商的文本表示。其他人试图维护常见商品的单独 GTIN 分配记录,但由于没有强制注册实时 GTIN 分配,因此该数据总是有些不完整且过时。

的答案这个问题 https://opendata.stackexchange.com/q/562提供一些免费产品信息平台的示例。

[†] In fact you might see ]C1019501234567890310000123{GS}17150801 in which case the leading symbology identifier for GS1-128 ]C1 can be discarded.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

从扫描的 GS1 类型条形码中提取信息 的相关文章

  • 如何从 Visual Studio (2003) 中运行我的 Windows CE 项目?

    我正在开发一个遗留应用程序 需要在 VS 2003 中继续 但是 我无法有效地调试它 因为当我尝试运行它时 我收到以下对话框 Deploy 选择要定位的设备 如果所选设备上尚未安装 NET Compact Framework 它将与您的应用
  • Android 使用 Zxing 生成二维码和条形码

    使用zxing生成二维码的代码是 它需要字符串数据和imageview这很好用 private void generateQRCode general String data ImageView img throws WriterExcep
  • 从 .NET 应用程序中读取和解码存储在图像或 PDF 文件中的 PDF-417 条形码

    我正在寻找一个能够解码来自PDF 417条码嵌入图像文件或 PDF 中 此时 我只能找到一个Java版本 and a C版 理想情况下 这个库应该是开源且免费的 但我怀疑这样的解码器是否存在 我愿意尝试您可能已经使用过的现有产品的演示 这让
  • Swift 4 上的条形码

    我正在尝试将 mi 应用程序升级到 swift 4 但条形码读取器无法工作 我已经隔离了条形码读取器代码 但仍然无法工作 相机可以工作 但无法检测到条形码 该代码在 swift 3 iOS 10 上运行得很好 这是完整的代码 import
  • 使用 pyzbar 读取 python 中的模糊条形码

    我一直在尝试使用 Python 和 pyzbar 从图像中读取一些条形码 不幸的是 这些图像是在几个限制下从几英尺远的地方拍摄的 我无法将相机移动或变焦得更近 使用任何现有的 Python 库是否可以读取如此模糊的条形码 到目前为止 我已经
  • 使用zxing进行QR码编码和解码

    好吧 所以我要打消这里有人以前使用过 zxing 的可能性 我正在开发一个Java应用程序 它需要做的一件事是将数据的字节数组编码为QR码 然后稍后对其进行解码 这是我的编码器的示例 byte b 0x48 0x45 0x4C 0x4C 0
  • 移动网络应用程序上的 Flutter 条码扫描仪

    我有一个在 Android 上运行良好的条形码扫描仪 但我很难找到支持网络应用程序的插件 这是我发现的最接近的一个 似乎有所进展 https pub dev packages ai barcode https pub dev package
  • Android 上的 ZXing PDF417

    有人能读到吗PDF417 http en wikipedia org wiki PDF417条形码与使用ZXing http code google com p zxing Android 操作系统上的库 他们支持这一点 根据他们的页面 它
  • 如何将动态生成的图像(碰巧是条形码)注入到 PDF 文档中(如果重要的话,我在 Rails 中)?

    我知道pdf 压模 https github com paulschreiber pdf stamper 但我现在试图避免将所有内容切换到 jruby 我只需要将在 Rails 应用程序中生成的图像 PDF417 条形码 标记 到 PDF
  • 为什么无法将任何字体另存为图像? (但要在我的Windows窗体上显示它)

    我有点困惑 因为我可以在 Windows 窗体上显示每种字体的每个字符串 但作为图像并不总是可能的 也许我的代码有问题 但让我告诉你我正在尝试什么 一开始我有这个 Label l new Label l Text CSharp this F
  • 如何使用带有校验位的 ZPL 创建 GS1-128 条形码

    我需要使用 ZPL 生成 GS1 128 条形码 它需要包含一个校验位 我似乎没有得到校验位 Here is my code BCN 088 Y Y Y D FD 00 00123456000057763 FS The first Y is
  • AVCaptureSession条码扫描

    我目前正在与AVCaptureSession and AVCaptureMetadataOutput 它工作得很好 但我只想知道如何指示仅在特定区域扫描和分析元数据对象AVCaptureVideoPreviewLayer 这是我项目中的代码
  • 如何使用zxing条码扫描库解码EAN128条码

    我正在尝试使用 zxing 条码扫描库读取 EAN128 条码 我在 Xamarin 共享项目中使用它 如下所示 private async void OnButtonForBarcodeReadPressed object sender
  • 如何从图像中读取条形码[关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 我正在寻找一个图书馆 技术或关于如何阅读的建议EAN 13 http en wikipedia org wiki EAN 13图像中的条形
  • 使用谷歌移动视觉 API 检测第一个条形码并将数据发送到另一个活动

    您好 我在 github 上检查了来自 google 的条形码阅读器示例 我试图让条形码检测器检测第一个条形码 只有一个 当它检测到时 它将解码的条形码发送到另一个活动 Mabye 我错了 但我需要输入这段代码 BarcodeGraphic
  • Java 中的条形码图像生成器

    如何用 Java 创建条形码图像 我需要一些可以让我输入数字并生成相应条形码图像的东西 是否有可用于此类任务的免费库 iText http www lowagie com iText 是一个很棒的 Java PDF 库 他们还有一个用于创建
  • 如何从 Ruby on Rails 应用程序打印(条形码)标签?

    我在 RoR 中开发的第一个应用程序是针对我们库存中使用的一些 Kiosk 触摸屏 PC 当库存工人拿起一些材料时 他在表格中输入数量 现在我想在我们的 Zebra 打印机上打印一个标签 其中包含 客户名称 材料描述 数量和条形码 我如何从
  • C#:生成 Code 128 条形码(条/空格的宽度)

    所以我继承了这段代码 或者我应该说 有人开发了这段代码并继续前进 现在我们遇到了问题 我正在调查它 我们正在生成 c128 条形码 在对它们进行认证后 他们注意到了一个我无法解决的问题 条 空的宽度为 10 5 密耳 可接受的范围为 15
  • 使用 ZXing 和 ZBar 的 GS1 应用程序标识符数据中缺少 AIM 符号标识符

    我正在尝试验证使用 ZXing 或 ZBar 扫描的 GS1 条形码 这GS1 一般规格 http www gs1 org docs gsmp barcodes GS1 General Specifications pdf7 8 中说 GS
  • Zxing库无法解析

    我正在使用 zxing 库开发应用程序 我导入了zxing项目到我的工作场所 当我导入时遇到了一些问题 通过编译项目java 1 7 我做到了 CameraConfigurationUtils失踪 我从library source Reso

随机推荐

  • malloc(0) 有什么意义?

    我刚看到这个code https github com mxcl scrobsub blob 2ad2f6131e5900d4c62d8c5bcdb15c069f17e3bd scrobsub c L94 artist char mallo
  • 类 PhpStorm_Codeception_ReportPrinter 不存在

    我尝试在 PhpStorm 中运行 Codeception 功能测试 但不断收到一条错误 提示缺少类 我在互联网上搜索过 除了一篇文章之外 没有发现任何可以解决这个问题的方法https intellij support jetbrains
  • 无法加载文件或程序集“System.Net.Http”

    在我的构建输出的诊断视图中显示了此冲突 System Net Http Version 4 0 0 0 Culture neutral PublicKeyToken b03f5f7f11d50a3a 和 System Net Http Ve
  • 使用 CSS Grid 时如何使内容居中并使背景覆盖整列?

    当我添加这段代码时 place items center 我的元素居中 但只有文本应用了背景颜色 当我删除此代码时 place items center 背景颜色覆盖整个列 但文本不再居中 main display grid grid te
  • 如何找出浏览器实际使用的网站图标

    我有一个新网站 其中包含使用源文件自动生成的一组图标图像真实网站图标生成器 http realfavicongenerator net 并且有 9 个苹果图标 1 Android 图标 3 个命名图标 1 Safari 固定SVG 1 js
  • 在 Wayland 和 X11 上模拟鼠标和键盘输入

    我正在对用 C 编写的 OpenGL 应用程序进行小型验收测试 到目前为止 我只能截取屏幕截图 还没有找到在 Wayland 和 X11 上模拟鼠标和键盘输入的方法 关于如何在 Wayland X11 中操作特定窗口的事件流有什么建议吗 用
  • *这*真的是从 Java 代码启动第二个 JVM 的最佳方式吗?

    这是我的后续自己之前的问题 https stackoverflow com questions 1218790 我有点不好意思问这个 但是无论如何 如何以独立于系统的方式从独立的 Java 程序启动第二个 JVM 并且无需依赖诸如 JAVA
  • Core Data 属性更改为 nil(与 ARC 相关?)

    我有一些核心数据功能 在最近进行一些 看似不相关的 更改之前一直运行良好 现在我遇到问题 属于特定 NSManagedObject 子类实例的所有属性突然返回 nil 假设我的 NSManagedObject 子类名为 Foo 它只有一个名
  • Android Volley,使缓存无效并每 (x) 分钟发出新请求

    我找不到这个问题的更新答案 我正在使用 Volley 向 Web API 发送请求 它返回 JSON 我正在使用如下所示的缓存功能 但我想确保列表视图经常刷新 现在假设为 30 分钟 如何使该给定 URL 的缓存无效 以便我的应用程序自动处
  • 如何将背景图像放置在距其容器右侧绝对距离的位置?

    我可以使用以下命令将一个小背景图像 图标放置在距其容器左中心 4 像素的位置 background url no repeat 4px 50 我怎样才能把它定位到距离 4 个像素的地方right 根据您的情况以及您想要支持的浏览器 此方法有
  • 链接在 UI 可选内部不起作用

    这些是来自 JQuery 网站的代码 我重写了其中的内容
  • 加拿大邮政编码功能的高效正则表达式

    var regex A Za z d A Za z d A Za z d var match regex exec value if match if value indexOf 1 value indexOf 1 value length
  • 按多列分组 - LINQ

    我见过按列乘法分组的例子 但是对于类 我正在尝试为 EnumerableDataRowList 执行此操作 但我得到 无效的匿名类型成员声明符 EnumerableDataRowList
  • 如何绘制箭头(在 Android 中)?

    我对 Android 相当陌生 一直在尝试 Canvas 我正在尝试绘制箭头 但我只是运气好地绘制了轴 所有箭头都不起作用 我搜索了一下 找到了一个Java示例 但是Android没有GeneralPath or AffineTransfo
  • 为什么在属性声明中只使用setter?

    int MyProperty set 在财产上仅使用 setter 的想法是什么 如果我们为一个属性设置某个值 我猜它很可能在某个时刻读取该值 只写属性在基类库中很少见 但是XmlReaderSettings XmlResolver htt
  • 主机名与证书主题不匹配

    当我尝试构建我的 android 项目时 我收到此 gradle 错误 我正在使用 cwac cam 库 错误 主机名 repo commonsware com s3 amazonaws com 与对等方提供的证书主题不匹配 CN s3 a
  • 当我们开始旋转设备时以及旋转完成后将调用什么方法

    我想以编程方式检测 ipad 上的旋转过程 在这种情况下 我想在旋转开始时将布尔值设置为 yes 并在旋转结束后将其设置为 false 是否有任何方法在旋转开始和旋转结束时调用 来自苹果文档 在用户界面开始旋转之前发送到视图控制器 void
  • Flex 项目未包装在列方向容器中

    我想用flex direction column对于特定的布局 我通常使用标准flex direction row 所以我在使用时遇到了一些问题column 我不太知道如何控制它 并且在谷歌上没有找到任何有用的东西 我有一个常规的UL列表
  • 从 picasso 获取图像 uri?

    我有一个相当大的图像 URL 列表 我用它来加载ViewPager使用毕加索 我需要能够通过意图为这些图像提供共享功能 最终通过共享操作提供者 http developer android com guide topics ui actio
  • 从扫描的 GS1 类型条形码中提取信息

    我还想从扫描的 GS1 条形码消息中确定产品信息 例如描述 制造商和有效期 我怎样才能做到这一点 获取以 GS1 应用标识符标准格式存储数据的 GS1 类型条形码所表示的信息涉及两个过程 萃取通过扫描符号获得的 GS1 结构数据中包含的数据