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;
}
このテーブルを使用して、私はすでに基数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またはパイプの数はどちらも可変であり、1に向かう傾向があります。このアルゴリズムを減らして、「結果文字列」になるまでに平均して最小量の文字を含めることができるようにしたいと考えています。
注:結果の文字列は、標準のQRCode仕様とリーダーに準拠するためにデータでエンコードしたバイナリ文字列のASCII表現にすぎません。