Краткий ответ: используемое вами программное обеспечение TCPDF неоптимально. Он генерирует полный 4-битный терминатор, даже если достаточно более короткого. Пожалуйста, свяжитесь с авторами программного обеспечения для устранения проблемы. Вы можете связать их с этой темой.
Поэтому я вырезал из вашего изображения два изображения QR-кода и отправил их в ZXing Decoder Online и KaarPoSoft QR Decode с выводом отладки.
ZXing, первый штрих-код:
Decode Succeeded
Raw text HTTP://SITE-COM/123456789
Raw bytes 20 83 1a a6 5f 9f d5 b4 75 3e 8d 20 48 81 23 db 91 8a 80
Barcode format QR_CODE
Parsed Result Type URI
Parsed Result HTTP://SITE-COM/123456789
ZXing, второй штрих-код:
Decode Succeeded
Raw text HTTP://TXT-CH/AYAWEQYAF4A
Raw bytes 20 cb 1a a6 5f 9f d6 5e ae 82 ca 0f 21 e2 52 18 11 53 94 00 ec 11 ec 11 ec 11 ec 11 ec 11 ec 11 ec 11
Barcode format QR_CODE
Parsed Result Type URI
Parsed Result HTTP://TXT-CH/AYAWEQYAF4A
KaarPoSoft, первый штрих-код:
Debug output
skew_limit=7.21875
skew=0
left=31 right=427 top=27 bottom=423
size=397
matchVersion version=1 finder0=64 finder1=64 finder2=64
matchVersion version=1 timing0=1 timing1=1 alignment=1
matchVersion version=1 format_NW =14 0 format_NESW =14 1 format = 14 ecl = 1 mask = 6
matchVersion version=1 grades(F(V)TAF): 4444->4
findModuleSize matchVersion version=1 grade=4
findModuleSize version=1 grade=4 error_correction_level=1 mask=6
getCodewords mask=6 length=26
getCodewords = 32,131,26,166,95,159,213,180,117,62,141,32,72,129,35,219,145,138,128,62,191,105,157,147,176,164
setBlocks n_blocks_first=1 n_blocks_second=0 n_blocks=1 n_block_words_first=19 n_block_words_second=0 n_block_ec_words=7 total=26
setBlocks block 0 (26): 0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25
RS calculateSyndroms: No errors
correctErrors in = 32,131,26,166,95,159,213,180,117,62,141,32,72,129,35,219,145,138,128,62,191,105,157,147,176,164
correctErrors out = 32,131,26,166,95,159,213,180,117,62,141,32,72,129,35,219,145,138,128
error_grade=4
extractData bytes in (19) = 32,131,26,166,95,159,213,180,117,62,141,32,72,129,35,219,145,138,128
extractData mode = 2
extractAlphanum charcount = 16
extractData mode = 1
extractNumeric charcount = 9
extractData mode = 0
extractData data(25) = 72,84,84,80,58,47,47,83,73,84,69,45,67,79,77,47,49,50,51,52,53,54,55,56,57
KaarPoSoft, второй штрих-код:
Debug output
skew_limit=7.015625
skew=1
left=21 right=417 top=30 bottom=425
size=396.5
findModuleSize matchVersion version=1 grade=0
matchVersion version=2 finder0=64 finder1=64 finder2=64
matchVersion version=2 timing0=1 timing1=1 alignment=1
matchVersion version=2 format_NW =14 0 format_NESW =14 1 format = 14 ecl = 1 mask = 6
matchVersion version=2 grades(F(V)TAF): 4444->4
findModuleSize matchVersion version=2 grade=4
findModuleSize version=2 grade=4 error_correction_level=1 mask=6
getCodewords mask=6 length=44
getCodewords = 32,203,26,166,95,159,214,94,174,130,202,15,33,226,82,24,17,83,148,0,236,17,236,17,236,17,236,17,236,17,236,17,236,17,87,194,99,197,7,184,131,204,163,52
setBlocks n_blocks_first=1 n_blocks_second=0 n_blocks=1 n_block_words_first=34 n_block_words_second=0 n_block_ec_words=10 total=44
setBlocks block 0 (44): 0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43
RS calculateSyndroms: No errors
correctErrors in = 32,203,26,166,95,159,214,94,174,130,202,15,33,226,82,24,17,83,148,0,236,17,236,17,236,17,236,17,236,17,236,17,236,17,87,194,99,197,7,184,131,204,163,52
correctErrors out = 32,203,26,166,95,159,214,94,174,130,202,15,33,226,82,24,17,83,148,0,236,17,236,17,236,17,236,17,236,17,236,17,236,17
error_grade=4
extractData bytes in (34) = 32,203,26,166,95,159,214,94,174,130,202,15,33,226,82,24,17,83,148,0,236,17,236,17,236,17,236,17,236,17,236,17,236,17
extractData mode = 2
extractAlphanum charcount = 25
extractData mode = 0
extractData data(25) = 72,84,84,80,58,47,47,84,88,84,45,67,72,47,65,89,65,87,69,81,89,65,70,52,65
Оба QR-кода не имеют проблем с исправлением ошибок или нарушением формата.
Из вывода KaarPoSoft мы можем видеть сегменты в QR-кодах.
Первый штрих-код состоит из двух сегментов:
- Буквенно-цифровой режим, количество = 16, текст = "HTTP://SITE-COM/". Длина сегмента в битах = 4 (режим) + 9 (счетчик) + 88 (данные) = 101 бит.
- Числовой режим, количество = 9, текст = "123456789". Длина сегмента в битах = 4 (режим) + 10 (счетчик) + 30 (данные) = 44 бита.
Второй штрих-код состоит из одного сегмента:
- Буквенно-цифровой режим, количество = 25, текст = "HTTP://TXT-CH/AYAWEQYAF4A". Длина сегмента в битах = 4 (режим) + 9 (счетчик) + 138 (данные) = 151 бит.
Теперь QR-код в версии 1 с низким уровнем исправления ошибок имеет емкость для 19 байтов кодового слова данных или 152 бита. В первом штрих-коде используется 101 + 44 = 145 бит = 19 байт (с округлением вверх), поэтому он подходит. Второй штрих-код использует 151 бит = 19 байт (с округлением вверх), так что он подходит. Так что теоретически оба списка сегментов текстовых данных должны соответствовать версии 1 low ECC.
Согласно спецификации QR, после окончания списка сегментов добавляются следующие биты:
- (TERM) До четырех нулевых битов (но меньше, если достигнута емкость данных) для псевдорежима терминатора.
- (BITPAD) От нуля до семи бит «0» для заполнения последнего неполного байта.
- (BYTEPAD) Чередование байтов 0xEC и 0x11, пока не будет достигнута емкость данных.
Давайте разберем, что же произошло на самом деле. Преобразуйте шестнадцатеричный байтовый вывод ZXing в двоичный и аннотируйте поля.
Первый штрих-код:
20 83 1a a6 5f 9f d5 b4 75 3e 8d 20 48 81 23 db 91 8a 80
0010 000010000 [88 bits] 0001 0000001001 [30 bits] 0000 000 (Total length = 152 bits)
^Mode ^Count ^Data ^Mode ^Count ^Data ^TERM ^BITPAD
Второй штрих-код:
20 cb 1a a6 5f 9f d6 5e ae 82 ca 0f 21 e2 52 18 11 53 94 00 ec 11 ec 11 ec 11 ec 11 ec 11 ec 11 ec 11
0010 000011001 [138 bits] | 0000 00000 11101100 00010001 [...] (Total length = 272 bits)
^Mode ^Count ^Data | ^TERM ^BITPAD ^BYTEPAD
Обратите внимание, что во втором штрих-коде в позиции |
непосредственно перед TERMinator слева находится 151 бит. Терминатор обычно состоит из четырех нулевых битов, но его можно укоротить, если достигнута емкость (152 бита). Таким образом, оптимальным ограничителем является один бит «0», и тогда не должно быть ни битового, ни байтового заполнения.
person
Nayuki
schedule
07.11.2018