Штрих-коды: типы и генерация
Виды штрих-кодов: EAN, UPC, Code128, QR. Где используются, как генерировать, стандарты.
Введение
Штрих-код — это графическое представление данных, которое машина (сканер или камера) может прочитать за доли секунды. Сегодня штрих-коды стоят на каждой упаковке товара, билете, посылке, рецепте и даже лабораторном образце. Без них современная логистика, розничная торговля и складской учёт были бы немыслимы. Каждый формат штрих-кода разработан под конкретные задачи: одни удобны для розницы, другие — для кодирования длинных строк, третьи — для хранения больших объёмов данных в квадрате.
В этой статье мы разберём основные типы штрих-кодов — от классических одномерных (EAN, UPC, Code128) до двумерных (QR, Data Matrix, PDF417) — обсудим, где применяется каждый формат, как они устроены и как сгенерировать штрих-код самостоятельно. Также мы рассмотрим контрольные суммы, без которых штрих-код не будет считываться корректно.
Одномерные штрих-коды
Одномерный (линейный) штрих-код состоит из вертикальных чёрных и белых полос разной ширины. Каждый символ кодируется комбинацией полос, а сканер читает код по изменению отражения света. Линейные коды компактны, легко печатаются и быстро считываются, но вместимость их ограничена — обычно 8–20 символов.
| Тип | Длина данных | Тип данных | Типичное применение |
|---|---|---|---|
| EAN-13 | 13 цифр | только цифры | Розничная торговля (Россия, Европа) |
| EAN-8 | 8 цифр | только цифры | Малогабаритные товары |
| UPC-A | 12 цифр | только цифры | Розница в США и Канаде |
| Code39 | переменная | цифры + заглавные буквы + спецсимволы | Промышленность, оборона, логистика |
| Code128 | переменная | полный ASCII | Логистика, транспортные накладные |
| ITF-14 | 14 цифр | только цифры | Групповая упаковка (короба) |
EAN-13: стандарт розницы
EAN-13 — самый распространённый штрих-код в мире. Он состоит из 13 цифр: первые 2–3 — код страны (для России — 460–469), следующие 4–5 — код предприятия, ещё 5 — код товара, последняя цифра — контрольный разряд. Контрольная сумма вычисляется по алгоритму, похожему на Luhn, и позволяет обнаружить ошибку при ручном вводе или повреждении кода.
EAN-13: 4 6 0 1 2 3 4 5 6 7 8 9 0
│ │ │
│ │ └── контрольная цифра
│ └── код товара
└── код страны + предприятия
Контрольная цифра EAN-13:
1. Сложить цифры на нечётных позициях (кроме последней)
2. Сложить цифры на чётных позициях, умножить на 3
3. Сумма должна делиться на 10
4. Контрольная цифра = (10 − сумма mod 10) mod 10Code128: код для логистики
Code128 поддерживает все 128 символов ASCII и использует три набора (A, B, C) для переключения между режимами. Это позволяет компактно кодировать как буквы, так и цифры — режим C кодирует цифры парами, экономя место. Code128 широко применяется в транспортных накладных, маркировке посылок и идентификации паллет.
Двумерные штрих-коды
Двумерные коды хранят данные не только по горизонтали, но и по вертикали, что позволяет вместить в сотни раз больше информации. Они считываются камерой смартфона или специальным сканером и часто включают встроенную коррекцию ошибок — повреждённый код всё равно читается.
| Тип | Вместимость | Особенности |
|---|---|---|
| QR Code | до 7089 цифр / 4296 букв | Коррекция ошибок, быстрое распознавание под углом |
| Data Matrix | до 3116 цифр / 2335 букв | Компактный, читается при низком контрасте |
| PDF417 | до 2710 цифр / 1850 букв | «Высокий» код, несколько строк данных |
| Aztec | до 3832 цифр / 3067 букв | Центральный «глаз», не требует тихой зоны |
QR Code: король мобильных кодов
QR (Quick Response) был разработан в 1994 году японской компанией Denso Wave для отслеживания автомобильных деталей. Сегодня это самый популярный двумерный код: его можно встретить на рекламе, в меню ресторанов, на билетах, чеках и в платежных системах. QR поддерживает четыре уровня коррекции ошибок (L, M, Q, H), которые позволяют восстановить от 7 % до 30 % данных при повреждении кода.
Уровни коррекции ошибок QR:
L — восстанавливает ~7 % данных
M — восстанавливает ~15 % данных
Q — восстанавливает ~25 % данных
H — восстанавливает ~30 % данных
Чем выше уровень, тем больше размер кода при тех же данных.Подробнее об устройстве QR-кодов, режимах кодирования и применении читайте в нашей статье прогенератор QR-кодов.
Data Matrix и Aztec: когда важна компактность
Data Matrix чаще всего применяется для маркировки мелких деталей и медикаментов — он остаётся читаемым даже при размере в несколько миллиметров. В России формат Data Matrix обязателен для маркировки табачной, молочной и других категорий товаров в системе «Честный знак».
Aztec-коды используются в транспортной сфере: на билетах РЖД и авиакомпаний. Их особенность — центральный «глаз» в виде квадрата из концентрических колец, который служит для позиционирования сканера и не требует тихой зоны вокруг кода.
Контрольные суммы и валидация
Большинство одномерных штрих-кодов заканчиваются контрольной цифрой, которая вычисляется из остальных разрядов по специальному алгоритму. Это позволяет обнаружить ошибку при ручном вводе или повреждении кода: если расчётная контрольная цифра не совпадает с фактической, код считается недействительным.
Алгоритм проверки EAN-13 на JavaScript
function ean13CheckDigit(twelveDigits) {
let sum = 0;
for (let i = 0; i < 12; i++) {
const digit = parseInt(twelveDigits[i], 10);
sum += i % 2 === 0 ? digit : digit * 3;
}
return (10 - (sum % 10)) % 10;
}
function isValidEAN13(code) {
if (!/^\d{13}$/.test(code)) return false;
const expected = ean13CheckDigit(code.slice(0, 12));
return expected === parseInt(code[12], 10);
}
isValidEAN13('4601234567890'); // true или falseКак сгенерировать штрих-код
Генерация штрих-кода состоит из двух шагов: вычисления контрольной цифры (если требуется стандартом) и преобразования строки в графическое изображение. Для генерации в коде используют специализированные библиотеки:
- JavaScript:
jsbarcodeдля одномерных кодов,qrcodeиbwip-jsдля двумерных. - Python:
python-barcodeиqrcode. - PHP:
endroid/qr-codeиpicqer/php-barcode-generator. - Java:
zxing(Zebra Crossing) — универсальная библиотека для всех основных форматов.
// Пример генерации Code128 через JsBarcode
import JsBarcode from 'jsbarcode';
import { Canvas } from 'canvas';
const canvas = new Canvas();
JsBarcode(canvas, '123456789012', {
format: 'CODE128',
width: 2,
height: 80,
displayValue: true,
});
const dataUrl = canvas.toDataURL('image/png');Для большинства задач удобнее использовать готовый веб-инструмент — нашгенератор штрих-кодов поддерживает EAN-13, UPC-A, Code128, Code39, ITF-14 и другие форматы, а также генерирует QR-коды с настройкой уровня коррекции ошибок.
Выбор формата под задачу
| Задача | Рекомендуемый формат | Почему |
|---|---|---|
| Розничный товар в РФ | EAN-13 | Требование торговых сетей и касс |
| Коробка с группой товаров | ITF-14 | Простой для печати на гофрокартоне |
| Посылка или накладная | Code128 | Полный ASCII, переменная длина |
| Ссылка на сайт в рекламе | QR Code | Лёгкое сканирование камерой смартфона |
| Маркировка медикаментов | Data Matrix | Требование «Честного знака» |
| Билет на поезд | Aztec | Компактность, быстрое сканирование |
Качество печати и сканирования
Даже правильно сгенерированный штрих-код может не считываться, если нарушены требования к печати:
- Тихая зона — пустые поля вокруг кода (минимум в 10 раз шире самого узкого модуля). Без неё сканер не понимает, где начинается код.
- Контраст — чёрные полосы на белом фоне; цветные коды считываются хуже, а инверсные (белое на чёрном) — только специальными сканерами.
- Минимальный размер модуля — для розницы обычно не менее 0,33 мм; при печати на струйном принтере стоит добавлять запас.
- Разрешение печати — не менее 300 dpi для печати штрих-кодов; при меньшем разрешении возможны искажения ширины полос.
- Расположение — код не должен пересекать сгибы упаковки или попадать на закруглённые поверхности.
Заключение
Штрих-коды — это зрелая, стандартизованная технология, которая решает конкретные задачи: идентификацию товара, отслеживание посылок, передачу коротких строк, доступ к информации по камере смартфона. Выбор формата зависит от требований конкретной сферы: розница использует EAN-13, логистика — Code128, реклама — QR, а маркировка медикаментов — Data Matrix. Понимание устройства контрольных цифр и правил печати помогает создавать коды, которые считываются с первого раза.
Для генерации штрих-кодов в один клик используйте наш генератор штрих-кодов — он поддерживает все основные одномерные форматы. Если нужен QR-код с расширенными настройками (Wi-Fi, контакт, ссылка), воспользуйтесь генератором QR-кодов.
Попробуйте эти инструменты
Похожие статьи
Системы счисления: двоичная, восьмеричная, шестнадцатеричная
Позиционные системы счисления, конвертация между ними, использование в программировании.
Двоичная в десятичную: как конвертировать
Алгоритм перевода binary to decimal, степени двойки, примеры, использование в программировании.
Римские цифры: таблица и правила записи
Римская система счисления, символы, правила, запись больших чисел, история и современное использование.
Калькулятор процентов: как считать проценты
Виды расчёта процентов: от числа, процентное изменение, скидки, налоги, примеры.