Генератор QR-кодов
Создайте QR-код и увидьте решения за ним: разбиение на режимы, версию, уровень коррекции, оценки восьми масок и цену логотипа в центре.
https://seladevtools.com/qr-code-generator
Версия 3 · 29×29 модулей · уровень M · маска 7
- Версия
- 3 · 29×29 модулей
- Уровень
- M
- Маска
- 7 (наименьший штраф)
- Данные
- 348 из 352 бит
- Кодовые слова
- 44 данных + 26 коррекции, в блоках: 1
Сегменты
| Режим | Символы | Биты |
|---|---|---|
| byte | 42 | 348 |
Штрафы масок
| Маска | Цепочки | Блоки | Похожие на узор | Баланс | Итого |
|---|---|---|---|---|---|
| 0 | 325 | 351 | 120 | 0 | 796 |
| 1 | 331 | 375 | 280 | 0 | 986 |
| 2 | 294 | 345 | 280 | 0 | 919 |
| 3 | 322 | 345 | 160 | 0 | 827 |
| 4 | 330 | 330 | 120 | 0 | 780 |
| 5 | 312 | 348 | 160 | 0 | 820 |
| 6 | 322 | 351 | 320 | 0 | 993 |
| 7 | 289 | 273 | 160 | 0 | 722 |
Четыре правила штрафуют длинные цепочки одного цвета, блоки 2×2, последовательность 1:1:3:1:1, которую сканер принимает за поисковый узор, и долю тёмных модулей далеко от половины. Побеждает наименьший; щелчок по строке задаёт маску.
В каждом QR-коде спрятаны четыре решения
Вставьте текст в генератор QR-кодов, и на выходе получится чёрно-белый квадрат. Чего вам не покажут — что кодировщик только что принял за вас четыре отдельных решения, каждое из которых меняет результат и каждое из которых могло быть другим.
Этот инструмент показывает все четыре, потому что в них и есть самое интересное. Как только их видно, поведение, которое казалось произволом — код скачком вырос от одного символа, логотип работает на одном коде и не работает на следующем, — перестаёт быть произволом.
- Разбиение на режимы: стандарт задаёт четыре способа упаковки символов, и ваш текст делится между ними.
- Версия: число от 1 до 40, задающее сетку от 21×21 до 177×177 модулей.
- Уровень коррекции ошибок: L, M, Q или H — сколько символа можно разрушить, чтобы он всё ещё читался.
- Маска: один из восьми узоров, накладываемых на данные операцией XOR, чтобы разбить фигуры, сбивающие сканер с толку.
Ни одно из четырёх не дело вкуса. У каждого есть верный ответ при заданных остальных, и именно поэтому за ними стоит следить: они взаимодействуют.
Разбиение текста — задача о кратчайшем пути
Числовой режим тратит 10 битов на каждые три цифры. Буквенно-цифровой тратит 11 битов на каждые два символа из набора в 45: цифры, заглавные буквы, пробел и девять знаков препинания. Байтовый режим тратит 8 битов на байт UTF-8. Режим kanji тратит 13 битов на символ, на который байтовый потратил бы 24.
Поэтому самое дешёвое кодирование редко бывает одним режимом на всю строку — но и переключение не бесплатно, ведь каждый сегмент платит за четырёхбитный индикатор режима и поле счётчика символов. Стоит ли выделять цепочку цифр, зависит от её длины. Это делает разбиение задачей о кратчайшем пути, и здешний кодировщик решает её точно, а не угадывает по эмпирическому правилу.
HELLO12345678901234567890 as one alphanumeric segment 4 + 9 + (11 x 12) + 6 = 151 bits split at the digits 4 + 9 + (11 x 2) + 6 = 41 bits 4 + 10 + (10 x 6) + 7 = 81 bits total = 122 bits
Двадцать девять битов, а на версии 1 это разница между «влезло» и «не влезло». Таблица сегментов на странице показывает разбиение, которое кодировщик выбрал на самом деле, и цену каждого сегмента — так видно, какие символы дорогие.
Версия и разбиение гоняются друг за другом
Вот тонкость, из-за которой наивный кодировщик ошибается. Поле счётчика символов не фиксированной ширины. Для байтового режима это 8 битов в версиях с 1 по 9 и 16 битов начиная с версии 10; числовой проходит через 10, 12 и 14 на тех же границах.
Значит, цена разбиения зависит от версии, а версия — от цены разбиения. Выход в том, что групп версий всего три: разбиение считается по одному разу для каждой группы, и побеждает наименьшая версия, в которую хоть одно из них помещается.
- Версии 1–9: числовой 10 битов, буквенно-цифровой 9, байтовый 8, kanji 8.
- Версии 10–26: числовой 12, буквенно-цифровой 11, байтовый 16, kanji 10.
- Версии 27–40: числовой 14, буквенно-цифровой 13, байтовый 16, kanji 12.
Маску выбирают четыре правила штрафа
Данные в QR-коде близки к случайным, а случайные чёрное и белое порождают фигуры, которые сканер может принять за структурные узоры, которые он ищет. Лекарство — наложить на область данных регулярный узор операцией XOR, чтобы эти фигуры разбить. Узоров восемь, и кодировщик пробует все.
Каждый замаскированный символ оценивается четырьмя правилами из стандарта, и побеждает наименьшая сумма. Таблица на странице показывает все восемь оценок с разбивкой по правилам, а щелчок по строке задаёт эту маску, чтобы увидеть результат.
- Цепочки: три очка за пять соседних модулей одного цвета в строке или столбце и по одному за каждый следующий.
- Блоки: три очка за каждую область 2×2 одного цвета.
- Похожие на узор: сорок очков за последовательность 1:1:3:1:1 тёмный-светлый-тёмный-светлый-тёмный рядом с четырьмя светлыми модулями — за узор, похожий на угловые квадраты.
- Баланс: десять очков за каждые полные 5%, на которые доля тёмных модулей отходит от половины.
Здесь реализации слегка расходятся — в том, считается ли узор 1:1:3:1:1 в большем масштабе, и входит ли в оценку информация о формате. Этот кодировщик следует прочтению ZXing, который работает на большинстве телефонных камер, и закреплён двумя независимыми реализациями. Расхождение никогда не даёт недействительный код; оно лишь решает, какая из нескольких прекрасно читаемых масок будет выбрана.
Во что на самом деле обходится логотип в центре
Все повторяют одно правило: уровень H восстанавливает 30%, значит закрыть можно до 30% кода. Это ответ неверной формы, и следование ему рано или поздно выдаст вам код, который не сканируется.
Коррекция ошибок в QR-коде — не один общий запас. Данные делятся на блоки Reed-Solomon, у каждого свои корректирующие кодовые слова, и блоки переплетены по всей сетке, чтобы царапина задела несколько понемногу, а не один сильно. Каждый блок переживает потерю примерно половины своих корректирующих кодовых слов и восстанавливается. Логотип в центре — сплошной квадрат, ровно та фигура, которую переплетение и должно размазывать, — но размазывает оно всегда неравномерно.
Поэтому вопрос не в том, какая доля символа закрыта. Вопрос в том, сколько потерял самый пострадавший блок. Эта страница знает, какому кодовому слову принадлежит каждый модуль и из какого блока пришло каждое кодовое слово, поэтому отвечает напрямую: загрузите логотип, и она покажет ущерб по блокам и запас у худшего.
- Закрыть поисковый узор, узор синхронизации или информацию о формате — вопрос не запаса: они не несут коррекции вовсе, а сканер, который их не нашёл, до исправления просто не доходит.
- Половина кодовых слов — верхняя граница. Печать, блики, кривые поверхности и износ тратят тот же запас, и код, который на экране ровно на пределе, на кружке уже за пределом.
- Поднять уровень до H ради большего логотипа — значит увеличить символ, а значит уменьшить каждый модуль при той же печатной ширине; иногда это потеря, а не выигрыш.
Форматы полезной нагрузки и где они кусаются
QR-код для Wi-Fi или контактная карточка — всего лишь текст в форме, которую узнают сканеры. Формы простые; ломаются реальные коды на правилах экранирования, и ломаются молча: код сканируется прекрасно и выдаёт неверный ответ.
WIFI:T:WPA;S:Cafe\; Bar;P:p\:ssw\,rd;; BEGIN:VCARD VERSION:3.0 N:Lovelace;Ada;;; FN:Ada Lovelace ORG:Analytical Engines\, Ltd END:VCARD
В формате Wi-Fi точка с запятой завершает поле, поэтому пароль с ней обрезает учётные данные, если её не экранировать, — как и запятая, двоеточие, кавычка и обратная косая черта. Имя сети из одних шестнадцатеричных цифр нужно взять в кавычки, иначе оно читается как шестнадцатеричное значение, а не как текст. В vCard разделители — точка с запятой и запятая, строку длиннее 75 октетов нужно свернуть на строку продолжения, начинающуюся с пробела, а конец строки — CRLF.
Здешние сборщики применяют всё это и сообщают, что сделали, вместо того чтобы молча переписать ваш ввод. Если под полями появилось замечание, значит что-то в вашем тексте потребовало обработки — а это обычно стоит узнать до печати тысячи наклеек.
Частые вопросы
- Почему код так вырос от одного добавленного символа?
- Потому что изменилось разбиение на режимы, версия или и то и другое. Одна строчная буква в строке из заглавных способна вытолкнуть целый сегмент из буквенно-цифрового режима в байтовый, а это восемь битов на символ вместо пяти с половиной. Переход с версии 9 на 10 отдельно расширяет каждое поле счётчика символов. Таблица сегментов показывает, куда ушли биты.
- Какой уровень коррекции ошибок выбрать?
- M — разумное значение по умолчанию и то, что используют большинство кодов в жизни. Берите Q или H, когда код печатается мелко, на кривой поверхности, на предмете, который берут в руки, или когда вы закрываете центр логотипом. Берите L только когда нагрузка длинная, а код читается с экрана. Более высокие уровни не делают код надёжнее бесплатно: они увеличивают символ при тех же данных, а больший символ при той же ширине печати имеет более мелкие модули.
- Какого размера логотип можно поставить в центр?
- Загрузите его, и страница ответит, потому что честный ответ зависит от версии, уровня и того, куда легли блоки. Чего она не сделает — не повторит правило 30%, которое про кодовые слова, а не про площадь, и про весь символ, а не про худший блок. Для начала: 15% стороны на уровне H обычно комфортно, а 25% обычно нет.
- Правда ли заглавные буквы в ссылке уменьшают код?
- Часто да. В буквенно-цифровом режиме нет строчных букв, поэтому ссылка в нижнем регистре уходит в байтовый режим по восемь битов на символ, а в верхнем помещается в буквенно-цифровой по пять с половиной. Схема и хост нечувствительны к регистру, так что HTTPS://EXAMPLE.COM работает ровно как https://example.com, — но путь чувствителен, и трогать его нельзя. Страница измеряет выигрыш на вашей конкретной ссылке и предлагает замену только когда она помогает.
- Стоит ли режим kanji для японского текста?
- Да — 13 битов на символ там, где байтовый режим UTF-8 тратит 24, так что японский текст выходит почти вдвое короче. Режим покрывает двухбайтовый диапазон Shift_JIS, куда входят кана, иероглифы JIS X 0208, а также греческий и кириллица. Эта страница подгружает таблицу соответствия только когда ваш текст не чистый ASCII, поэтому код со ссылкой её никогда не скачивает.
- Включать ли объявление UTF-8?
- Обычно нет. Стандарт говорит, что байтовый режим — это ISO-8859-1, если заголовок ECI не сказал иного, но на практике любой сканер этого века считает его UTF-8, и именно это кодировщик и пишет. Явное объявление стоит 12 битов и сбивает с толку часть старых промышленных читалок. Включайте, если целитесь в конкретную читалку, которая документирует поддержку ECI.
- Почему нет Micro QR и составного кода?
- Оба есть в стандарте, и оба выдали бы вам нечто несканируемое. Micro QR — отдельная символика со своими таблицами ёмкости, набором масок и кодированием формата, и большинство камерных приложений её не читают. Structured Append разносит нагрузку по шестнадцати символам, которые практически ни один потребительский сканер не собирает обратно. Если данные не помещаются в версию 40, ответ — положить в код ссылку, а данные оставить за ней.
- Насколько мелко можно печатать QR-код?
- Обычно советуют модуль не меньше 0,4 мм для печати и размер кода около десятой доли расстояния сканирования, делённой на размер версии, — но практическое ограничение это тихая зона. Стандарт требует четыре модуля чистого поля со всех сторон, и самый частый реальный отказ — код, вплотную придвинутый к другой графике. Версия и число модулей, показанные на странице, и есть то, что нужно для этой арифметики.