Заполняющие байты (Padding)
Заполняющие байты — чередующиеся 0xEC и 0x11, которыми QR добивает область данных до ёмкости версии, если сообщение короче; ставятся после терминатора, перед байтами коррекции.
Зачем нужны заполняющие байты
Ёмкость QR фиксирована выбранной версией и уровнем коррекции: под данные отведено строго определённое число байтов. Реальное сообщение почти никогда не совпадает с этим числом ровно. Оставлять хвост пустым нельзя — область данных должна быть заполнена целиком, иначе кодер не сможет корректно посчитать байты коррекции и разложить код по модулям. Пустоту и закрывают padding-байты.
Как добавляются 0xEC и 0x11
Сначала после данных ставится терминатор, затем поток дополняется нулями до границы целого байта. Если и после этого до конца области данных остаётся место, туда пишутся заполняющие байты — строго чередующиеся: 11101100 и 00010001, то есть 0xEC и 0x11. Порядок именно такой: первый недостающий байт — 0xEC, следующий — 0x11, дальше снова 0xEC, и так до заполнения. Значения выбраны стандартом ISO/IEC 18004 не случайно — их битовый рисунок разнородный, что помогает маскированию избегать больших однотонных зон.
Место в потоке
Заполняющие байты завершают именно область данных — они идут после реального сообщения и терминатора, но до проверочных байтов коррекции. То есть код Рид-Соломона считается уже с учётом padding: заполнители для него — такие же данные, как и полезные. При чтении декодер, дойдя до терминатора, знает, что дальше пошёл мусор-заполнитель, и просто его игнорирует. Посмотреть, как код добивается до нужной ёмкости, можно в генераторе QR.