Alphanumeric mode (QR)
Alphanumeric mode — режим кодирования QR с алфавитом из 45 символов (0–9, A–Z, спец. знаки). 11 бит на 2 символа, до 4296 символов в QR-40. Только верхний регистр.
Что такое alphanumeric mode
Alphanumeric mode — один из четырёх базовых режимов кодирования данных в QR-коде, определённых стандартом ISO/IEC 18004. Идентификатор режима в битовом заголовке символа: 0010. Режим предназначен для компактной упаковки текста, состоящего исключительно из прописных латинских букв, цифр и ограниченного набора специальных знаков.
Кодировщик QR-кода выбирает режим автоматически, анализируя содержимое входной строки. Если все символы входят в алфавит alphanumeric — применяется этот режим как более эффективный. Если хотя бы один символ выходит за его пределы (например, строчная буква или кириллица), кодировщик переключается на byte mode.
45-символьный алфавит
Alphanumeric mode поддерживает ровно 45 символов, каждому из которых стандарт присваивает числовое значение от 0 до 44:
| Группа | Символы | Значения |
|---|---|---|
| Цифры | 0–9 | 0–9 |
| Буквы (верхний регистр) | A–Z | 10–35 |
| Специальные знаки | пробел, $, %, *, +, -, ., /, : | 36–44 |
Пары символов кодируются одним блоком из 11 бит по формуле значение1 × 45 + значение2. Одиночный символ в конце нечётной строки кодируется 6 битами. Это даёт среднюю плотность 5,5 бит на символ — заметно лучше, чем 8 бит у byte mode для того же ASCII-символа.
Эффективность хранения
Alphanumeric mode на 30–40% компактнее, чем byte mode, при передаче строк из разрешённого набора символов. Ёмкость QR-кода версии 40 с уровнем коррекции L в этом режиме составляет 4296 символов — против 2953 байт у byte mode при тех же версии и уровне.
Для сравнения: numeric mode (только цифры) ещё плотнее — 3,33 бит/символ. Но он не принимает буквы. Alphanumeric занимает среднее положение: шире alphabet numeric, уже byte. Выбор режима напрямую влияет на версию QR-кода, а значит — на размер и сложность матрицы.
| Режим | Бит/символ | Ёмкость в QR-40 L |
|---|---|---|
| Numeric | ~3,33 | 7089 цифр |
| Alphanumeric | 5,5 | 4296 символов |
| Byte | 8 | 2953 байта |
Когда выбирать alphanumeric mode
Режим подходит для данных, которые изначально содержат только прописные буквы и допустимые спецсимволы:
- Серийные номера и артикулы — промышленная маркировка типа
SN-2024-AX7B, коды складской логистики. - URL в верхнем регистре — некоторые системы генерируют ссылки вида
HTTP://EXAMPLE.COM/PROMO/123. Именно поэтому QR-коды на упаковке часто содержат URL заглавными буквами: это не стилистика, а техническое решение для экономии битов. - Коды лотерей и акционные купоны — строки типа
SALE2024WINTERилиCODE-1234-XYZ. - Идентификаторы без чувствительности к регистру — когда принимающая система сама приводит к upper case.
Если контент содержит строчные буквы, кириллицу, спецсимволы вне алфавита (например, @, &, #) или произвольный бинарный поток — alphanumeric не подойдёт. Здесь нужен byte mode, который покрывает весь Latin-1 и UTF-8 через многобайтовое кодирование.
Практически это означает: ссылку https://qrkoder.ru/promo нельзя закодировать alphanumeric (строчные буквы, нет https с двоеточием в нижнем регистре как :// — двоеточие есть, но https нижний регистр блокирует). Зато HTTPS://QRKODER.RU/123 — уже можно, это снижает версию QR-кода и делает матрицу меньше.
Частые вопросы
Почему в alphanumeric mode нет строчных букв?
Стандарт ISO/IEC 18004 формировался в начале 1990-х под задачи промышленной автоматической идентификации. Основная сфера применения тогда — маркировка автомобильных деталей на производстве Toyota. В этом контексте все идентификаторы были прописными ASCII. Включение строчных букв удвоило бы алфавит (с 45 до ~71 символа), что уменьшило бы эффективность кодирования. Было принято решение: строчные переходят в byte mode, а alphanumeric остаётся компактным режимом для верхнего регистра. Это разделение сохраняется во всех редакциях стандарта, включая ISO/IEC 18004:2015.
Можно ли вручную выбрать режим кодирования в QR-генераторе?
Большинство онлайн-генераторов, включая QRkoder, выбирают режим автоматически — анализируют входную строку и применяют минимально достаточный режим. Ручное управление режимом доступно в программных библиотеках: например, в qrcode (Python) или @liquid-js/qr-code-styling (JavaScript) можно явно передать сегменты данных с указанием режима. Это полезно при смешанном кодировании (mixed mode): часть строки цифровая — numeric, часть — буквенная, alphanumeric. Кодировщик тогда разбивает данные на сегменты и минимизирует суммарный объём битов.
Почему URL в QR-коде иногда набирают заглавными буквами?
Это намеренная оптимизация: URL вида HTTPS://EXAMPLE.COM/PAGE, записанный заглавными буквами, целиком попадает в alphanumeric mode, который в 1,45 раза плотнее byte mode. Результат — QR-код меньшей версии, с более крупными модулями, которые лучше читаются с расстояния или при печати малого формата. Домены и пути в URL нечувствительны к регистру, поэтому переход https:// → HTTPS:// технически корректен. Обратите внимание: если в path есть параметры вида ?ref=promo&id=42 — символ & вне алфавита alphanumeric, и byte mode неизбежен.
Как alphanumeric mode влияет на размер QR-кода?
Режим кодирования напрямую определяет нужную версию QR-кода, а значит — размер матрицы. Одна и та же строка из 20 символов (допустим, HTTP://EXAMPLE.COM/X) займёт версию 1 (21×21) в alphanumeric mode, но потребует версию 2 (25×25) в byte mode. Разница кажется небольшой, но при печати на этикетке 1×1 см это принципиально: более крупные модули снижают риск нечитаемости. На практике разработчики систем маркировки всегда проверяют, укладывается ли идентификатор в alphanumeric, прежде чем передавать строку byte-кодировщику.
Какие специальные символы входят в алфавит alphanumeric?
Стандарт ISO/IEC 18004 включает девять специальных символов: пробел, знак доллара ($), процент (%), звёздочку (*), плюс (+), дефис-минус (-), точку (.), косую черту (/) и двоеточие (:). Именно эти девять знаков достаточны для записи URL верхним регистром, серийных номеров с разделителями и кодов, построенных по шаблону XXXX-NNN/YYYY. Любой другой символ — например, нижнее подчёркивание, собака, решётка или скобки — выведет строку за пределы режима и потребует byte mode.