Генератор QR-кодов

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

Содержимое
Что кодируется на самом деле
https://seladevtools.com/qr-code-generator
Код

Версия 3 · 29×29 модулей · уровень M · маска 7

Параметры
Коррекция ошибок
Цвета
Логотип
Что решил кодировщик
Версия
3 · 29×29 модулей
Уровень
M
Маска
7 (наименьший штраф)
Данные
348 из 352 бит
Кодовые слова
44 данных + 26 коррекции, в блоках: 1

Сегменты

РежимСимволыБиты
byte42348

Штрафы масок

МаскаЦепочкиБлокиПохожие на узорБалансИтого
03253511200796
13313752800986
22943452800919
33223451600827
43303301200780
53123481600820
63223513200993
72892731600722

Четыре правила штрафуют длинные цепочки одного цвета, блоки 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 мм для печати и размер кода около десятой доли расстояния сканирования, делённой на размер версии, — но практическое ограничение это тихая зона. Стандарт требует четыре модуля чистого поля со всех сторон, и самый частый реальный отказ — код, вплотную придвинутый к другой графике. Версия и число модулей, показанные на странице, и есть то, что нужно для этой арифметики.