Краткий ответ: используемое вами программное обеспечение 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 с низким ECC.
Согласно спецификации QR, после окончания списка сегментов добавляются следующие биты:
- (TERM) До четырех бит «0» (но меньше при достижении емкости данных) для псевдо-режима терминатора.
- (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 бит. Терминатор обычно имеет четыре "0" бита, но его можно сократить, если достигнута емкость (152 бита). Таким образом, оптимальным ограничителем является один бит «0», и тогда не должно быть ни битового дополнения, ни байтового дополнения.