Search by

cloud-castle / barcode

alex-4-17

Генерация штрихкодов для PHP 8.1+ без внешних зависимостей и расширений: 76 типов символогий — линейные, товарные GS1, почтовые, российские (Честный ЗНАК, ЕГАИС, ШПИ Почты России) и двумерные (DataMatrix, PDF417, Aztec, Han Xin); шесть форматов вывода: SVG, PNG без ext-gd, EPS, HTML, текст и JSON. В

v1.0.0 2026-09-16 08:44 UTC

README

🇷🇺 Русский · 🇬🇧 English · 🇩🇪 Deutsch · 🇫🇷 Français · 🇪🇸 Español · 🇮🇹 Italiano

CloudCastle Barcode

CloudCastle Barcode

Packagist Version PHP Version License Downloads Monthly Downloads Stars Символогий Форматов вывода Зависимостей Advisories

Репозиторий Quality Publish Релизы Задачи Обсуждения

PHPStan Psalm PHPMD PHPCS coverage Infection MSI OpenSSF

Генерация штриховых кодов на чистом PHP 8.1+ без единой внешней зависимости и без расширений: 76 типов символогий — линейные, товарные GS1, почтовые, российские (Честный ЗНАК, ЕГАИС, ШПИ Почты России) и двумерные (DataMatrix, PDF417, Aztec, Han Xin) — и шесть форматов вывода (SVG, PNG, EPS, HTML, текст, JSON). Вывод выверен байт-в-байт против эталонных реализаций и прочитан независимыми декодерами.

Установка

composer require cloud-castle/barcode

Требуется PHP 8.1+. Расширения не нужны: PNG собирается собственным кодировщиком, поэтому ext-gd и ext-imagick не требуются.

Быстрый старт

<?php

use CloudCastle\Barcode\BarcodeGenerator;
use CloudCastle\Barcode\Enum\BarcodeType;
use CloudCastle\Barcode\Renderer\SvgRenderer;

$generator = new BarcodeGenerator();

// Линейный код: EAN-13 для товарной позиции.
$barcode = $generator->generate('4601234567893', BarcodeType::EAN13);
$svg = (new SvgRenderer())->render($barcode);

// Двумерный код: Aztec для билета или посадочного талона.
$ticket = $generator->generate('M1IVANOV/IVAN  E1A2B3C SVOLED SU 1234 250Y', BarcodeType::AZTEC);

Симвология выбирается перечислением {@see BarcodeType}, формат вывода — рендерером. Кодировщик и рендерер не знают друг о друге: между ними стоит неизменяемая матрица модулей, поэтому любой код выводится в любой формат.

Возможности

Линейные символогии

СемействоТипыНазначение
Code 128CODE128, CODE128_A, CODE128_B, CODE128_CЛогистика, GS1-128; автоматический выбор набора
Code 39CODE39, CODE39_CHECKSUM, CODE39_EXTENDED, CODE39_EXTENDED_CHECKSUMПромышленность, оборонные стандарты
Code 32CODE32Итальянский фармакод
Code 93CODE93Уплотнённая замена Code 39
Code 16KCODE16KТот же набор знаков, что у Code 128, сложенный в строки
Code 49CODE49Два знака данных в одном знаке символа: 49 знаков в восьми строках
Interleaved 2 of 5ITF, ITF_CHECKSUM, ITF14Транспортная упаковка, GTIN-14
2 of 5STANDARD25, STANDARD25_CHECKSUM, IATA25, MATRIX25, DATALOGIC25Авиабагаж, складские системы
CodabarCODABARБиблиотеки, банки крови
MSI PlesseyMSI, MSI_CHECKSUMСкладские стеллажи
PlesseyPLESSEYБританская торговля, исторические системы
Code 11CODE11Маркировка телекоммуникаций
PharmacodePHARMACODE, PHARMACODE_TWO_TRACKФармацевтическая упаковка
Аптечные и оборонныеPZN, LOGMARSНемецкий аптечный номер, стандарт МО США
Deutsche PostIDENTCODE, LEITCODEПочта Германии
TelepenTELEPEN, TELEPEN_NUMERICБиблиотеки Великобритании
EAN / UPCEAN13, EAN8, EAN2, EAN5, UPCA, UPCEРозничная торговля и дополнения
HIBCHIBC_CODE39, HIBC_CODE128, HIBC_DATAMATRIX, HIBC_AZTECМедицинские изделия по HIBC LIC

Товарные символогии GS1

СемействоТипыНазначение
GS1-128GS1_128, SSCC18, GS1_114Элементы GS1 с идентификаторами применения, ключи упаковки и товара
GS1 DataBarGS1_DATABAR, GS1_DATABAR_TRUNCATEDGTIN-14 вдвое уже EAN-13
GS1 DataBar составнойGS1_DATABAR_STACKED, GS1_DATABAR_STACKED_OMNIТот же номер в две строки, когда не хватает ширины
GS1 DataBar LimitedGS1_DATABAR_LIMITED79 модулей для мелкой штучной продукции
GS1 DataBar ExpandedGS1_DATABAR_EXPANDED, GS1_DATABAR_EXPANDED_STACKEDВес, дата, цена и партия рядом с номером

Почтовые символогии

СемействоТипыНазначение
POSTNET / PLANETPOSTNET, PLANETПочта США
Royal Mail / KIXRMS4CC, KIXПочта Великобритании и Нидерландов
Royal Mail MailmarkMAILMARKОтслеживание отправлений: индекс, цепь поставок и номер
Intelligent MailIMB, IMB_STATESUSPS OneCode: расчёт по номеру и печать по готовым штрихам
Japan PostJAPAN_POSTПочта Японии, адрес каной и цифрами
Australia PostAUSTRALIA_POST, AUSTRALIA_POST_NUMERICПочта Австралии, четыре положения штриха

Российские символогии

СемействоТипыНазначение
Честный ЗНАКCHESTNY_ZNAKСредство идентификации ГИС МТ: DataMatrix с разметкой GS1
ЕГАИСEGAISФедеральная специальная и акцизная марка: PDF417 на 68 или 150 знаков
Почта РоссииRUSSIAN_POSTШтриховой почтовый идентификатор внутреннего отправления
ВПС S10UPU_S10Идентификатор международного отправления вида RA123456785RU

Двумерные символогии

СемействоТипыНазначение
DataMatrix ECC 200DATAMATRIXМаркировка деталей и лекарств; все схемы кодирования
DataMatrix прямоугольныйDATAMATRIX_RECTANGULAR, DATAMATRIX_DMREТорец детали, кабель, край платы: 24 вытянутых размера
PDF417PDF417, PDF417_COMPACTДокументы и удостоверения; уровни коррекции 0–8
AztecAZTEC, AZTEC_FULL, AZTEC_RUNEТранспортные билеты; не нуждается в тихой зоне
Han Xin CodeHANXINИероглифы напрямую: 84 размера, четыре уровня коррекции

Форматы вывода

РендерерФорматКогда применять
SvgRendererSVGВеб-страницы, печать любого размера
PngRendererPNGРастр без ext-gd: собственный кодировщик
EpsRendererEPSТипографская печать, вёрстка
HtmlRendererHTMLПисьма и страницы без внешних файлов
TextRendererтекстОтладка, терминал
JsonRendererJSONПередача матрицы модулей в другую систему

Сравнение с аналогами

Функциональность

Показательcloud-castle/barcodetc-lib-barcodeTCPDFpicqermilon/barcodechillerlan/php-qrcodeendroid/qr-codebacon-qr-code🏆 Победитель
Символогий7669433441111cloud-castle/barcode
Двумерных1313303111cloud-castle/barcode, tc-lib-barcode
Форматов вывода66454633ничья
Зависимостей01001111ничья
Расширений PHPнетctype, gd, pcrecurlнетgdmbstringнетiconvничья

Двумерных символогий у tc-lib больше за счёт семейства QR: оно вынесено в отдельный пакет cloud-castle/qr-code, чтобы проектам, которым нужны только штрихкоды, не тянуть код QR, и наоборот. Вместе два пакета покрывают больше символогий, чем любой аналог.

Производительность — мс на символ, меньше — лучше

Показательcloud-castle/barcodetc-lib-barcodeTCPDFpicqermilon/barcodechillerlan/php-qrcodeendroid/qr-codebacon-qr-code🏆 Победитель
EAN-130.01940.05440.04190.0594cloud-castle/barcode
Code 1280.04870.070.06790.0957cloud-castle/barcode
Code 390.05910.09140.09930.1463cloud-castle/barcode
ITF-140.03552.19760.05440.076cloud-castle/barcode
Codabar0.02360.03960.03190.0495cloud-castle/barcode
POSTNET0.03510.13570.05450.0877cloud-castle/barcode
DataMatrix0.42161.17690.5608cloud-castle/barcode
PDF4170.66052.34811.3571cloud-castle/barcode
Aztec0.21250.5103cloud-castle/barcode
Han Xin1.19722.5707cloud-castle/barcode
Честный ЗНАК0.3916cloud-castle/barcode
QR Code3.06811.23512.74845.22285.7484TCPDF

Потребление памяти — КБ на символ, меньше — лучше

Показательcloud-castle/barcodetc-lib-barcodeTCPDFpicqermilon/barcodechillerlan/php-qrcodeendroid/qr-codebacon-qr-code🏆 Победитель
EAN-1312.0121.2525.3310.05picqer
Code 12825.6643.4248.0218.32picqer
Code 3941.2358.6372.8934.99picqer
ITF-1415.281918.3134.3513.92picqer
Codabar11.5919.8124.239.62picqer
POSTNET26.0868.6624.5218.12picqer
DataMatrix31.74161.5651.16cloud-castle/barcode
PDF417207.4738.7183.09TCPDF
Aztec52.84102.5cloud-castle/barcode
Han Xin201.88210.66cloud-castle/barcode
Честный ЗНАК31.74cloud-castle/barcode
QR Code171.9460.74169.9733.06205.65endroid/qr-code

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

Утечки памяти — КБ прироста, меньше — лучше

Показательcloud-castle/barcodetc-lib-barcodeTCPDFpicqermilon/barcodechillerlan/php-qrcodeendroid/qr-codebacon-qr-code🏆 Победитель
EAN-130000ничья
Code 1280000ничья
Code 390000ничья
ITF-140000ничья
Codabar0000ничья
POSTNET0000ничья
DataMatrix000ничья
PDF417000ничья
Aztec00cloud-castle/barcode, tc-lib-barcode
Han Xin00cloud-castle/barcode, tc-lib-barcode
Честный ЗНАК0cloud-castle/barcode
QR Code00000ничья

Ни один участник не удерживает память между сборками: за две тысячи символов занятая память не выросла ни у кого. Утечек нет ни у одного пакета — это ничья.

Синтаксис (php -l) — меньше — лучше

Показательcloud-castle/barcodetc-lib-barcodeTCPDFpicqermilon/barcodechillerlan/php-qrcodeendroid/qr-codebacon-qr-code🏆 Победитель
Файлов с ошибкой разбора00000000ничья

Строгая типизация (PHPStan 5) — меньше — лучше

Показательcloud-castle/barcodetc-lib-barcodeTCPDFpicqermilon/barcodechillerlan/php-qrcodeendroid/qr-codebacon-qr-code🏆 Победитель
Замечаний PHPStan 5 на 1000 строк03.556.9615.7957.3913.7916.294.71cloud-castle/barcode

Стиль (PSR-12) — меньше — лучше

Показательcloud-castle/barcodetc-lib-barcodeTCPDFpicqermilon/barcodechillerlan/php-qrcodeendroid/qr-codebacon-qr-code🏆 Победитель
Замечаний PSR-12 на 1000 строк03.741186.4223.58397.14940.4469.667.4cloud-castle/barcode

Запахи кода (PHPMD) — меньше — лучше

Показательcloud-castle/barcodetc-lib-barcodeTCPDFpicqermilon/barcodechillerlan/php-qrcodeendroid/qr-codebacon-qr-code🏆 Победитель
Замечаний PHPMD на 1000 строк3.294.647.629.4771.1526.7830.7342.68cloud-castle/barcode
Из них не на именованные конструкторы и флаги0.353.664727.5868.9123.0625.5531.47cloud-castle/barcode

Вторая строка — без правил StaticAccess на именованных конструкторах и BooleanArgumentFlag на переключателях отрисовки: оба приёма выбраны намеренно и описаны в phpmd.xml.

Мутационное тестирование / Покрытие тестами

Показательcloud-castle/barcodetc-lib-barcodeTCPDFpicqermilon/barcodechillerlan/php-qrcodeendroid/qr-codebacon-qr-code🏆 Победитель
Покрытие строк, %100cloud-castle/barcode
Убито мутантов, %99.98cloud-castle/barcode

Мутационное тестирование и покрытие замерены только для этого пакета: наборы тестов аналогов в поставку composer не входят, а без них эти числа не получить. Прочерк в строке означает «не замерялось», а не «плохо».

Качество кода

Показательcloud-castle/barcodetc-lib-barcodeTCPDFpicqermilon/barcodechillerlan/php-qrcodeendroid/qr-codebacon-qr-code🏆 Победитель
Замечаний PHPStan 5 на 1000 строк03.556.9615.7957.3913.7916.294.71cloud-castle/barcode
Файлов со строгой типизацией, %10010000001002ничья
Подавлений анализа0170006500ничья

Безопасность

Показательcloud-castle/barcodetc-lib-barcodeTCPDFpicqermilon/barcodechillerlan/php-qrcodeendroid/qr-codebacon-qr-code🏆 Победитель
Зависимостей01001111ничья
Расширений PHP03101101ничья
Подавлений анализа0170006500ничья

Замерено: 2026-09-15, PHP 8.4.25.

Честно о пакете

Сильные стороны

  • Самый широкий набор символогий среди PHP-пакетов без расширений. 76 типов: линейные, всё семейство товарных кодов GS1, почтовые стандарты пяти стран, составные символогии и четыре двумерные покрываются одной библиотекой; отдельно ставить пакет ради DataMatrix, Aztec, GS1 DataBar или Han Xin не нужно.
  • Ноль зависимостей и ноль расширений. Единственное требование — PHP 8.1+. PNG кодируется собственным упаковщиком, поэтому библиотека работает там, где ext-gd недоступно.
  • Вывод проверен, а не заявлен. Каждая симвология сверена байт-в-байт с эталонной реализацией и прочитана независимым декодером; для двумерных кодов проверка идёт и по предельным объёмам стандарта.
  • Строгая типизация и полный статический анализ. PHPStan уровня max, Psalm первого уровня, PHPMD, PHPCS, Deptrac и Rector проходят без исключений и подавлений.
  • Российские символогии из коробки. Средство идентификации «Честный ЗНАК» с разметкой GS1, марка ЕГАИС, почтовые идентификаторы Почты России и ВПС — ни один из сравниваемых пакетов их не умеет.
  • Самый быстрый вывод среди сравниваемых пакетов. На каждой символогии, которую умеют аналоги, готовая разметка собирается быстрее — от полутора до четырёх раз; числа в таблицах выше сняты стендом benchmarks/.

Слабые стороны

  • Два мутанта в раскладке DataMatrix неустранимы. Сдвиг предела цикла обхода на единицу не виден по выводу ни на одном из сорока восьми допустимых размеров символа: лишний шаг диагонали уходит за область данных и знаков там не ставит. Убить их можно, только заменив ход алгоритма ИСО/МЭК 16022 на арифметику, которую труднее сверить со стандартом; мутационный счёт пакета — 99,98 %.
  • Пакет моложе и менее распространён, чем аналоги. У picqer и tc-lib годы эксплуатации и тысячи установок; здесь этого пока нет, и в проекте, где важна многолетняя история, это стоит учитывать.
  • Чтение штрихкодов не поддерживается. Библиотека только кодирует; для распознавания понадобится отдельное решение.
  • QR-кодов здесь нет намеренно. Они вынесены в отдельный пакет cloud-castle/qr-code, чтобы не тянуть лишний код в проекты, которым нужны только штрихкоды.
  • Памяти на линейный символ уходит больше, чем у picqer. Между кодировщиком и рендерером стоит полная матрица модулей, а не список штрихов: это плата за то, что любая симвология выводится любым рендерером без переделки. На двумерных символах, где матрица нужна всем, пакет расходует памяти меньше всех.

Где применять

СфераЧто братьПочему
Розница и кассаEAN13, EAN8, UPCA, UPCEСтандарт товарной нумерации; дополнения EAN2/EAN5 для периодики
Склад и логистикаCODE128, ITF14, GS1_128, SSCC18Высокая плотность, устойчивое чтение с поддонов
Розница на малой упаковкеGS1_DATABAR, GS1_DATABAR_LIMITEDGTIN-14 вдвое уже EAN-13
Весовой и скоропортящийся товарGS1_DATABAR_EXPANDEDВес, дата и цена в одном символе с номером
Медицинские изделияHIBC_CODE128, HIBC_DATAMATRIXМаркировка по HIBC LIC
ФармацевтикаDATAMATRIX, CODE32, PHARMACODEМаркировка требует двумерного кода на малой площади
Производство и деталиDATAMATRIXЧитается с гравировки, выдерживает повреждение до 30 %
Документы и удостоверенияPDF417Вмещает до 1108 байт, восстанавливается при порче полосы
Транспортные билетыAZTECНе нуждается в тихой зоне, читается с экрана телефона
Маркировка на китайскомHANXINИероглифы пишутся напрямую, вдвое короче UTF-8
Маркировка товаров в РоссииCHESTNY_ZNAKСредство идентификации ГИС МТ: DataMatrix с разметкой GS1
Алкогольная продукцияEGAISФедеральная специальная и акцизная марка
Отправления Почты РоссииRUSSIAN_POST, UPU_S10Внутренний и международный идентификаторы
Почтовые отправленияIMB, RMS4CC, KIX, POSTNETНациональные почтовые стандарты
Библиотеки и архивыCODABAR, TELEPENИсторически принятые в отрасли символогии

Когда пакет не нужен. Если требуется только QR-код — возьмите cloud-castle/qr-code. Если нужно распознавание с фотографии — нужна библиотека компьютерного зрения, эта задача сюда не входит.

Разработка

composer install
composer check    # линтеры + статический анализ + тесты
composer fix      # автоисправления (Rector, PHP CS Fixer, PHPCBF)
composer ci       # полный CI-пайплайн локально

Полный список команд с описаниями: composer run-script --list.

Документация

Лицензия

MIT © CloudCastle (alex-4-17@yandex.ru)

🇷🇺 Русский · 🇬🇧 English · 🇩🇪 Deutsch · 🇫🇷 Français · 🇪🇸 Español · 🇮🇹 Italiano