Ёмкость данных QR-кода
Максимальное количество символов, которое можно зашифровать в QR-коде — зависит от версии (1–40), уровня коррекции (L/M/Q/H) и режима кодирования (числовой, алфанумерический, байтовый, кандзи).
Что такое ёмкость данных QR-кода
Ёмкость данных QR-кода — максимум информации, помещающейся в матрицу. ISO/IEC 18004 задаёт её через три параметра: номер версии (1–40), уровень коррекции (L/M/Q/H) и режим кодирования (Numeric, Alphanumeric, Byte, Kanji).
Максимум по режимам (V40+L)
| Режим | Содержимое | V40+L | V40+H |
|---|---|---|---|
| Numeric | 0–9 | 7089 цифр | 3057 |
| Alphanumeric | 0–9, A–Z, спец | 4296 | 1852 |
| Byte | UTF-8 | 2953 байт | 1273 |
| Kanji | Shift-JIS | 1817 | 784 |
Numeric пакует 3 цифры в 10 бит, Alphanumeric — пары в 11 бит, Byte — 8 бит/символ. При ECL-H ёмкость падает в 2,5 раза: место уходит под Reed-Solomon.
Ёмкость по версиям
| Версия | Размер | Numeric (L) | Numeric (H) | Byte (M) |
|---|---|---|---|---|
| 1 | 21×21 | 41 | 17 | 14 |
| 5 | 37×37 | 255 | 108 | 106 |
| 10 | 57×57 | 652 | 271 | 271 |
| 40 | 177×177 | 7089 | 3057 | 2331 |
В Byte-режиме URL `qrkoder.ru/r/abc123` после служебных бит — ~30 байт, влезает в V2. Кириллический vCard на 100 «символов» в UTF-8 раздувается до 200+ байт (русская буква = 2 байта, эмодзи 3–4) и требует V6–7. Для компактного QR-кода — короткие ссылки и латиница.
Частые вопросы
Сколько максимум данных помещается в QR-код?
Абсолютный максимум — V40 (177×177) при ECL-L: 7089 цифр, 4296 алфанумерических, 2953 байта или 1817 иероглифов. Версия 40 на практике почти не используется: код трудно сканировать камерой, нужен размер от 5×5 см. Реальные задачи решаются V5–15 с ёмкостью 100–500 байт — этого хватает для URL, vCard, Wi-Fi и СБП.
Почему при ECC-H ёмкость падает в 2,5 раза?
ECL-H отдаёт 30% площади под Reed-Solomon. В V40 при ECL-L данным выделено 2956 кодовых слов, при ECL-H — 1276, в 2,3 раза меньше. Для Byte это падение с 2953 до 1273 байт. Если данных много и нужна устойчивость, выбирайте Q (25%) — он режет ёмкость в 1,7 раза и при этом покрывает небольшой логотип в центре.
Как генератор выбирает режим кодирования?
Генератор берёт самый плотный режим, охватывающий все символы строки: только цифры — Numeric, цифры+заглавная латиница — Alphanumeric, иначе — Byte. Продвинутые библиотеки делают сегментацию: режут строку на участки и кодируют каждый отдельно. Так "ID12345-ABC" делится на Numeric "12345" и Alphanumeric "ID-ABC", экономя до 30% бит против чистого Byte.
Сколько байт занимает кириллица?
В Byte-режиме UTF-8: русская буква — 2 байта, латиница — 1 байт. «Привет» — 12 байт, «Hello» — 5 байт. «Здравствуйте, как дела?» — около 42 байт. Эмодзи и редкие символы — по 3–4 байта. Кириллический vCard почти всегда требует на 1–2 версии больше, чем латинский. Shift-JIS Kanji (13 бит/иероглиф) на нашу кириллицу не подходит.
Что если данные не влезли в версию?
Генератор переключится на следующую версию (V+1, V+2 ...) или вернёт «data too long» в режиме fixed version. Каждая следующая версия — это +4 модуля по стороне. Если версия зафиксирована и данных слишком много: сократить нагрузку (короткая ссылка), снизить ECC (H→M освобождает ~50%), или сменить режим — Byte→Numeric для цифр даёт почти трёхкратный выигрыш.