5 хв читанняМожливості

QR-код EPC: пояснення платіжного QR-стандарту SEPA

QR-код EPC кодує кредитний переказ SEPA, а не URL, тому банківський застосунок може заповнити форму заздалегідь. Що міститься у payload і чому його неможливо відстежити.

Marius Voß
DevRel · edge infra
Payload QR-коду EPC, показаний як дванадцять рядків звичайного тексту, що починаються зі службового тегу BCD, поруч із формою переказу в банківському застосунку, заповненою на його основі

QR-код EPC не містить посилання. Він містить кредитний переказ SEPA, записаний у вигляді короткого блока звичайного тексту, і банківський застосунок, що розпізнає формат, читає його та заповнює форму переказу. Жоден сервер не викликається, нічого не шукається, і жодна інформація про сканування не потрапляє до вас.

Цей єдиний факт визначає все інше в тому, як використовують ці коди. Такий код неможливо скоротити, неможливо переспрямувати і неможливо порахувати сканувань, бо в цьому потоці немає жодного запиту. Стандарт, на якому все тримається, - це EPC069-12 від Європейської платіжної ради, на ринках німецькомовних країн ці коди зазвичай називають GiroCode, і формат варто зрозуміти точно, перш ніж друкувати тисячі таких кодів на рахунках. Для загального питання про те, що може нести код, що таке QR-код розкриває тему payload.

Що насправді міститься в payload

Payload - це послідовність рядків у фіксованому порядку, кожен з яких - окремий елемент. Парсер читає рядок 1, очікує BCD, читає рядок 4, очікує SCT, і здається, якщо чогось із цього немає.

РядокВмістЛіміт
Службовий тегBCDфіксовано, 3 символи
Версія001 або 002002 робить BIC необов'язковим
Набір символів1 для UTF-8, до 8одна цифра
ІдентифікаціяSCTфіксовано, 3 символи
BICідентифікатор банку отримувача11 символів, часто відсутній
Ім'я отримувачавласник рахунку70 символів
IBANрахунок отримувача34 символи
СумаEUR, а після нього значеннявід 0.01 до 999999999.99, у EUR
Код призначенняпризначення за ISO, використовується рідко4 символи
Структурований референсреференс кредитора, або35 символів
Неструктурований текстнатомість довільний текст призначення140 символів
Отримувач - платникупримітка, показана платнику70 символів

Два правила часто плутають людей. Структурований референс і неструктурований текст взаємовиключні: заповніть одне поле, а інше лишіть порожнім. І сума не обов'язкова, що є правильним вибором для донатного коду, де суму визначає платник, і неправильним вибором для рахунку, де потрібна точна цифра, заповнена заздалегідь.

Увесь блок обмежений 331 байтом. Настанови EPC069-12 також фіксують рівень корекції помилок на M і обмежують символ версією 13, тож надрукований код має відомий верхній поріг за кількістю модулів. Якщо ви створюєте це в коді, а не клацаєте в генераторі, документація бібліотеки Segno показує порядок полів і правила кодування у формі, яку можна перевірити на практиці.

Чотири блоки payload QR-коду EPC: від фіксованого службового тегу через дані отримувача та суму до референсу платежу

Чому його неможливо скоротити чи відстежити

Відстежуваний QR-код працює, кодуючи URL, яким володієте ви. Сканування відкриває цей URL, ваше переспрямування відповідає, ви рахуєте запит, і відвідувач потрапляє туди, куди зараз спрямоване посилання. Динамічні проти статичних QR-кодів розкриває цей механізм повністю.

Тут нічого з цього не працює. Банківський застосунок - не браузер. Він парсить текст, звіряє формат і відкриває форму платежу локально на пристрої. Немає жодного HTTP-запиту, який можна перехопити, тож:

  • Лічильника сканувань не існує ніде. Ні у вашому інструменті, ні в банківському.
  • Нічого не можна переспрямувати. Неправильний IBAN означає передрук.
  • Обгортання payload у коротке посилання ламає код одразу, бо парсер бачить https там, де очікує BCD.

Я бачив, як команда витратила тиждень, намагаючись отримати атрибуцію для платіжного коду, перш ніж хтось нарешті прочитав специфікацію. Чесна відповідь у тому, що платіжна сторона й вимірювальна сторона - це два різні коди, і якщо на макеті є місце лише для одного, перемагає платіжний код.

Що ви можете виміряти - це все навколо нього. Якщо розсилка містить рахунок із платіжним кодом, розмістіть на цьому ж листі окреме відстежуване коротке посилання на портал клієнта, умови чи сторінку підтримки, і читайте залученість звідти. Функції QR-кодів Elido охоплюють відстежувану половину аркуша, а платіжний код лишається точно таким, як вимагає стандарт.

Де це працює, а де ні

Підтримка залежить від конкретних банківських застосунків, тому покриття нерівномірне так, як списки країн зазвичай прикрашають. Австрійські й німецькі застосунки читають ці коди вже роками, фінські й нідерландські - здебільшого надійні, бельгійська підтримка хороша. За межами цього списку - тестуйте, перш ніж замовляти тираж друку.

Двох сусідів часто плутають із цим форматом. Швейцарський QR-bill - це інша специфікація з власним макетом і швейцарським хрестом посередині символу; це не EPC-код, і застосунки єврозони не прочитають його як платіж. А платіжне посилання від платіжного провайдера карток - це взагалі не те саме: це звичайний URL у QR-коді, який веде на хостовану сторінку оформлення замовлення, і воно поводиться як будь-яке інше вебпосилання, включно з відстеженням, яке з ним приходить.

Для ширшого питання про те, що регульований платіжний чи кредитний бізнес може показувати клієнтам, скорочувачі URL для фінтеху розкривають частини, де задіяне посилання.

Платіжний QR-код, розшифрований офлайн у форму переказу, порівняно з QR-кодом посилання, що звертається до переспрямування й формує аналітику

Як зробити код без жалю

Шість перевірок у тому порядку, в якому вони заощаджують ваші гроші.

  1. Перевіряйте IBAN до генерації, а не після друку. Перевірка контрольної суми не коштує нічого, а передрук коштує цілого тиражу.
  2. Свідомо вирішіть питання суми. Фіксована - для рахунків, порожня - для плакатів зі зборами пожертв, де має бути можливою будь-яка цифра.
  3. Надавайте перевагу структурованому референсу перед довільним текстом. Він коротший, автоматично звіряється у вашій бухгалтерії й тримає payload невеликим.
  4. Тестуйте щонайменше в трьох банківських застосунках, на обох платформах телефонів. Парсери по-різному строго ставляться до необов'язкових полів.
  5. Розраховуйте розмір надрукованого коду під відстань, з якої його скануватимуть, так само, як і з будь-яким іншим кодом. Якого розміру має бути QR-код містить арифметику.
  6. Тримайте його матовим. Глянцевий лак поверх платіжного коду на рахунку під офісним освітленням - це вже практично готовий тікет для служби підтримки.

Проблема наліпки

Існує один справжній вектор шахрайства, і він фізичний, а не цифровий. Статичний платіжний код, надрукований на рахунку, паркоматі, табличці ринкового прилавка чи благодійному плакаті, можна заклеїти наліпкою з іншим IBAN. Ніщо в коді цьому не протистоїть, бо payload - це і є папір.

Заходи захисту так само фізичні. Друкуйте код усередині макета рахунку, де наліпка була б помітною, а не на клейкій латці. Показуйте ім'я отримувача та останні цифри IBAN текстом поруч із кодом, щоб платник міг звірити. І в інструкціях щодо підтвердження платежу кажіть людям читати ім'я, яке показує їхній банківський застосунок, перш ніж підтверджувати, бо саме цей екран - єдине місце, де підміна стає видимою. Чи безпечні QR-коди і що таке quishing насправді розкриває ширший патерн атаки, більшість з якого справді стосується посилань-кодів, які ви друкуєте деінде на тій самій сторінці.

Заспокійлива частина: платіж усе одно потребує підтвердження людиною в автентифікованому банківському застосунку. Код заповнює форму заздалегідь, він ніколи сам не переказує гроші.

Читайте наріжну серію

Цей матеріал належить до кластера features. Для процесу друку навколо будь-якого коду, який ви створюєте, QR-кампанія з нуля - наріжний матеріал, а посібник із QR-кодів у документації розкриває створення відстежуваного типу через API.

Пов'язане в блозі

Поширені запитання

Що таке QR-код EPC?

QR-код, що кодує деталі кредитного переказу SEPA як звичайний текст, тож банківський застосунок може прочитати їх і заповнити форму переказу заздалегідь. Його стандартизувала Європейська платіжна рада в настановах EPC069-12, і він також відомий як GiroCode. Payload - це фіксована послідовність рядків, що починається зі службового тегу BCD, і в ньому немає жодної веб-адреси.

Які країни підтримують платежі GiroCode?

Підтримка залежить від банківського застосунку, а не від країни, але на практиці ці коди широко читають в Австрії, Німеччині, Фінляндії, Нідерландах та Бельгії. В інших країнах єврозони покриття нерівномірне, а за її межами код не має жодного сенсу. Швейцарія використовує власний стандарт QR-bill, який виглядає схоже, але несумісний.

Чи може QR-код EPC бути динамічним або відстежуваним?

Ні. Деталі платежу закладені всередині надрукованого малюнка, і телефон розшифровує їх офлайн, не звертаючись до жодного сервера, тож немає чого переспрямовувати і немає що рахувати. Якщо потрібно змінити суму чи референс, ви створюєте новий код. Усе, що вам продають як динамічний платіжний QR, - це посилання на сторінку оплати, а це вже інший продукт.

Що станеться, якщо вставити коротке посилання в QR-код EPC?

Банківський застосунок не зможе його розпарсити і або покаже помилку, або сприйме код як звичайний URL. Парсер очікує, що перший рядок буде BCD, а четвертий - SCT; URL не відповідає жодному з них. Платіжні QR-коди й QR-коди з посиланнями - це два окремі коди, які просто мають однакову форму символу.

Який максимальний розмір payload?

331 байт, що за настановами EPC обмежує QR-код версією 13 з рівнем корекції помилок M. На практиці саме текст призначення платежу займає найбільше місця, тож саме довгий довільний текстовий референс - те поле, яке штовхає код за межу ліміту. Тримайте референс структурованим і коротким, і код лишиться достатньо розрідженим, щоб його можна було відсканувати з надрукованого рахунку.

Чи безпечні платіжні QR-коди на надрукованих рахунках?

Сам код не містить жодного виконуваного вмісту, а платник підтверджує переказ у своєму банківському застосунку, який показує ім'я отримувача та IBAN до того, як щось рухається. Справжній ризик - фізичний: наліпка, накладена поверх надрукованого коду, що перенаправляє платіж на інший рахунок. Друкуйте код усередині макета рахунку, а не на окремій етикетці, і кажіть платникам перевіряти ім'я на екрані підтвердження.

Спробуйте Elido

Вставте URL - отримайте коротке посилання

Без реєстрації. Посилання живе 30 днів. Зареєструйтесь, щоб зберегти назавжди.

Безкоштовно, без реєстрації · 2 на день

Спробуйте Elido

URL-скорочувач із хостингом у ЄС: власні домени, глибока аналітика, відкритий API. Безкоштовний тариф - без кредитної картки.

Теги
epc qr code
girocode
sepa payment qr code
qr code payment
static qr code
invoice qr code

Читати далі