Character encoding 缩短GUID

Character encoding 缩短GUID,character-encoding,base64,guid,Character Encoding,Base64,Guid,我们为文档生成一个GUID,并且需要将GUID包含在一个条形码(类型29 2D)中,该条形码是C40编码的,并且具有以下限制 最大长度可以是25个字符 只能使用大写字母数字字符,不能使用特殊字符 我曾想过转换为Base64,但它使用特殊字符。您可以使用编码 假设UUID只有16个字节,它应该适合25个base36字符 为了演示,下面是一个小JavaScript片段,它从(123e4567-e89b-12d3-a456-426614174000)中获取示例UUID并将其转换为base36: co

我们为文档生成一个GUID,并且需要将GUID包含在一个条形码(类型29 2D)中,该条形码是C40编码的,并且具有以下限制

最大长度可以是25个字符 只能使用大写字母数字字符,不能使用特殊字符

我曾想过转换为Base64,但它使用特殊字符。

您可以使用编码

假设UUID只有16个字节,它应该适合25个base36字符

为了演示,下面是一个小JavaScript片段,它从(
123e4567-e89b-12d3-a456-426614174000
)中获取示例UUID并将其转换为base36:

const guid=BigInt('0x123e4567e89b12d3a456426614174000');
const encoded=guid.toString(36.toUpperCase();
console.log(“编码:”+编码);//12VQJRNXK8WHV3I8QI6QGRLZ4

console.log(“长度:”+encoded.Length);//25
我想我遗漏了一个步骤,如果我只是将GUID转换为Base32(即使没有连字符),它在Base32中会变长,尽管有正确的字符集。2783a4b160c546338fcaca4314a98558变为68VKGCCV16HH32DHGCCUK8DHK6CW6CRV1CDGK8CTH6HGKJE1N6MW0I尝试使用上面的代码,但仍然得到了该值的25个字符字符串:
2C7S5SJ0B8N2JME1Y00AEPPW8
。您确定要将UUID解释为十六进制值而不是字符串吗?我想这是我的问题,我没有生成GUID,所以我确实将其作为字符串接收,尽管我可以将其解析为GUID。如果我在我的测试应用程序中生成一个GUID,它会在我将GUID转换为字节数组然后转换为Base32的地方工作,但会给我26个字符Base32?或者base36?您应该能够在base36中表示所有可能的值。这是一个128位的值,它给出
2^128=3.402823669×10³⁸组合。25个基本36个字符允许
36^25=8.0828×10³⁸组合,所以加倍。