PHP штрих-код

text

Доброго дня, шановні читачі блогу LifeExample, нещодавно переді мною постало завдання "як у php штрих код генерацію зробити? ", тобто за введеним артикулом продукту генерувати штрих код (barcode) і вивести його на сторінку для подальшого друку.

Немає такої людини на сьогоднішній день, хто б жодного разу не зустрів штрих-код у повсякденному житті, адже всі ми щодня купуємо в супермаркетах. Якщо подивитися уважно, то на всіх етикетках і упаковках в магазинах є місце, на якому надруковано набір чорних смужок різної ширини, розділених білим простором, так цей набір і називається штрих код.

Існує великий різновид штрих кодів:

Штриховий код Codabar

Штриховий код "2 of 5"

Штриховий код 39

Штрихові коди UPC та EAN

Стековий код PDF417

array

Матричний код 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 елементів, що вишиковуються в штрих код.

Ось так виглядає наведений вище штрих-код насправді:

Плюси даного підходу в тому, що після роздруковування наклейок зі штрих кодами ми отримаємо більш чіткі лінії, ніж при друку згенерованої картинки.

array shop

Як генерується штрих-код 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 ) : ?>