Генератор QR-кода

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

Оформление
Размеры
Цвета

264 × 264 px в PNG

Единицы размера

Спецификация

Набор символов
любые данные
Длина
от 1 до 2953 символов
Контрольная цифра
в этой символике не используется

Где применяется

  • Платёжные квитанции: QR-код по ГОСТ Р 56042 несёт реквизиты получателя прямо в себе, и плательщику не приходится вбивать двадцатизначный счёт вручную
  • Меню, прайсы и каталоги: код на столе или на ценнике ведёт на страницу, которую правят без перепечатки всего тиража
  • Пропуска, электронные билеты и талоны, которые сканирует турникет на входе или сотрудник ручным считывателем

Чем отличается

Ближайший родственник — Data Matrix, и в России граница между ними проведена на редкость чётко. Всё, что сканирует человек телефоном, делают на QR: платежи, меню, билеты, ссылки на упаковке. Всё, что сканирует оборудование на мелкой упаковке, делают на Data Matrix — обязательная маркировка построена именно на нём. Причина не в объёме данных, а в геометрии. QR тратит на служебную часть три угловых квадрата с белыми разделителями и требует четыре модуля зоны молчания по периметру; Data Matrix обходится рамкой-уголком и одним модулем. На пачке лекарства это разница между «влезло» и «не влезло». Зато угловые квадраты, за которые QR платит площадью, камера телефона ловит мгновенно и под любым наклоном — за это его и выбрали для всего, что показывают людям.

Типичные ошибки

  • Кириллица без проверки на реальном считывателе. Русский текст уходит в код как UTF-8, по два байта на букву, поэтому символ выходит заметно крупнее, чем от той же фразы латиницей. Часть старого оборудования трактует эти байты как однобайтовую кодировку и выдаёт кракозябры. Если кириллица обязательна, проверяйте код на том сканере, где он будет работать, а не на своём телефоне.
  • Код на глянце, под ламинатом или за стеклом витрины. Камера ловит отражение лампы ровно в центре символа, и распознавание не срабатывает. Матовая ламинация или разворот носителя от источника света помогают надёжнее, чем увеличение размера кода.
  • Код на плакате, рассчитанном на взгляд с нескольких метров. Практическое правило: код читается примерно с десяти собственных ширин. Значит, для съёмки с трёх метров нужен квадрат около тридцати сантиметров, а не пять, как обычно ставят в макете.
  • Код, положенный прямо поверх фотографии или градиента. Вокруг символа нужно четыре модуля зоны молчания, и «зона» значит именно пустое однородное поле, а не прозрачный фон, сквозь который просвечивает картинка. Камера принимает пятна подложки за модули и не находит границу сетки. Спасает белая плашка с запасом в те же четыре модуля, а не увеличение самого кода.
  • Динамический код через сторонний сервис на печатной продукции с долгим сроком жизни. Такая ссылка ведёт не на ваш адрес, а на редирект посредника: закончилась подписка или сервис закрылся — и весь напечатанный тираж перестал работать разом.

Вопросы и ответы

Что писать в поле, чтобы код открывал сайт, а не показывал текст?
Адрес нужно писать вместе со схемой: https://example.com. Если написать просто example.com, большинство камер покажет это как обычную строку и предложит скопировать. По той же логике работают остальные типы: tel:+70000000000 предлагает позвонить, mailto: открывает письмо, а блок WIFI:T:WPA;S:имя-сети;P:пароль;; подключает телефон к сети без диктовки пароля вслух.
Можно ли сгенерировать здесь код для оплаты?
Платёжный QR по ГОСТ Р 56042 — можно, это обычная текстовая строка без всякой криптографии. Формат целиком: ST0001, следом одна цифра кодировки (1 — Windows-1251, 2 — UTF-8, 3 — KOI8-R), дальше поля вида Имя=Значение через вертикальную черту. Пять реквизитов обязательны: Name, PersonalAcc, BankName, BIC, CorrespAcc — получатель, его расчётный счёт, банк, БИК и корреспондентский счёт. Целиком это выглядит так: ST00012|Name=получатель|PersonalAcc=расчётный счёт|BankName=банк|BIC=БИК|CorrespAcc=корсчёт. Остальное — сумму, назначение платежа, ИНН — дописывают следом теми же парами через черту. Цифра кодировки должна совпадать с тем, в чём строка реально закодирована: браузер работает с UTF-8, поэтому здесь ставится 2. А вот код Системы быстрых платежей так не собрать: внутри него ссылка, которую выпускает банк под конкретного получателя.
Почему код с русским текстом получается крупнее и хуже читается?
Латинская буква занимает один байт, кириллическая в UTF-8 — два. Ёмкость QR-кода считается в байтах, поэтому та же фраза по-русски требует примерно вдвое больше места, символ переходит на следующую версию, а каждая версия добавляет по четыре модуля на сторону. Печатаете вы его при этом в тот же квадрат макета — значит, каждый модуль становится физически мельче.
Какой уровень коррекции ошибок ставить?
Уровней четыре. L восстанавливает около 7 % площади символа, M — около 15 %, Q — около 25 %, H — около 30 %. Для кода, который печатают на чистой бумаге и снимают в помещении, достаточно M. Поднимать уровень стоит, когда на код ляжет логотип, когда его гнут по бутылке или наносят туда, где он затрётся. Плата прямая: избыточность занимает модули, сетка густеет, и при том же размере на макете каждый модуль становится мельче — так что ставить H по умолчанию, «чтобы наверняка», обычно означает сделать хуже.
Сколько данных вообще влезает в QR-код?
Потолок — 7089 цифр, 4296 символов алфавитно-цифрового режима (только заглавная латиница, цифры и несколько знаков) или 2953 байта. Это на самой крупной, сороковой версии размером 177 на 177 модулей и при самом слабом уровне коррекции L; поднимете уровень — потолок опустится. До него на практике не доходят: чем больше данных, тем гуще сетка, а место на макете фиксировано, и предел наступает по размеру модуля задолго до предела по ёмкости.