PHP штрих-код

Доброго дня, шановні читачі блогу LifeExample, нещодавно переді мною постало завдання "як у php штрих код генерацію зробити? ", тобто за введеним артикулом продукту генерувати штрих код (barcode) і вивести його на сторінку для подальшого друку.
Немає такої людини на сьогоднішній день, хто б жодного разу не зустрів штрих-код у повсякденному житті, адже всі ми щодня купуємо в супермаркетах. Якщо подивитися уважно, то на всіх етикетках і упаковках в магазинах є місце, на якому надруковано набір чорних смужок різної ширини, розділених білим простором, так цей набір і називається штрих код.
Існує великий різновид штрих кодів:
Штриховий код Codabar
Штриховий код "2 of 5"
Штриховий код 39
Штрихові коди UPC та EAN
Стековий код PDF417

Матричний код Data Matrix
Для генерації цих та інших видів штрих-коду придумано чимало алгоритмів кодування:
EAN-8, EAN-12, EAN-13, UPC, ISBN, Code39, Code128, Code128B, Code128B, RAWCode128, Interleaved25, CBR, MSI, PLS і Code93
Існує і різноманітність серед бібліотек по роботі зі штрих кодами в php, але я хочу запропонувати один найпростіший спосіб генерації вphp штрих коду - без підключення бібліотек.
Генерувати штрих-код ми будемо за алгоритмом Code39
Найменування даного коду пов'язане зі структурою зображення літер "3 з 9", де три елементи літери (два штрихи та один пробіл) з дев'яти є широкими, а решта шість - вузькими. Кожна буква коду 39 представлена п'ятьма штрихами та чотирма пробілами.
У порівнянні з кодом 2 of 5 число варіантів зображення буква збільшується вчетверо і дозволяє відобразити 40 різних букв.Передбачено чотири додаткові знаки ($, «, +, %). Код 39 є дискретним, контрольованим. Достоїнством цього коду є дуже висока надійність, яка може бути збільшена додаванням в символ контрольної літери.
Як генерувати в PHP штрих-код Code39
Нижче наведено невеликий самописний клас, зміст якого полягає у перетворенні вхідного рядка в послідовності типу: bbbwbwwwbwbwbbbw, де b – чорний , w – білий проміжки коду.
protected static $code39 = array ( '0' => 'bwbwwwbbbwbbbwbw' , '1' => 'bbbwbwwwbwbwbbbw' , '2' => 'bwbbbwwwbwbwbbbw' , bbbwbbbwwwbwbwbw' , '4' => 'bwbwwwbbbwbwbbbw' , '5' => 'bbbwbwwwbbbwbwbw' , '6' => 'bwbbbwwwbbbwbwbw'b , '8' => 'bbbwbwwwbwbbbwbw' , '9' => 'bwbbbwwwbwbbbwbw' , 'A' => ' => 'bbbwbbbwbwwwbwbw' , 'D' => 'bwbwbbbwwwbwbbbw' , 'E' => 'bbbwbwbbbwwwbwbw' , 'F' => 'bwbbbwbb 'bwbwbwwwbbbwbbbw' , 'H' => 'bbbwbwbwwwbbbwbw' , 'I' => 'bwbbbwbwwwbbbwbw' , 'J' => 'bwbwbbbwwwbbbwbw' ', 'L' => 'bwbbbwbwbwwwbbbw' , 'M' => 'bbbwbbbwbwbwwwbw' , 'N' => > 'bwbbbwbbbwbwwwbw' , 'Q' => 'bwbwbwbbbwwwbbbw' , 'R' => 'bbbwbwbwbbbwwwbw' , 'S' => bbwwwbw ' , 'U' => 'bbbwwwbwbwbwbbbw' , 'V' => 'bwwwbbbwbwbwbbbw' , 'W' => 'bbbwwwbbbwbwbwbw' , 'X' => 'bwwwbwbbbwbwbbbw' , 'Y' => 'bbbwwwbwbbbwbwbw' , 'Z' => 'bwwwbbbwbbbwbwbw' , '-' => 'bwwwbwbwbbbwbbbw' , '.' => 'bbbwwwbwbwbbbwbw' , ' ' => 'bwwwbbbwbwbbbwbw' , '*' =>'bwwwbwbbbwbbbwbw' , '$' => 'bwwwbwwwbwwwbwbw' , '/' => 'bwwwbwwwbwbwwwbw' , '+' => 'bwwwbwbwwwbwwwbw' , '%' => 'bwbwwwbwwwbwwwbw' ) ;
public static function code39 ($text) < if ( ! preg_match ( '/^[A-Z0-9-. $+\/%]+$/i' , $text ) ) < throw new Exception ( 'Помилка введення'); >
$text = '*'. strtoupper ($text). '*'; $length = strlen ($text); $chars = str_split ($text); $colors = '';
foreach ($chars as $char) < $colors .= self :: $code39 [$char]; >
foreach ( str_split ( $colors ) as $i => $color ) < if ($color == 'b') < $html .= '''; > else < $html .= '''; > >
'; // echo htmlspecialchars($html); echo $html; >
У класі є асоціативний масив відповідностей символів і послідовностей штрихів для них. Наприклад, якщо ми захочемо закодувати слово "PHP ", то отримаємо таку послідовність:
bwbbbwbbbwbwwwbw bbbwbwbwwwbbbwbw bwbbbwbbbwbwwwbw
Три вхідні символи ('P','H','P') дорівнюють трьом послідовностям. Прогалини між ними я простовив для наочності.
Отримана послідовність перетворюється на штрих-код для слова PHP
Особливістю прикладу служить те, що в результаті генерації штрих коду PHP, в даному класі ми отримуємо не просто картинку, як це зроблено в багатьох бібліотеках, а послідовність HTML елементів, що вишиковуються в штрих код.
Ось так виглядає наведений вище штрих-код насправді:
Плюси даного підходу в тому, що після роздруковування наклейок зі штрих кодами ми отримаємо більш чіткі лінії, ніж при друку згенерованої картинки.

Як генерується штрих-код code39 ми з'ясували, залишилосяТільки зробити красиву верстку для зручного роздрукування та наступного нарізування наклейок.
header ( 'Content-Type: text/html; charset=utf-8') ; ?> Штрих код PHP
$pkgs = array ( array ( 'shop' => 'ТОВ "Могута"' , 'sku' => 'PHP' , 'price' => '1000' , 'buyer_fio' = > 'Авдєєв Марк' , 'buyer_phone' => '+7921424078' ) , array ( 'shop' => 'ТОВ "Могута"' , 'sku' => 'KEY2' , 'price' => '1100' , 'buyer_fio' => 'Авдєєв Марк' , 'buyer_phone' => '+7921448859' ) , array ( 'shop' => 'ТОВ "Могута"' , ' => 'KEY3' , 'price' => '1200' , 'buyer_fio' => 'Авдєєв Марк' , 'buyer_phone' => '+7911039368' ) , array ( 'shop > 'ТОВ "Могута"' , 'sku' => 'KEY4' , 'price' => '1300' , 'buyer_fio' => 'Авдєєв Марк' , 'buyer_phone' => ) , array ( 'shop' => 'ТОВ "Могута"' , 'sku' => 'KEY5' , 'price' => '1400' , 'buyer_fio' => 'Авдєєв Марк' , 'buyer_phone' => '+7921424078' ) , array ( 'shop' => 'ТОВ "Могута"' , 'sku' => 'KEY6' , 'price' => '1500' , 'buyer_fio' => 'Авдєєв Марк' , 'buyer_phone' => ?>
foreach ( $pkgs as $item ) : ?>