Мне нужно было напечатать 300 QR-кодов с подписями. Оказалось, что бесплатно это не делает почти никто

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

Так я узнал, что «бесплатный генератор QR-кодов» это обычно рекламный заголовок, а не описание продукта. И сделал свой. Он называется Ку-Ку Код (qqkod.ru), и в этом посте я расскажу, что внутри и какие грабли встретились по дороге.

Что делает сервис

Мне нужно было напечатать 300 QR-кодов с подписями. Оказалось, что бесплатно это не делает почти никто

Одну вещь: превращает список данных в готовые к печати листы с QR-кодами.

Вставляете список ссылок, по одной на строку, или перетаскиваете файл: TXT, CSV, Excel. Сервис проверяет каждую строку, показывает отчет об ошибках с номерами, раскладывает коды сеткой по листам и отдает файл. До 1500 кодов за запуск.

Мне нужно было напечатать 300 QR-кодов с подписями. Оказалось, что бесплатно это не делает почти никто

Под каждым кодом печатается подпись из второй колонки файла: «Стол 5», «Стеллаж 12», артикул. Звучит мелочью, но именно подписи отличают рабочий тираж от лотереи «какой код от какого стеллажа».

Кроме ссылок кодируются телефоны, SMS, произвольный текст, Wi-Fi (телефон сам предлагает подключиться к сети) и визитки vCard. На выходе PDF для печати, векторный SVG для типографии или ZIP с отдельным PNG на каждый код.

Мне нужно было напечатать 300 QR-кодов с подписями. Оказалось, что бесплатно это не делает почти никто

Технические решения, которыми доволен

Только статические коды. В код зашивается ровно то, что вы ввели, без редиректов через мой домен. Это осознанный отказ от «динамических QR» с их статистикой: динамический код живет, пока жив сервис-посредник и оплачена подписка. Напечатанная на упаковке ссылка не должна зависеть от моего аптайма.

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

Логотип без риска. Логотип в центре кода автоматически включает максимальный уровень коррекции ошибок, а его размер ограничен четвертью стороны. Сломать код загрузкой логотипа не получится. SVG-логотипы не принимаются сознательно: инлайн-вектор в превью это готовая XSS-дыра, растрируйте в PNG.

Проверка контраста. Цвета кода и фона настраиваются, но сервис считает контраст по WCAG и не даст сделать светло-желтый код на белом: камера такое не читает, а пользователь узнал бы об этом после печати тиража.

Мне нужно было напечатать 300 QR-кодов с подписями. Оказалось, что бесплатно это не делает почти никто

Грабли

Кириллические домены. Хотелось, чтобы «пример.рф/меню» работал без ручного ввода схемы и чтобы камера показывала человеку кириллицу вместо punycode. Валидация через punycode, в код уходит юникодная форма: звучит просто, отладка заняла вечер.

Числовые ячейки Excel. Телефон 79991234567 в числовой ячейке Excel при наивном чтении превращается в 7,99912E+10. Пришлось добираться до исходных значений ячеек в обход отображаемых.

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

Что дальше

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

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

Попробовать: qqkod.ru

1