Перейти к содержимому

Контрольная сумма CRC (EMVCo QR)

Контрольная сумма CRC — последнее поле (ID 63) платёжного QR стандарта EMVCo: CRC-16/CCITT-FALSE по всей строке кода, позволяющая приложению проверить целостность перед оплатой.

Что за поле CRC в платёжном QR

Платёжный QR стандарта EMVCo — это строка из полей формата TLV (тег, длина, значение). Последнее поле в ней всегда имеет идентификатор 63 и содержит контрольную сумму CRC всей строки. По ней банковское приложение проверяет, что код считался без искажений, прежде чем показывать сумму и реквизиты к оплате. То же поле используется и в российской системе, построенной на EMVCo, — в QR СБП.

Как вычисляется

Используется алгоритм CRC-16/CCITT-FALSE: полином 0x1021, начальное значение 0xFFFF, без инверсии входа и выхода. Тонкость в охвате: сумма считается по всей строке кода, включая сам идентификатор поля и его длину — «6304», — но до четырёх символов самого значения CRC. То есть в расчёт входят символы вплоть до «6304» включительно, а результат — четыре шестнадцатеричных знака в верхнем регистре — дописывается следом. Приложение при чтении повторяет вычисление и сравнивает с тем, что записано в поле 63.

Зачем нужна

Платёжный код нельзя читать «примерно»: ошибка в счёте или сумме — это деньги не туда. Сам QR уже защищён коррекцией Рид-Соломона на уровне модулей, но CRC добавляет проверку на уровне уже разобранной платёжной строки — от опечатки при ручной генерации до сбоя при передаче. Не сошлась контрольная сумма — приложение отклоняет код и не даёт оплатить по битым реквизитам. Собрать корректную платёжную строку помогает генератор QR.