【问题标题】:Most efficient barcode to store a GUID存储 GUID 的最有效条形码
【发布时间】:2015-10-20 04:31:57
【问题描述】:

我目前正在开发一个系统,该系统需要用户登录系统,而客户希望使用条形码扫描仪和卡片来降低价格。 (是的,用户名和密码更便宜,但她想要一种卡片类型的解决方案,所以她得到了一个。)

我的所有数据都使用 GUID 作为关键字段,因此我想将 GUID 直接存储在条形码中的卡片上。虽然它很简单,可以将其编码为 3 of 9,但它并不是最有效地利用空间。

是否有在条形码中存储 GUID 的最佳做法或最有效的方法?我假设由于数据的长度和深度一致,所以会有一个标准,但我找不到它。很容易生成我自己的 - 控制 char 两端,然后是二进制数据,但希望标准读者会知道如何解释。

感谢您的帮助。

【问题讨论】:

  • 有什么理由不能简单地添加另一个将数字条形码映射到 GUID 的表?这样,如果卡被盗用,您可以轻松地重新发行带有映射到相同 GUID 的新编号的条形码,而无需更改大量相关记录。添加到期日期列,您还可以在设定的时间段(例如每年)后停用卡。
  • 嗨伊恩。正在考虑直接存储 GUID,因为它是关键字段并且是聚集索引。碰巧我最终几乎使用了您的解决方案。每个用户都有一个 ID 号,我最终将其编码到条形码中,并在其上创建了一个非聚集索引。你在这里建议的差不多。非常感谢。

标签: barcode guid


【解决方案1】:

对于使用通用线性条码(例如 Code 39 和 Code 128)进行特殊用途数据压缩没有开放标准。大多数 ISO/IEC 标准化二维条码都支持称为扩展通道解释 (ECI) 的特殊用途数据编码机制它允许您指定数据符合某个应用程序标准或编码机制,例如用于 IPv4 地址压缩的 ECI 298765 [*]。不幸的是,GUID 压缩不在已注册的内容中,即使是,您仍然需要在应用程序中处理此问题,因为缺少阅读器支持。

这使您不得不将 GUID 预编码(并随后解码)为一种可以被一些普遍存在的条形码符号系统有效处理的格式。

存储 GUID 的一种有效方法是将其转换为 40 位[†] 十进制表示,并使用双密度数字压缩(“模式C")。

例如,考虑 GUID:

cd171f7c-560d-4a62-8d65-16b87419a58c

以十六进制数表示:

0xCD171F7C560D4A628D6516B87419A58C

转换为 40 位十进制数字:

0272611800569275698104677545117639878028

在 Code 128 条码中编码:

您的应用程序当然需要将此输入识别为十进制编码的 GUID 并反转上述过程,但我怀疑是否存在一种更有效的方法,不需要您将数据转换为不寻常的基数,然后处理扫描时处理 ASCII 控制字符的复杂性。

[*] 已分配 ECI 代码的寄存器可从 AIM 商店以"ECI Part 3: Register" 获得。

[†] 虽然可以将整个 GUID 范围存储在 39 位以内,但 39 位 C 模式代码 128 符号实际上比 40 位符号长。

【讨论】:

  • 嗨特里。感谢您的回复。您的答案几乎是我自己阅读后发现的。我已经习惯了使用这种方法,如果你找不到答案,那么无论如何都要问。没有什么比在 6 个月后发现你使用了错误的方法更重要的了,而其他一切都围绕它展开。我暂时不会将此标记为答案,希望在某个地方可能有答案。如果我在一周左右没有看到任何东西,我会标记它。
猜你喜欢
  • 2013-09-13
  • 2015-12-02
  • 2010-09-08
  • 1970-01-01
  • 2011-12-13
  • 1970-01-01
  • 2021-11-11
  • 1970-01-01
  • 2016-03-11
相关资源
最近更新 更多