QRkoder

Одноразовый QR-код

Одноразовый QR-код — код, который срабатывает ровно один раз: после первого использования сервер отмечает его как погашенный, и повторный скан возвращает отказ.

Определение

Одноразовый QR-код — код, который срабатывает ровно один раз. Первое использование сервер фиксирует как погашение: отметка «использован» ставится в базе, и любой следующий скан того же символа возвращает отказ вместо подарка, скидки или прохода. Английские названия — single-use и one-time.

Важно сразу снять главное заблуждение. В самой картинке ничего не «сгорает». Модули на бумаге не меняются, кодовое слово внутри остаётся тем же. Одноразовость — это состояние записи на сервере, а QR только переносит её идентификатор. Отсюда все правила и все грабли этой механики.

Где живёт «одноразовость»

Технически схема простая. Каждый экземпляр получает уникальный токен, который зашивается в короткую ссылку внутри кода. Сервер хранит для токена статус: выпущен, погашен, аннулирован, истёк. При сканировании происходит проверка и, если статус подходящий, — перевод в «погашен» с записью времени, устройства и точки.

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

Партию таких кодов выпускают пачкой: генератор создаёт список уникальных токенов и печатает их серией — каждый купон, наклейка или талон получает свой символ. Два одинаковых кода в тираже — типичная ошибка, после которой второй посетитель получает отказ на честной карточке.

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

  • Промокоды и купоны. Одна скидка на человека, а не одна ссылка на весь интернет. Без погашения выгодное предложение расходится по чатам за час — механику разбирали в материале про QR-код с промокодом.
  • Подарочные карты. Код на подарочном сертификате должен отработать один раз — иначе номинал списывается многократно.
  • Билеты и проходы. Один вход на одно место. Повторный скан на турникете обязан гореть красным.
  • Выдача заказов и посылок. Код подтверждает получение, и после выдачи он больше не нужен.
  • Доступ к документу. Ссылка «сгорает» после первого открытия: получатель прочитал — окно закрылось.

Чем не является

Одноразовый код часто путают с ротирующимся — тем, что обновляется каждые несколько секунд на экране телефона (так устроены транспортные и клубные пропуска, а также коды в приложениях-аутентификаторах). Разница в том, что именно ограничивает злоупотребление: у ротации — время жизни символа, у одноразового кода — счётчик использований. Скриншот ротирующегося кода бесполезен через минуту; скриншот одноразового бесполезен только после того, как оригинал погасили.

Не стоит путать его и с защитой паролем: QR с паролем проверяет, кто пришёл, а одноразовый — сколько раз приходили. Механики независимы и спокойно сочетаются.

Где ломается на практике

Три сценария, которые ловят почти все, кто внедряет погашение впервые.

Двойное срабатывание. Кассир сканирует, страница подвисает, кассир сканирует ещё раз — и гость видит «код уже использован», хотя скидку не получил. Лечится идемпотентностью: повторный запрос с тем же токеном в течение короткого окна должен возвращать результат первого, а не отказ.

Гонка двух точек. Один и тот же билет предъявляют на двух входах одновременно. Если статус проверяют локально и синхронизируют раз в минуту, пройдут оба. Погашение должно быть атомарным на общем сервере, а не на кассе.

Офлайн. В подвале, в поле и на фестивале связи нет. Криптоподпись внутри кода позволяет проверить, что символ выпустили вы, но не позволяет узнать, гасили ли его пять минут назад на соседнем входе. Выход — локальный журнал погашений на каждом устройстве с последующей сверкой, и заранее принятое решение, что делать с расхождениями.

Практическая заготовка: одноразовость живёт на сервере, а в матрицу кладётся только ссылка с токеном — такую ссылку удобно вести через динамический QR-код, чтобы менять адрес проверки без перепечатки тиража.

Частые вопросы

Можно ли сделать одноразовым статический QR-код?

Нет. Статический код содержит готовые данные — ссылку, текст, реквизиты — и отдаёт их одинаково при каждом сканировании. Проверять и менять там нечего: между кодом и получателем нет сервера, который мог бы сказать «уже использован». Одноразовость даёт только динамический код, где символ хранит короткий адрес, а решение о доступе принимается на сервере в момент перехода.

Что увидит человек при повторном скане?

То, что вы настроите. Хороший вариант — понятная страница вместо ошибки: «Код уже использован», дата и время первого погашения, а рядом действие — связаться с поддержкой или посмотреть другие предложения. Голый технический отказ провоцирует спор на кассе, а отметка о времени сразу показывает, было это ошибкой персонала или попыткой пройти дважды.

Спасает ли одноразовый код от скриншотов и пересылок?

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

Как выпустить много одноразовых кодов сразу?

Через генерацию партии: сервис создаёт нужное число уникальных токенов и отдаёт готовые изображения, а печать подставляет каждому свой символ. Ключевое требование — уникальность в пределах тиража и предсказуемая длина токена: чем он короче, тем меньше версия кода и тем лучше он читается с мелкой этикетки. Перед печатью тираж стоит проверить выборочно: отсканировать десяток кодов из разных мест партии.

Можно ли вернуть погашенный код к жизни?

Да, если сервис позволяет менять статус вручную. Это нужно чаще, чем кажется: гость отказался от заказа, кассир погасил купон по ошибке, оборудование сработало дважды. В админке статус переводят обратно в «выпущен», и код снова работает. Важно, чтобы такие операции попадали в журнал с указанием, кто и когда их сделал, — иначе ручной откат превращается в дыру в учёте.

Самойлов Андрей Иванович — Эксперт по QR-кодам и SaaS-маркетингу

Автор материала

Андрей Самойлов

Эксперт по QR-кодам и SaaS-маркетингу. 10 лет в SaaS, маркетинге и ИТ.

Об авторе и все материалы

Создавайте QR-коды бесплатно

Динамические QR-коды с аналитикой, дизайном и без ограничений по сканированиям.

Начать бесплатно