Главная / QR-коды и штрихкоды / Распознавание QR-кода из изображения
QR-коды

Содержимое QR из загружанной картинки

Загрузите изображение и извлеките данные из QR-кода в удобном текстовом виде.

Бесплатный лимит - 1,00 МБ. Свыше лимита - 50 ₽.

Данные
из QR-кода

Извлеките текст или ссылку из загруженного изображения с QR-кодом.

Изображение
QR-код
Текст

Чтение QR-кода с картинки

Загрузите изображение с QR-кодом и получите декодированные данные в текстовом виде.

Результат
—
После обработки здесь появится результат.

Онлайн-инструмент позволяет мгновенно прочитать содержимое QR из загруженной картинки или скриншота прямо в окне браузера. Сервис решает задачу декодирования двумерного штрихкода в ситуациях, когда изображение уже сохранено на устройстве, а использование камеры смартфона или отдельного аппаратного сканера неудобно. Пользователь загружает графический файл, после чего алгоритм анализирует матрицу модулей и преобразует зашифрованную последовательность в читаемый вид. На выходе отображается чистый текст, веб-ссылка или структурированный блок данных для дальнейшего копирования.

Внешняя камера для такой операции не требуется. Достаточно передать в форму заранее сохраненный файл в формате PNG, JPG, WebP, GIF или BMP.

Прикладная необходимость чтения кода из файла возникает при работе за стационарным компьютером или при получении квитанций, электронных билетов и визиток через мессенджеры на том же мобильном устройстве. Навести объектив телефона на собственный экран физически невозможно, поэтому программный разбор сохраненного изображения становится прямым методом извлечения данных. Кроме того, предварительное декодирование картинки позволяет безопасно проверить полный URL и его параметры до фактического перехода по неизвестной ссылке. Инструмент обрабатывает статические и динамические коды, возвращая исходную текстовую строку без автоматического выполнения скрытых команд.

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

  • прямые ссылки в формате URL для перехода на веб-страницы или скачивания файлов;
  • произвольные текстовые фрагменты, номера купонов, серийные коды и идентификаторы;
  • параметры автоматического подключения к беспроводной сети Wi-Fi с указанием имени сети и пароля;
  • контактные данные электронных визитных карточек в стандартах vCard и MeCard;
  • карточки календарных событий iCalendar, координаты геолокации, платежные реквизиты и ключи двухфакторной аутентификации.
Распознавание QR-кода из изображения

Принцип декодирования и алгоритмы распознавания QR-кода на изображении

Программное чтение двумерного штрихкода из файла в веб-среде опирается на поэтапный разбор растровой графики. Браузер не воспринимает картинку как готовый набор символов, поэтому исходный файл сначала преобразуется в числовую матрицу, пригодную для математического анализа.

На первом этапе обработки графический файл отрисовывается в памяти браузера через элемент HTML5 <canvas> . После рендеринга вызывается метод CanvasRenderingContext2D.getImageData() , который извлекает попиксельные сведения из заданной области холста. Возвращаемый объект содержит одномерный типизированный массив Uint8ClampedArray . В этой структуре каждый пиксель изображения представлен последовательностью из четырех байтовых значений в диапазоне от 0 до 255: красный канал (R), зеленый канал (G), синий канал (B) и альфа-канал прозрачности (A).

Перевод в оттенки серого и бинаризация матрицы

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

Y = 0.299R + 0.587G + 0.114B

Неравномерные весовые коэффициенты учитывают оптическую чувствительность человеческого зрения, которое сильнее реагирует на зеленый спектр и слабее на синий. Если исходный пиксель имеет значения R = 40, G = 45, B = 50, итоговая яркость составит Y = 0.299 * 40 + 0.587 * 45 + 0.114 * 50 = 11.96 + 26.415 + 5.7 = 44.075 . Полученное число округляется до целого значения и заменяет три цветовых канала одним показателем интенсивности света.

Вслед за расчетом яркости выполняется бинаризация - сведение полутоновой картины к двум состояниям: логической единице (черный модуль) и логическому нулю (белый фон). Алгоритмы вычисляют пороговое значение яркости. При глобальной пороговой обработке берется среднее значение по всему снимку, однако на практике чаще применяются адаптивные методы (например, вычисление локального порога в скользящем окне). Локальная оценка компенсирует неравномерное освещение, тени или блики на сфотографированном экране, позволяя точно отделить темные модули от светлой подложки даже при сниженном локальном контрасте.

Программная база браузерного декодирования

Когда двумерный массив битов сформирован, алгоритмы переходят к локализации границ штрихкода, выравниванию сетки и чтению байтовых последовательностей. В современной веб-разработке для реализации этих вычислительных задач применяется стандартный набор технологий клиентской стороны.

Компонент технологии Техническое назначение в процессе распознавания Особенности выполнения в браузере
Нативный интерфейс BarcodeDetector Аппаратно-ускоренный поиск и расшифровка двумерных кодов напрямую через движок браузера Обращается к системным библиотекам операционной системы или графического процессора, снижая нагрузку на центральный процессор, но зависит от поддержки конкретной версией браузера
Специализированные JavaScript-библиотеки (например, jsQR ) Математический анализ массива Uint8ClampedArray , поиск координат кода и извлечение полезной нагрузки Обеспечивают полную кроссбраузерность за счет выполнения чистого кода на стороне клиента без обращения к внешним системным вызовам
Фоновые потоки (Web Workers) Вынос ресурсоемких операций перебора пикселей и бинаризации за пределы основного потока выполнения Предотвращают блокировку пользовательского интерфейса и зависание веб-страницы при обработке фотографий и скриншотов высокого разрешения

После того как алгоритм сопоставляет бинарную сетку с координатами на холсте, считываются сырые биты данных, которые затем преобразуются в итоговую текстовую строку.

Анатомия матрицы QR-кода и влияние стандарта ISO/IEC 18004 на чтение

Способность программного декодера безошибочно выделять полезную нагрузку из двумерной сетки базируется на строгой геометрии, заложенной инженерами компании Denso Wave при создании технологии Quick Response и зафиксированной в международном стандарте ISO/IEC 18004. В отличие от одномерных штрихкодов, считываемых по одной линии, матрица QR-кода содержит данные как по горизонтали, так и по вертикали. Чтобы алгоритм распознавания смог правильно интерпретировать массив пикселей на произвольном изображении, внутри самого кода размещаются фиксированные служебные области, которые служат визуальными якорями при пространственном анализе.

Структурные элементы матрицы модулей

Минимальной неделимой единицей QR-кода является модуль - квадратная ячейка, которая в процессе бинаризации принимает значение логического нуля (светлый квадрат) или единицы (темный квадрат). Размерность матрицы определяется версией стандарта: от минимальной первой версии (21 на 21 модуль) до максимальной сороковой (177 на 177 модулей), с шагом увеличения на 4 модуля с каждой следующей версией. Независимо от плотности и объема закодированной информации, структура всегда включает обязательные функциональные зоны:

  • Поисковые узоры (паттерны позиционирования). Три крупных квадратных маркера, расположенных в верхнем левом, верхнем правом и нижнем левом углах матрицы. Каждый такой узор состоит из вложенных темных и светлых квадратов, которые при пересечении секущей линией под любым углом дают уникальное соотношение ширины чередующихся отрезков 1:1:3:1:1. За счет отсутствия четвертого маркера в правом нижнем углу декодер мгновенно определяет угол поворота кода на картинке (0, 90, 180 или 270 градусов), его точные границы и физический масштаб.
  • Разделители (сепараторы). Узкие полосы шириной в один светлый модуль, отделяющие поисковые узоры от остальной части матрицы. Они предотвращают слияние угловых маркеров с соседними ячейками данных при анализе границ.
  • Выравнивающие маркеры. Дополнительные малые квадратные мишени, которые появляются в матрицах начиная со второй версии стандарта. В крупных кодах может насчитываться до нескольких десятков таких элементов. Их задача - служить опорными точками для математической компенсации перспективных и оптических искажений, возникающих, когда исходный код был сфотографирован под углом или на изогнутой поверхности.
  • Полосы синхронизации. Строго чередующиеся темные и светлые модули, образующие одну горизонтальную и одну вертикальную линии между поисковыми узорами (на шестой строке и в шестом столбце матрицы). Они задают шаг координатной сетки, позволяя определить точный размер одного модуля и скорректировать чтение, если пропорции изображения были нарушены.
  • Зона формата и версии. Служебные последовательности битов, расположенные в непосредственной близости от поисковых узоров. Здесь хранятся сведения о примененной маске скремблирования (необходимой для равномерного распределения темных и светлых участков) и выбранном уровне избыточности, без которых невозможна дальнейшая интерпретация битового потока.
  • Ячейки данных и кодов коррекции. Основная рабочая область матрицы, заполняемая битами полезной нагрузки и проверочными байтами зигзагообразным методом - начиная с правого нижнего угла вверх и вниз попарными столбцами в обход всех служебных паттернов.
  • Светлая зона безопасности (quiet zone). Обязательная пустая рамка вокруг периметра матрицы шириной не менее четырех модулей. Эта область гарантирует, что алгоритм распознавания отделит сам штрихкод от окружающих элементов дизайна, текста или рамки интерфейса на загруженном скриншоте.

Математическая устойчивость и коррекция ошибок Рида-Соломона

Одной из главных инженерных особенностей стандарта ISO/IEC 18004 является применение помехоустойчивого кодирования по алгоритму Рида-Соломона. При генерации QR-кода к исходным информационным байтам добавляются избыточные проверочные кодовые слова (блоки восстановления). На этапе чтения это позволяет математически вычислить и восстановить утраченные биты, даже если часть модулей на изображении оказалась нечитаемой.

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

Уровень коррекции Доля восстанавливаемых данных Влияние на плотность матрицы Типичные условия успешного чтения
Уровень L До 7% кодовых слов Минимальная избыточность, компактный размер модульной сетки Чистые цифровые изображения, прямые скриншоты экрана без искажений и перекрытий
Уровень M До 15% кодовых слов Умеренное количество проверочных блоков, стандартный баланс плотности Универсальное применение для большинства цифровых макетов и фотографий в нормальных условиях
Уровень Q До 25% кодовых слов Заметное усложнение сетки и уменьшение полезной емкости Изображения с локальными потертостями, частичным затенением или небольшими графическими вставками
Уровень H До 30% кодовых слов Максимальная плотность модулей за счет большого числа дублирующих битов Коды с крупным логотипом в центре (перекрывающим до трети площади) или кадры со сложными дефектами поверхности

Важно учитывать, что резерв восстановления распространяется исключительно на область данных. Если повреждение или перекрытие затрагивает три угловых поисковых узора или зону информации о формате, алгоритм не сможет построить базовую координатную сетку даже при максимальном уровне H.

Разграничение стандартного QR-кода и смежных матричных форматов

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

Формат штрихкода Ключевой визуальный признак Архитектурное отличие от стандарта QR
Стандартный QR-код Три квадратных поисковых маркера по углам Квадратная матрица от 21x21 до 177x177 модулей с полосами синхронизации между углами
Micro QR Code Только один поисковый маркер в верхнем левом углу Миниатюрная модификация Denso Wave (от 11x11 до 17x17 модулей) с уменьшенной до двух модулей quiet zone для малых объемов данных
iQR-код Три угловых маркера на квадратной или прямоугольной сетке Расширенный формат, допускающий прямоугольную компоновку модулей и повышенную плотность записи при меньшей площади
Data Matrix Сплошная Г-образная граница с двух смежных сторон и пунктирная с двух противоположных Не имеет квадратных угловых мишеней; ориентация и шаг сетки определяются по внешнему периметру (L-образному поисковому шаблону)
Aztec Один концентрический квадратный узор строго в центре матрицы Распознавание строится от центра к краям вокруг центральной мишени и не требует наличия светлой зоны безопасности по внешнему контуру
PDF417 Вытянутая прямоугольная форма с широкими вертикальными полосами старта и стопа по краям Представляет собой не классическую матрицу, а многострочный стек линейных штрихкодов, читаемый построчно

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

Требования к исходному изображению и факторы точности извлечения

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

Влияние растровых форматов и артефактов сжатия

Способ кодирования графики влияет на резкость переходов между соседними зонами матрицы. При использовании форматов со сжатием с потерями вокруг контрастных краев возникают паразитные полутона и ступенчатые искажения («звон» и блочность). Если плотность записи высокая, такие искажения размывают границы между соседними ячейками, что затрудняет определение координатной сетки при пороговой обработке.

Распространенные графические форматы по-разному сохраняют геометрию штрихкода:

Растровый формат Тип сжатия и хранения данных Влияние на читаемость границ модулей
PNG Сжатие без потерь с поддержкой прозрачности Сохраняет четкие попиксельные границы без размытия; прозрачный фон без подложки на темной теме отображения может нарушить контраст
JPG и JPEG Алгоритм сжатия с потерями, ориентированный на фотографии Создает характерные артефакты вокруг резких черных граней на белом фоне; при сильном сжатии мелкие ячейки сливаются с фоновым шумом
WebP Поддерживает режимы сжатия как с потерями, так и без потерь В режиме без потерь сохраняет эталонную геометрию сетки; при агрессивном сжатии с потерями сглаживает углы и тонкие перемычки
BMP Несжатая или минимально сжатая побитовая карта Передает матрицу пиксель в пиксель без геометрических и цветовых искажений
GIF Сжатие без потерь с ограниченной палитрой до 256 цветов Отлично подходит для двухцветных схем, но при сохранении цветных градиентных кодов может создавать точечный мусор из-за дизеринга

Разрешение, масштаб и контрастность

Для безошибочного вычисления шага сетки каждый элементарный квадрат кода должен занимать на растровом холсте несколько пикселей по ширине и высоте. Если на один модуль приходится всего один пиксель экрана или меньше, любое несовпадение сетки при масштабировании приводит к эффекту ступенчатости (алиасингу), когда черная и белая ячейки сливаются в одну серую точку.

Избыточный масштаб, когда маленький штрихкод занимает крошечную область на огромной фотографии, также усложняет поиск угловых мишеней среди пестрого окружения. Оптимальный вариант входных данных - кадрированный фрагмент или четкий скриншот, где сама матрица занимает основную часть кадра, а переходы между темными элементами и подложкой имеют высокий яркостный контраст.

Сложные случаи визуального оформления и кастомизации

Дизайнерская обработка часто отступает от строгой черно-белой сетки, заложенной базовой спецификацией. При декодировании подобных изображений возникают специфические особенности анализа пикселей:

  • Скругленные пиксели и точки вместо квадратов. Когда строгие квадратные ячейки заменяются кругами, ромбами или плавными линиями со скругленными углами, площадь темной области внутри координатной клетки уменьшается. Чтение остается успешным, если центральная часть каждой клетки сохраняет достаточную плотность цвета, а три угловых поисковых маркера не теряют свои пропорции.
  • Кастомные и арт QR-коды. Встраивание иллюстраций, фоновых картинок или стилизация отдельных модулей под элементы рисунка намеренно вносит искажения в рабочее поле. Расшифровка таких изображений возможна до тех пор, пока художественные элементы не перекрывают служебные зоны и не превышают заложенный при генерации резерв восстановления данных.
  • Нестандартные цветовые схемы и градиенты. Окрашивание модулей в разные цвета снижает разницу яркости между кодом и подложкой. Например, светло-желтые или голубые элементы на белом фоне при переводе изображения в оттенки серого дают почти одинаковую светлоту и перестают различаться как отдельные биты.
  • Инверсия цветов. Классический стандарт предполагает темный узор на светлой подложке. Оформление со светлым кодом на темном фоне (негатив) меняет распределение уровней яркости на противоположное. Для корректного чтения такой структуры при анализе матрицы требуется инвертирование цвета, чтобы светлые ячейки были интерпретированы как логические единицы, а темный фон - как нули.

Основные причины сбоев при распознавании с картинки

Даже при отсутствии видимых повреждений файла извлечение информации оказывается невозможным, если нарушены базовые оптические и геометрические условия чтения:

  • Отсутствие quiet zone. Если при создании скриншота рамка обрезки прошла вплотную к внешним границам угловых маркеров или код сливается с темной рамкой макета, контур матрицы не отделяется от окружающего фона.
  • Сильное размытие и расфокусировка. Смазывание кадра при фотографировании с рук или агрессивное сглаживание при увеличении маленькой картинки превращает четкие грани в плавные градиенты, из-за чего нарушается подсчет ширины чередующихся полос в поисковых узорах.
  • Экстремальный угол наклона и геометрическая деформация. Съемка поверхности под очень острым углом или фотографирование кода на изогнутой упаковке (бутылке, цилиндре, мятой бумаге) приводит к нелинейным искажениям сетки, когда дальние модули сжимаются сильнее, чем это способны компенсировать выравнивающие маркеры.
  • Локальные засветы и блики. Световое пятно от вспышки или отражение лампы на глянцевом экране перекрывает часть ячеек сплошным белым полем; если площадь засвета захватывает угловую мишень или полосы синхронизации, построить координатную сетку по такому изображению нельзя.

Форматы и структуры данных в расшифрованном содержимом QR-кода

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

Статические и динамические коды

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

Статический QR-код хранит конечные данные напрямую в своих модулях. Это может быть длинный фрагмент текста, полная карточка контакта или реквизиты. Чем больше символов входит в такую запись, тем плотнее становится сетка и тем мельче выглядят отдельные элементы на картинке. Изменить эту информацию после создания изображения невозможно: любая правка текста потребует полной перегенерации рисунка.

Динамический QR-код содержит в себе только короткий промежуточный URL. При переходе по этому адресу сервер перенаправляет пользователя на целевой ресурс или выдает нужные данные. За счет малой длины промежуточной ссылки графическая структура такого кода остается простой, разреженной и легко читается даже с картинок невысокого качества, а конечный адрес перенаправления может меняться владельцем ссылки на стороне сервера без замены самого изображения.

Синтаксические шаблоны распространенных типов данных

Для автоматизации действий на смартфонах и компьютерах используются стандартизированные текстовые конструкции. При чтении кода с картинки знание этих шаблонов помогает вручную извлечь нужные параметры (например, скопировать только пароль от сети или номер телефона), не выполняя автоматический сценарий.

Основные форматы данных и их строковые шаблоны представлены в таблице:

Назначение данных Идентификатор или формат Синтаксический шаблон строки
Веб-адреса URL https://example.com/page
Подключение к беспроводной сети Wi-Fi WIFI:S:<SSID>;T:<WPA|WPA2|WEP>;P:<пароль>;;
Контактные данные (полный формат) vCard BEGIN:VCARD ... END:VCARD
Контактные данные (компактный формат) MeCard MECARD:N:<Имя>;TEL:<Номер>;EMAIL:<Почта>;;
Событие календаря iCalendar BEGIN:VEVENT ... END:VEVENT
Вызов телефонного номера URI tel: tel:+1234567890
Отправка электронного письма URI mailto: mailto:user@example.com?subject=Тема&body=Текст
Отправка текстового сообщения URI smsto: smsto:+1234567890:Текст сообщения
Координаты геолокации URI geo: geo:55.7558,37.6173
Двухфакторная аутентификация 2FA URI otpauth://totp/Сервис:Аккаунт?secret=КЛЮЧ&issuer=Сервис

Обычный текст, ссылки и настройки Wi-Fi

Если расшифрованная строка не начинается со специального технического префикса, она воспринимается как обычный неформатированный текст. Это могут быть серийные номера, складские артикулы, цитаты, чеки или произвольные заметки. Для веб-ссылок обязательным маркером служит указание протокола http:// или https:// в самом начале записи; часто внутри встречаются короткие ссылки сервисов сокращения URL, которые скрывают за собой длинные адреса с метками аналитики и параметрами перенаправления.

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

WIFI:S:Office_Net;T:WPA2;P:mySecretPass123;H:false;;

Расшифровка отдельных ключей этой конструкции позволяет подключиться к точке доступа вручную на любом компьютере:

  • S: задает точное имя сети (SSID), к которой нужно выполнить подключение.
  • T: указывает протокол безопасности и тип шифрования ( WPA , WPA2 , WEP или nopass для открытых точек доступа без пароля).
  • P: содержит сам текстовый пароль от беспроводной сети.
  • H: является необязательным параметром (принимает значения true или false ) и сообщает, является ли сеть скрытой. Завершается вся конструкция двойной точкой с запятой ;; .

Электронные визитки и события календаря

Обмен контактами через матричные коды опирается на два текстовых стандарта: подробный многострочный vCard и лаконичный однострочный MeCard. Формат vCard строится из пар «ключ:значение», разделенных переносами строк, и всегда обрамляется тегами начала и конца блока:

BEGIN:VCARD
VERSION:3.0
N:Иванов;Иван;;;
FN:Иван Иванов
ORG:Компания
TEL;TYPE=CELL:+79000000000
EMAIL:ivanov@example.com
END:VCARD

Стандарт MeCard, разработанный компанией NTT DoCoMo, решает ту же задачу, но упаковывает данные в одну компактную строку с разделителями ; . За счет отсутствия служебных переносов строк и избыточных тегов такая запись занимает меньше места в матрице:

MECARD:N:Иванов,Иван;TEL:+79000000000;EMAIL:ivanov@example.com;ADR:Москва;;

Похожим блочным принципом обладает формат расписаний и встреч iCalendar. Событие заключается внутрь структуры BEGIN:VEVENT и END:VEVENT (которая сама может быть вложена в контейнер VCALENDAR ). Внутри перечисляются заголовок мероприятия ( SUMMARY ), место проведения ( LOCATION ), а также точное время начала ( DTSTART ) и окончания ( DTEND ) в формате ГГГГММДДTЧЧММССZ .

URI-схемы для вызова системных действий

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

  • Телефонные вызовы и сообщения. Префикс tel: содержит только абонентский номер в международном или локальном формате. Схема smsto: (или ее аналог sms: ) включает номер получателя и, через двоеточие или знак вопроса с параметром body= , заранее заготовленный текст сообщения.
  • Электронная почта. Схема mailto: хранит адрес получателя, после которого через вопросительный знак могут быть прописаны копия письма ( cc= ), скрытая копия ( bcc= ), тема ( subject= ) и основной текст обращения ( body= ).
  • Географические координаты. Запись с префиксом geo: передает широту и долготу в десятичных градусах, разделенные запятой (например, geo:59.9343,30.3351 ). Иногда третьим числом через запятую указывается высота над уровнем моря либо добавляется параметр масштаба карты ?z= .

Ключи 2FA, платежные реквизиты и коды маркировки

При настройке двухфакторной аутентификации (2FA) сервисы генерируют изображение с кодом для привязки приложения-аутентификатора. Если декодировать такой сохраненный скриншот в текст, внутри окажется строка со схемой otpauth:// :

otpauth://totp/ExampleService:user@example.com?secret=JBSWY3DPEHPK3PXP&issuer=ExampleService&algorithm=SHA1&digits=6&period=30

В этой записи слово totp указывает на генерацию одноразовых паролей по времени (реже встречается hotp - по счетчику событий). Самый важный элемент строки - параметр secret= , содержащий криптографический секретный ключ. Наличие этого ключа в текстовом виде позволяет вручную перенести аккаунт в любой менеджер паролей или аппаратный токен без повторного сканирования картинки камерой, а параметры digits и period задают длину одноразового кода (обычно 6 цифр) и интервал его обновления в секундах.

Специализированные прикладные структуры встречаются на квитанциях, счетах и товарных этикетках. Платежные коды на банковских квитанциях содержат строго упорядоченный набор реквизитов (счет получателя, БИК, ИНН, сумму платежа и назначение), разделенных вертикальной чертой | , или представляют собой ссылку на шлюз системы быстрых платежей. В свою очередь, коды складского учета и государственной маркировки товаров при расшифровке выдают плотную последовательность цифр, букв и специальных символов-разделителей, где зашифрованы глобальный номер товарной позиции (GTIN), индивидуальный серийный номер экземпляра и проверочный криптохвост.

Режимы кодирования символов и интерпретация байтовых последовательностей

Способ упаковки прикладных структур внутри битовой матрицы напрямую влияет на то, насколько плотным получится рисунок и как именно считыватель преобразует сырой поток нулей и единиц обратно в читаемый текст. На уровне спецификации перед каждым блоком полезных данных записывается четырехбитный индикатор режима и счетчик символов. Это позволяет оптимизировать расход емкости матрицы: чем уже алфавит используемых знаков, тем меньше бит тратится на один символ. В одном штрихкоде могут последовательно комбинироваться несколько режимов, если переключать их внутри потока данных для сжатия разных участков строки.

Базовые способы упаковки информации делятся на четыре категории в зависимости от допустимого набора знаков:

Режим кодирования Битовый индикатор Допустимый набор символов Плотность упаковки данных
Цифровой 0001 Только арабские цифры от 0 до 9 Группы по 3 цифры сжимаются в 10 бит (2 цифры - в 7 бит, 1 цифра - в 4 бита)
Буквенно-цифровой 0010 Цифры 0-9, заглавные латинские буквы A-Z, пробел и 9 спецсимволов ( $ % * + - . / : ) Пары символов объединяются и записываются как 11-битные числа (одиночный остаток - 6 бит)
Побайтовый (двоичный формат) 0100 Любые последовательности байтов, включая строчные буквы, кириллицу, эмодзи и бинарные данные 8 бит на один байт (количество бит на видимый символ зависит от текстовой кодировки)
Кандзи 1000 Иероглифы японской письменности из двухбайтового набора Shift JIS 13 бит на один иероглиф вместо стандартных 16 бит

Помимо четырех основных форматов записи, стандарт предусматривает служебные режимы управления потоком данных. Они не несут видимых символов сами по себе, но передают декодеру инструкции по сборке или интерпретации содержимого:

  • Режим ECI (индикатор 0111 ) - передает специальный числовой идентификатор перед блоком данных, который явно указывает используемую кодовую страницу текста, отличную от стандартной по умолчанию.
  • Режим FNC1 (индикаторы 0101 для первой позиции и 1001 для второй) - сигнализирует, что внутри матрицы записана логистическая или товарная структура стандарта GS1, где данные разделены идентификаторами применения переменной длины.
  • Структурированное дополнение (индикатор 0011 ) - позволяет разбить одно объемное сообщение на серию до 16 отдельных матриц. В каждом таком коде хранится его порядковый номер, общее число частей и контрольная сумма всего массива, что дает возможность собрать единый текст при чтении картинок в произвольном порядке.

Текстовые кодировки и причины искажения символов при чтении

Когда при декодировании изображения обнаруживается побайтовый режим, считыватель получает массив восьмибитных чисел. Чтобы превратить эти байты в буквы на экране, необходимо сопоставить их с конкретной таблицей символов. В ранних редакциях стандарта кодировкой по умолчанию для побайтового режима считалась ISO-8859-1 (однобайтовая западноевропейская латиница) или региональный стандарт Shift JIS. В современных реализациях в качестве базового стандарта де-факто используется UTF-8, охватывающий весь спектр символов Unicode.

В кодировке UTF-8 базовые латинские буквы и цифры занимают ровно 1 байт, символы кириллицы, греческого или арабского алфавитов требуют по 2 байта на знак, а сложные иероглифы и эмодзи кодируются последовательностями из 3 или 4 байт. Проблема нечитаемого текста («кракозябр») при расшифровке картинки возникает тогда, когда генератор записал кириллическую строку в побайтовом режиме в кодировке UTF-8 или Windows-1251 без явного заголовка ECI, а декодер попытался прочитать каждый байт по отдельности через таблицу ISO-8859-1. Например, русское слово Тест в UTF-8 состоит из восьми шестнадцатеричных байтов: D0 A2 D0 B5 D1 81 D1 82 . При корректной интерпретации UTF-8 эти пары байтов складываются в четыре кириллические буквы, но при чтении через однобайтовую таблицу ISO-8859-1 на выходе появится бессмысленная последовательность из восьми символов западноевропейского набора: Ð¢ÐµÑ Ñ‚ .

Представление специфических строк: URL-encoding, Punycode и Base64

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

Процентное кодирование (URL-encoding) встречается внутри прочитанных веб-ссылок и платежных URI, когда в адресе или параметрах запроса присутствуют пробелы, кириллица либо зарезервированные знаки. В этом формате каждый нестандартный байт заменяется знаком процента и двумя шестнадцатеричными цифрами его кода в UTF-8. Если после чтения изображения результат содержит строку вида https://example.com/search?text=%D0%BF%D1%80%D0%B8%D0%BC%D0%B5%D1%80 , это означает, что в параметре text= зашифровано кириллическое слово пример . Иногда генераторы специально переводят все буквы ссылки в верхний регистр с процентным кодированием, чтобы принудительно упаковать адрес в компактный буквенно-цифровой режим вместо побайтового.

Схожий механизм действует для интернационализованных доменных имен, содержащих буквы национальных алфавитов. На уровне доменной адресации такие имена записываются с помощью стандарта Punycode, который преобразует символы Unicode в допустимый набор латинских букв, цифр и дефисов. Признаком такой записи служит префикс xn-- в начале доменной зоны или имени сайта. Например, при распознавании кода с кириллическим адресом в текстовом поле может отобразиться строка https://xn--d1acpjx3f.xn--p1ai/ . Это технически точное представление домена, которое браузеры используют для обращения к DNS-серверам.

В кодах фискальных чеков, электронных билетов, цифровых пропусков и сертификатов результаты декодирования часто представляют собой длинную непрерывную строку из латинских букв разного регистра, цифр, символов + и / , которая заканчивается одним или двумя знаками равенства = . Такая структура указывает на использование формата Base64:

eyJpZCI6IjkwNTEyIiwic3RhdHVzIjoidmFsaWQiLCJ0cyI6MTcxMTIwMDAwMH0=

Схема Base64 применяется тогда, когда внутрь текстового поля штрихкода нужно безопасно упаковать бинарные данные, криптографическую электронную подпись, сжатый архив или сериализованный объект без риска повредить управляющие байты при передаче между разными системами. В приведенном примере за строкой Base64 скрывается компактный JSON-объект {"id":"90512","status":"valid","ts":1711200000} . Получение такой строки в текстовом виде позволяет скопировать ее без потерь и передать в специализированный декодер или верификатор для дальнейшего разбора внутренних полей.

Информационная безопасность и проверка данных после чтения QR-кода

Человеческий глаз не способен самостоятельно расшифровать расположение черно-белых квадратов на изображении, поэтому до момента декодирования пользователь не знает, какие именно данные скрыты внутри матрицы. Это свойство используется в атаках типа Quishing, когда злоумышленники маскируют под видом обычных штрихкодов фишинговые ссылки, вредоносные сценарии или поддельные платежные реквизиты. В отличие от текстового URL в электронном письме, где адрес сайта можно прочитать до клика, графический код полностью скрывает целевой ресурс от предварительного визуального контроля.

Сканирование подозрительного кода напрямую через встроенную камеру смартфона несет дополнительные риски. Многие мобильные приложения стремятся ускорить работу пользователя и выполняют переход по ссылке сразу после наведения объектива, либо показывают на экране только сокращенное уведомление, в котором длинный адрес обрезается. Кроме того, QR-коды часто приходят внутри вложений в корпоративной почте или мессенджерах, которые проходят проверку текстовыми спам-фильтрами именно потому, что ссылка представлена в виде растровой картинки, а не строки текста.

Сценарий безопасной проверки через предварительное декодирование скриншота

Извлечение сырого текста из сохраненного изображения или скриншота разделяет процесс чтения данных и процесс их выполнения. Такой подход применяется для безопасной верификации содержимого на настольном компьютере или мобильном устройстве без запуска браузерного перехода, телефонного вызова или почтового клиента.

Практический порядок безопасной проверки неизвестного штрихкода включает следующие шаги:

  • Сохранение подозрительного QR-кода из письма, документа, веб-страницы или сообщения в виде графического файла либо создание скриншота экрана с этим кодом.
  • Загрузка полученного изображения для распознавания и извлечения закодированной информации в виде простой текстовой строки.
  • Визуальный и технический разбор полученного текстового результата до совершения каких-либо действий с указанными в нем ресурсами.

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

Анализ структуры URL и выявление признаков маскировки

Большинство угроз связано с перенаправлением пользователя на поддельные страницы авторизации, формы ввода банковских карт или ресурсы с автоматической загрузкой файлов. При проверке декодированной строки основное внимание уделяется разбору составных частей сетевого адреса.

Ниже приведены основные элементы прочитанной строки и признаки, на которые следует обращать внимание при ручной проверке безопасности:

Элемент декодированной строки Что проверять в сыром тексте Признаки потенциальной угрозы
Протокол передачи данных Начало строки перед двоеточием и косыми чертами Использование незашифрованного протокола http:// вместо защищенного https:// на страницах оплаты или ввода паролей, а также наличие нестандартных схем вызова приложений.
Основное доменное имя Участок адреса между двойным слэшем :// и первым одиночным слэшем / , читаемый справа налево от доменной зоны Замена букв похожими символами (например, rn вместо m , цифра 0 вместо буквы O ), добавление лишних слов через дефис к известному бренду, использование чужих доменных зон.
Поддомены третьего и более уровней Часть строки слева от основного домена, отделенная точками Попытка выдать поддомен за главный сайт, например: https://login.bank-name.com.attacker-site.net/ , где реальным владельцем ресурса является attacker-site.net .
Путь и параметры запроса Часть URL после домена, начинающаяся со знака вопроса ? и разделенная амперсандами & Наличие параметров открытого перенаправления ( ?redirect= , ?url= , ?next= ), внутри которых спрятан второй, сторонний адрес, куда пользователь попадет после перехода.
Символ @ в адресе Присутствие знака коммерческого at внутри первой части URL Конструкция вида https://trusted-site.com@malicious-domain.org . Браузеры воспринимают текст до символа @ как имя пользователя, а фактический переход осуществляют на адрес, указанный после него.

Отдельного внимания при чтении сырого текста требуют короткие ссылки и адреса с префиксом xn-- . Если в результате декодирования получен сокращенный URL, по самой строке невозможно понять конечный пункт назначения, однако наличие текстового адреса позволяет проверить, куда именно ведет переадресация, не открывая ссылку в основном рабочем профиле браузера. В случае с Punycode проверка сырой строки помогает выявить подмену символов разных алфавитов, когда внешне идентичная буква из другой языковой раскладки превращает известный бренд в совершенно другой технический домен.

Проверка скрытых команд, системных префиксов и платежных данных

Помимо веб-ссылок, злоумышленники могут закладывать в матрицу управляющие инструкции для мобильных операционных систем или искаженные финансовые реквизиты. Предварительное чтение кода из картинки позволяет перехватить такие инструкции в текстовом виде и оценить их безопасность:

  • Вызовы и отправка сообщений. В строке с префиксами tel: или smsto: проверяется конечный номер получателя и заранее подготовленный текст сообщения. Вредоносные коды могут инициировать звонки на платные сервисные номера или отправку команд подтверждения перевода средств по SMS.
  • Конфигурации беспроводных сетей. В строках подключения WIFI: анализ открытого текста позволяет увидеть точное имя сети и тип шифрования до того, как устройство попытается подключиться к поддельной точке доступа с таким же названием, перехватывающей сетевой трафик.
  • Платежные поручения и переводы. При распознавании квитанций в текстовом поле отображаются полные банковские реквизиты: номер счета получателя, идентификатор организации, назначение платежа и фиксированная сумма. Сверка этих цифр с бумажным оригиналом счета или договором защищает от подмены реквизитов, когда поверх легитимного штрихкода наклеивается или накладывается в графическом редакторе сторонний код.
  • Системные USSD-запросы. В сыром тексте можно вовремя заметить комбинации, содержащие символы решетки # и звездочки (часто в процентном кодировании %23 ), которые на некоторых устройствах способны вызывать сервисные меню оператора связи или управлять переадресацией вызовов.

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

Нужен другой
инструмент?

Откройте раздел QR-кодов и штрихкодов и выберите инструмент для другой задачи.

Все QR-инструменты