Я генерирую QR-коды, используя строки, которые очень легко могут быть длиннее, чем QRCode. Я ищу предложения по алгоритмам для кодирования этих строк как можно меньшего размера или доказательство того, что строка не может быть уменьшена в дальнейшем.
Поскольку я кодирую ряд элементов, я могу представить их с помощью идентификаторов и очертить их с помощью каналов, как показано в следующей таблице поиска:
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
УТОЧНЕНИЕ: цифровая длина идентификатора и количество идентификаторов или каналов являются переменными с тенденцией к единице. Я пытаюсь сократить этот алгоритм, чтобы он содержал в среднем наименьшее количество символов к моменту, когда он является «строкой результата».
ПРИМЕЧАНИЕ. Результирующая строка является только представлением ascii двоичной строки, которую я закодировал с данными для соответствия стандартным спецификациям QRCode и считывателям.