QR-код EPC не містить посилання. Він містить кредитний переказ SEPA, записаний у вигляді короткого блока звичайного тексту, і банківський застосунок, що розпізнає формат, читає його та заповнює форму переказу. Жоден сервер не викликається, нічого не шукається, і жодна інформація про сканування не потрапляє до вас.
Цей єдиний факт визначає все інше в тому, як використовують ці коди. Такий код неможливо скоротити, неможливо переспрямувати і неможливо порахувати сканувань, бо в цьому потоці немає жодного запиту. Стандарт, на якому все тримається, - це EPC069-12 від Європейської платіжної ради, на ринках німецькомовних країн ці коди зазвичай називають GiroCode, і формат варто зрозуміти точно, перш ніж друкувати тисячі таких кодів на рахунках. Для загального питання про те, що може нести код, що таке QR-код розкриває тему payload.
Що насправді міститься в payload
Payload - це послідовність рядків у фіксованому порядку, кожен з яких - окремий елемент. Парсер читає рядок 1, очікує BCD, читає рядок 4, очікує SCT, і здається, якщо чогось із цього немає.
| Рядок | Вміст | Ліміт |
|---|---|---|
| Службовий тег | BCD | фіксовано, 3 символи |
| Версія | 001 або 002 | 002 робить 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 показує порядок полів і правила кодування у формі, яку можна перевірити на практиці.
Чому його неможливо скоротити чи відстежити
Відстежуваний QR-код працює, кодуючи URL, яким володієте ви. Сканування відкриває цей URL, ваше переспрямування відповідає, ви рахуєте запит, і відвідувач потрапляє туди, куди зараз спрямоване посилання. Динамічні проти статичних QR-кодів розкриває цей механізм повністю.
Тут нічого з цього не працює. Банківський застосунок - не браузер. Він парсить текст, звіряє формат і відкриває форму платежу локально на пристрої. Немає жодного HTTP-запиту, який можна перехопити, тож:
- Лічильника сканувань не існує ніде. Ні у вашому інструменті, ні в банківському.
- Нічого не можна переспрямувати. Неправильний IBAN означає передрук.
- Обгортання payload у коротке посилання ламає код одразу, бо парсер бачить
httpsтам, де очікуєBCD.
Я бачив, як команда витратила тиждень, намагаючись отримати атрибуцію для платіжного коду, перш ніж хтось нарешті прочитав специфікацію. Чесна відповідь у тому, що платіжна сторона й вимірювальна сторона - це два різні коди, і якщо на макеті є місце лише для одного, перемагає платіжний код.
Що ви можете виміряти - це все навколо нього. Якщо розсилка містить рахунок із платіжним кодом, розмістіть на цьому ж листі окреме відстежуване коротке посилання на портал клієнта, умови чи сторінку підтримки, і читайте залученість звідти. Функції QR-кодів Elido охоплюють відстежувану половину аркуша, а платіжний код лишається точно таким, як вимагає стандарт.
Де це працює, а де ні
Підтримка залежить від конкретних банківських застосунків, тому покриття нерівномірне так, як списки країн зазвичай прикрашають. Австрійські й німецькі застосунки читають ці коди вже роками, фінські й нідерландські - здебільшого надійні, бельгійська підтримка хороша. За межами цього списку - тестуйте, перш ніж замовляти тираж друку.
Двох сусідів часто плутають із цим форматом. Швейцарський QR-bill - це інша специфікація з власним макетом і швейцарським хрестом посередині символу; це не EPC-код, і застосунки єврозони не прочитають його як платіж. А платіжне посилання від платіжного провайдера карток - це взагалі не те саме: це звичайний URL у QR-коді, який веде на хостовану сторінку оформлення замовлення, і воно поводиться як будь-яке інше вебпосилання, включно з відстеженням, яке з ним приходить.
Для ширшого питання про те, що регульований платіжний чи кредитний бізнес може показувати клієнтам, скорочувачі URL для фінтеху розкривають частини, де задіяне посилання.
Як зробити код без жалю
Шість перевірок у тому порядку, в якому вони заощаджують ваші гроші.
- Перевіряйте IBAN до генерації, а не після друку. Перевірка контрольної суми не коштує нічого, а передрук коштує цілого тиражу.
- Свідомо вирішіть питання суми. Фіксована - для рахунків, порожня - для плакатів зі зборами пожертв, де має бути можливою будь-яка цифра.
- Надавайте перевагу структурованому референсу перед довільним текстом. Він коротший, автоматично звіряється у вашій бухгалтерії й тримає payload невеликим.
- Тестуйте щонайменше в трьох банківських застосунках, на обох платформах телефонів. Парсери по-різному строго ставляться до необов'язкових полів.
- Розраховуйте розмір надрукованого коду під відстань, з якої його скануватимуть, так само, як і з будь-яким іншим кодом. Якого розміру має бути QR-код містить арифметику.
- Тримайте його матовим. Глянцевий лак поверх платіжного коду на рахунку під офісним освітленням - це вже практично готовий тікет для служби підтримки.
Проблема наліпки
Існує один справжній вектор шахрайства, і він фізичний, а не цифровий. Статичний платіжний код, надрукований на рахунку, паркоматі, табличці ринкового прилавка чи благодійному плакаті, можна заклеїти наліпкою з іншим 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 на день