使用36个字符的字母0-9和A-Z将GUID转换为较短的字符串

时间:2011-01-18 11:44:50

标签: guid hex base

我有应用程序,我使用打印的qr代码来识别带有数据库记录的真实生活对象。

数据库使用GUID作为主键(这是不可协商的,因为它是偶尔连接的系统)。

为了使qr代码尽可能小,我试图将我的32个字符的十六进制GUID转换为一个较短的字符串,该字符串利用了字母数字qr代码中可用的36个字符的字母(0-9和AZ)。 / p>

整个基础转换都在我的脑海中,所以非常感谢任何帮助。

4 个答案:

答案 0 :(得分:2)

您可以将GUID存储为字节数组并将其转换为Base32

另见related question

答案 1 :(得分:1)

我将它转换为Base64,比Base32小20%。可以随时使用要转换为base64的库或示例代码。 base64的唯一问题显然是字母'a'和'A'根据base64而不同,但不一定是你的DB,所以如果你选择Base64而不是Base32,那么你必须检查你的数据库表格整理是正确设置。

答案 2 :(得分:0)

全局唯一标识符(GUID)的值可以表示为32个字符的十六进制字符串,但通常存储为128位(16字节)整数。

我怀疑可以存储这种128位值的最小QR码是指定“二进制/字节编码”(可以存储任何8位字节) 并直接存储16个字节。 编码每位1个像素,每个字节8个像素(加上标准开销位)。 我很确定所有其他有效的QR编码每位至少使用 1个像素,并且具有相同的标准开销。 因此,您不会使用任何类型的Base64或Base45或Base36或Base32转换获得较小的QR码。

我见过的大多数编码URL的QR码都使用相同的“二进制/字节编码”来支持小写字母。 根据我的经验,使用“字母数字编码”的QR码不太常见 - 当用于编码URL时,它们会解码为全大写的URL(因为它们只能存储45个符号0-9,A-Z [仅大写] ],space,$,%,*,+, - ,。,/,:)。 在许多情况下,“每2个字符11位”非常聪明,但在编码GUID时它并没有真正帮助。

您是否见过http://www.younoodle.com/startups/barcode_guidWikipedia:spime

答案 3 :(得分:0)

将GUID作为16字节整数存储在QRcode中是获取小的QRcode的最佳方法,如果您发现它实际上仍然太大,请考虑呈现 Micro QR代码。 [https://www.qrcode.com/en/codes/microqr.html] (无法进一步压缩QRcode,因为它们已经接近最大熵)