Шрифт превращает набранный текст в штрихкод — и сам считает контрольную сумму EAN-13
Проект Libre Barcode предлагает шрифты, которые рендерят сканируемые штрихкоды прямо из текста: Code 39, Code 128 и EAN-13. Хитрость в том, что контрольная сумма EAN-13 считается внутри самого шрифта через фичи OpenType. Самый опытный голос в треде резюмировал: лучше не надо.
Шрифты для штрихкодов существуют давно, но в Libre Barcode контрольный разряд EAN-13 вычисляется прямо внутри типографских фич шрифта — пользователь вводит цифры и получает готовый код. Шрифты доступны через Google Fonts.
Практикующий инженер, который реально внедрял Code 128, предупреждает: сгенерировать корректный Code 128 как SVG требует примерно столько же усилий, и по-настоящему сложная часть задачи — переключение между кодировочными таблицами — как раз то, с чем шрифт справляется плохо.
Штрихкод, который можно напечатать
Проект Libre Barcode выпускает шрифты, которые превращают текст в сканируемые штрихкоды — Code 39, Code 128 и EAN/UPC (EAN-13), с человекочитаемыми цифрами под кодом и без, — распространяемые через GitHub и Google Fonts. Главная изюминка, которую заметил один из читателей: шрифт «умеет самостоятельно считать контрольную сумму EAN-13», перекладывая логику в фичи OpenType — то, что старые шрифты для штрихкодов оставляли пользователю. Один известный хакер отреагировал с нескрываемым восторгом от изощрённости решения: «Это извращение самого тошнотворного свойства. Отлично сделано!»
«Не делайте этого, если есть хоть какой-то выбор»
Самый полезный комментарий оказался предупреждением от человека, явно поставившего штрихкоды в реальной жизни. Инженер, реализовывавший Code 128, объяснил, почему подход с шрифтом — ловушка:
«Сгенерировать корректный Code 128 в виде SVG — примерно столько же работы, сколько подготовить правильный ввод для какого-нибудь шрифтового штрихкодера. Трудная часть — определить переключения между кодировочными таблицами, а не превратить байты в полоски.»
Иными словами, шрифт берёт на себя лёгкую половину задачи и оставляет вам трудную. Второй читатель распространил этот тезис на плотные двумерные форматы: самостоятельный подсчёт контрольной суммы — это приятно, но «удачи с чем-нибудь вроде Reed-Solomon (QR, Data Matrix)».
Почему об этом всё равно стоит знать
Честная оценка такова: это красивое типографское решение с узкой зоной применения. Для простого ярлыка EAN-13, когда принтер не умеет генерировать коды сам, шрифт с встроенной контрольной суммой реально выручает; для задач с переключением кодировочных таблиц или двумерной коррекцией ошибок опытные участники треда возьмут полноценный генератор. Самый занятный момент к печати не относился вовсе: один читатель рассказал, как с помощью генератора штрихкодов создал специальный код, который перепрограммирует дешёвый сканер на чтение как UPS, так и FedEx-трекинговых номеров. Штрихкоды, как выясняется, куда более глубокая кроличья нора, чем выглядит по шрифту.
Получайте такие разборы каждый день
Главные истории Hacker News — на email, в Telegram или RSS.
«Читать новости — это новое курение»: тред спорит, привилегия ли бросить
Адам Мастроянни бросил новости в 2020-м и говорит, что в голове «стало тише». Его аргумент: новости вызывают зависимость, разрушают нервы, вредят окружающим — совсем как сигареты. Технический директор ProPublica отвечает: если не реагировать на геноцид, значит, он вам безразличен.