最有效的条形码来存储GUID

Mat*_*ker 16 guid barcode

我有一个系统,我正在努力要求用户登录系统,客户想要使用条形码扫描仪和卡来降低价格.(是的用户名和密码更便宜,但她想要一种卡式解决方案,所以她得到一个.)

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

是否有最佳实践或最有效的方法将GUID存储在条形码中?我已经假设,因为数据的长度和深度都是一致的,所以会有一个标准,但我找不到它.很容易生成我自己的 - 控制字符或者两端之间的二进制数据,但是想要标准读者知道如何解释的东西.

任何帮助感激不尽.

Ter*_*ton 23

对于使用通用线性条形码(如Code 39和Code 128)的专用数据压缩,没有开放标准.大多数ISO/IEC标准化的二维条形码确实支持称为扩展通道解释(ECI)的专用数据编码机制,它允许您指定数据符合某种应用标准或编码方案,例如ECI 298765用于IPv4地址压缩[*].不幸的是,GUID压缩不在已经注册的那些中,即使它仍然需要在您的应用程序中处理这个,因为缺乏读者支持.

这使得您必须对GUID进行预编码(并随后解码)为一种格式,该格式可以通过一些普遍存在的条形码符号系统进行有效处理.

存储GUID的有效方法是将其转换为40位[†]十进制表示,并使用双密度数值压缩("模式C")将结果存储在Code 128条形码中.

例如,考虑GUID:

cd171f7c-560d-4a62-8d65-16b87419a58c
Run Code Online (Sandbox Code Playgroud)

表示为十六进制数:

0xCD171F7C560D4A628D6516B87419A58C
Run Code Online (Sandbox Code Playgroud)

转换为40位小数:

0272611800569275698104677545117639878028
Run Code Online (Sandbox Code Playgroud)

在Code 128条形码中编码[‡]:

GUID在Code 128中以十进制编码

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

[*]分配的ECI代码的寄存器可从AIM商店免费获得,作为"ECI第3部分:注册".

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