Одноразовый QR-код
Одноразовый QR-код — код, который срабатывает ровно один раз: после первого использования сервер отмечает его как погашенный, и повторный скан возвращает отказ.
Определение
Одноразовый QR-код — код, который срабатывает ровно один раз. Первое использование сервер фиксирует как погашение: отметка «использован» ставится в базе, и любой следующий скан того же символа возвращает отказ вместо подарка, скидки или прохода. Английские названия — single-use и one-time.
Важно сразу снять главное заблуждение. В самой картинке ничего не «сгорает». Модули на бумаге не меняются, кодовое слово внутри остаётся тем же. Одноразовость — это состояние записи на сервере, а QR только переносит её идентификатор. Отсюда все правила и все грабли этой механики.
Где живёт «одноразовость»
Технически схема простая. Каждый экземпляр получает уникальный токен, который зашивается в короткую ссылку внутри кода. Сервер хранит для токена статус: выпущен, погашен, аннулирован, истёк. При сканировании происходит проверка и, если статус подходящий, — перевод в «погашен» с записью времени, устройства и точки.
Работает это только на динамическом QR-коде: у него есть сервер-посредник, который может ответить по-разному в разные моменты. Статический код одноразовым сделать нельзя в принципе — он отдаёт одно и то же содержимое всем и всегда, и никакой «отметки о погашении» ему поставить некуда.
Партию таких кодов выпускают пачкой: генератор создаёт список уникальных токенов и печатает их серией — каждый купон, наклейка или талон получает свой символ. Два одинаковых кода в тираже — типичная ошибка, после которой второй посетитель получает отказ на честной карточке.
Где применяется
- Промокоды и купоны. Одна скидка на человека, а не одна ссылка на весь интернет. Без погашения выгодное предложение расходится по чатам за час — механику разбирали в материале про QR-код с промокодом.
- Подарочные карты. Код на подарочном сертификате должен отработать один раз — иначе номинал списывается многократно.
- Билеты и проходы. Один вход на одно место. Повторный скан на турникете обязан гореть красным.
- Выдача заказов и посылок. Код подтверждает получение, и после выдачи он больше не нужен.
- Доступ к документу. Ссылка «сгорает» после первого открытия: получатель прочитал — окно закрылось.
Чем не является
Одноразовый код часто путают с ротирующимся — тем, что обновляется каждые несколько секунд на экране телефона (так устроены транспортные и клубные пропуска, а также коды в приложениях-аутентификаторах). Разница в том, что именно ограничивает злоупотребление: у ротации — время жизни символа, у одноразового кода — счётчик использований. Скриншот ротирующегося кода бесполезен через минуту; скриншот одноразового бесполезен только после того, как оригинал погасили.
Не стоит путать его и с защитой паролем: QR с паролем проверяет, кто пришёл, а одноразовый — сколько раз приходили. Механики независимы и спокойно сочетаются.
Где ломается на практике
Три сценария, которые ловят почти все, кто внедряет погашение впервые.
Двойное срабатывание. Кассир сканирует, страница подвисает, кассир сканирует ещё раз — и гость видит «код уже использован», хотя скидку не получил. Лечится идемпотентностью: повторный запрос с тем же токеном в течение короткого окна должен возвращать результат первого, а не отказ.
Гонка двух точек. Один и тот же билет предъявляют на двух входах одновременно. Если статус проверяют локально и синхронизируют раз в минуту, пройдут оба. Погашение должно быть атомарным на общем сервере, а не на кассе.
Офлайн. В подвале, в поле и на фестивале связи нет. Криптоподпись внутри кода позволяет проверить, что символ выпустили вы, но не позволяет узнать, гасили ли его пять минут назад на соседнем входе. Выход — локальный журнал погашений на каждом устройстве с последующей сверкой, и заранее принятое решение, что делать с расхождениями.
Практическая заготовка: одноразовость живёт на сервере, а в матрицу кладётся только ссылка с токеном — такую ссылку удобно вести через динамический QR-код, чтобы менять адрес проверки без перепечатки тиража.
Частые вопросы
Можно ли сделать одноразовым статический QR-код?
Нет. Статический код содержит готовые данные — ссылку, текст, реквизиты — и отдаёт их одинаково при каждом сканировании. Проверять и менять там нечего: между кодом и получателем нет сервера, который мог бы сказать «уже использован». Одноразовость даёт только динамический код, где символ хранит короткий адрес, а решение о доступе принимается на сервере в момент перехода.
Что увидит человек при повторном скане?
То, что вы настроите. Хороший вариант — понятная страница вместо ошибки: «Код уже использован», дата и время первого погашения, а рядом действие — связаться с поддержкой или посмотреть другие предложения. Голый технический отказ провоцирует спор на кассе, а отметка о времени сразу показывает, было это ошибкой персонала или попыткой пройти дважды.
Спасает ли одноразовый код от скриншотов и пересылок?
Не от копирования, а от выгоды копирования. Картинку можно переслать хоть тысяче человек, но погасить её сможет только тот, кто успел первым, — остальные получат отказ. Побочный эффект неприятный: если код утёк, законный владелец рискует прийти к уже погашенному билету. Против этого работает привязка к имени или заказу и проверка документа на входе.
Как выпустить много одноразовых кодов сразу?
Через генерацию партии: сервис создаёт нужное число уникальных токенов и отдаёт готовые изображения, а печать подставляет каждому свой символ. Ключевое требование — уникальность в пределах тиража и предсказуемая длина токена: чем он короче, тем меньше версия кода и тем лучше он читается с мелкой этикетки. Перед печатью тираж стоит проверить выборочно: отсканировать десяток кодов из разных мест партии.
Можно ли вернуть погашенный код к жизни?
Да, если сервис позволяет менять статус вручную. Это нужно чаще, чем кажется: гость отказался от заказа, кассир погасил купон по ошибке, оборудование сработало дважды. В админке статус переводят обратно в «выпущен», и код снова работает. Важно, чтобы такие операции попадали в журнал с указанием, кто и когда их сделал, — иначе ручной откат превращается в дыру в учёте.
Автор материала
Андрей СамойловЭксперт по QR-кодам и SaaS-маркетингу. 10 лет в SaaS, маркетинге и ИТ.
Об авторе и все материалы