我正在使用长度很容易比 QRCode 可以处理的字符串生成 QR 码。我正在寻找有关尽可能小地编码这些字符串的算法的建议,或者证明字符串不能进一步缩小的证据。
由于我正在对一系列项目进行编码,因此我可以使用 ID 来表示它们并使用管道来描绘它们,如下面的查找表所示:
function encodeLookUp(character){
switch(character){
case '0': return '0000';
case '1': return '0001';
case '2': return '0010';
case '3': return '0011';
case '4': return '0100';
case '5': return '0101';
case '6': return '0110';
case '7': return '0111';
case '8': return '1000';
case '9': return '1001';
case '|': return '1010';
case ':': return '1011';
}
return false;
}
使用这个表,我已经在进行 base 16 编码,因此原始字符串中的每个 32 个 ascii 字符都成为新字符串中的半个字符(实际上将长度减半)。
Starting String: 01251548|4654654:4465464 // ID1 | ID2 : ID3 demonstrates both pipes.
Bit String: 000000010010010100010101010010001010010001100101010001100101010010110100010001100101010001100100
Result String: %H¤eFT´FTd // Half the length of the starting string.
然后这个新的ASCII码,根据QRCode规范进行翻译。
编辑:当前可编码的字符数量最多:384
澄清:ID 编号长度以及 ID 或管道的数量都是可变的,并且趋向于一个。我希望能够减少此算法,使其在“结果字符串”时平均包含最少数量的字符。
注意:结果字符串只是我用数据编码的二进制字符串的 ascii 表示,以符合标准 QRCode 规范和阅读器。