Только для читателей Lifeexample возможно открыть интернет-магазин на Moguta.CMS со скидкой в 15%
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 and Code93
Существует и разнообразие среди библиотек по работе с штрих кодами в php, но я хочу предложить один наиболее простой способ генерации в php штрих кода — без подключения библиотек.
Генерировать штрих код мы будем по алгоритму Code39
Наименование данного кода связано со структурой изображения букв "3 из 9", где три элемента буквы (два штриха и один пробел) из девяти являются широкими, а остальные шесть — узкими. Каждая буква кода 39 представлена пятью штрихами и четырьмя пробелами.
По сравнению с кодом 2 of 5 число вариантов изображения буква увеличивается в четыре раза и позволяет отобразить 40 различных букв. Предусмотрены четыре дополнительных знака ($, «, +, %). Код 39 является дискретным, контролируемым. Достоинством этого кода является его очень высокая надежность, которая может быть увеличена добавлением в символ контрольной буквы.
Как генерировать в PHP штрих код Code39
Ниже приведен маленький самописный класс, смысл которого заключается в преобразовании входящей строки в последовательности типа: bbbwbwwwbwbwbbbw, где b – черный , w – белый промежутки кода.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 | <?php class barcode { protected static $code39 = array( '0' => 'bwbwwwbbbwbbbwbw', '1' => 'bbbwbwwwbwbwbbbw', '2' => 'bwbbbwwwbwbwbbbw', '3' => 'bbbwbbbwwwbwbwbw', '4' => 'bwbwwwbbbwbwbbbw', '5' => 'bbbwbwwwbbbwbwbw', '6' => 'bwbbbwwwbbbwbwbw', '7' => 'bwbwwwbwbbbwbbbw', '8' => 'bbbwbwwwbwbbbwbw', '9' => 'bwbbbwwwbwbbbwbw', 'A' => 'bbbwbwbwwwbwbbbw', 'B' => 'bwbbbwbwwwbwbbbw', 'C' => 'bbbwbbbwbwwwbwbw', 'D' => 'bwbwbbbwwwbwbbbw', 'E' => 'bbbwbwbbbwwwbwbw', 'F' => 'bwbbbwbbbwwwbwbw', 'G' => 'bwbwbwwwbbbwbbbw', 'H' => 'bbbwbwbwwwbbbwbw', 'I' => 'bwbbbwbwwwbbbwbw', 'J' => 'bwbwbbbwwwbbbwbw', 'K' => 'bbbwbwbwbwwwbbbw', 'L' => 'bwbbbwbwbwwwbbbw', 'M' => 'bbbwbbbwbwbwwwbw', 'N' => 'bwbwbbbwbwwwbbbw', 'O' => 'bbbwbwbbbwbwwwbw', 'P' => 'bwbbbwbbbwbwwwbw', 'Q' => 'bwbwbwbbbwwwbbbw', 'R' => 'bbbwbwbwbbbwwwbw', 'S' => 'bwbbbwbwbbbwwwbw', 'T' => 'bwbwbbbwbbbwwwbw', '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]; } $html = ' <div style=" float:left;"> <div>'; foreach (str_split($colors) as $i => $color) { if ($color=='b') { $html.='<SPAN style="BORDER-LEFT: 0.02in solid; DISPLAY: inline-block; HEIGHT: 1in;"></SPAN>'; } else { $html.='<SPAN style="BORDER-LEFT: white 0.02in solid; DISPLAY: inline-block; HEIGHT: 1in;"></SPAN>'; } } $html.='</div> <div style="float:left; width:100%;" align=center >'.$text.'</div></div>'; // echo htmlspecialchars($html); echo $html; } } |
В классе присутствует ассоциативный массив соответствий символов и последовательностей штрихов для них. Например, если мы захотим закодировать слово "PHP" то получим такую последовательность:
bwbbbwbbbwbwwwbw bbbwbwbwwwbbbwbw bwbbbwbbbwbwwwbw
Три входящих символа (‘P’,’H’,’P’) равны трем последовательностям. Пробелы между ними я проставил для наглядности.
Полученная последовательность преобразуется в штрих код для слова PHP
Особенностью примера служит то, что в результате генерации штрих кода PHP , в данном классе мы получаем не просто картинку, как это сделано во многих библиотеках, а последовательность HTML элементов выстраивающихся в штрих код.
Вот так выглядит приведенный выше штрих код на самом деле:
<div style=" float:left;">
<div><SPAN style="BORDER-LEFT: 0.02in solid; DISPLAY: inline-block; HEIGHT: 1in;"></SPAN><SPAN style="BORDER-LEFT: white 0.02in solid; DISPLAY: inline-block; HEIGHT: 1in;"></SPAN><SPAN style="BORDER-LEFT: white 0.02in solid; DISPLAY: inline-block; HEIGHT: 1in;"></SPAN><SPAN style="BORDER-LEFT: white 0.02in solid; DISPLAY: inline-block; HEIGHT: 1in;"></SPAN><SPAN style="BORDER-LEFT: 0.02in solid; DISPLAY: inline-block; HEIGHT: 1in;"></SPAN><SPAN style="BORDER-LEFT: white 0.02in solid; DISPLAY: inline-block; HEIGHT: 1in;"></SPAN><SPAN style="BORDER-LEFT: 0.02in solid; DISPLAY: inline-block; HEIGHT: 1in;"></SPAN><SPAN style="BORDER-LEFT: 0.02in solid; DISPLAY: inline-block; HEIGHT: 1in;"></SPAN><SPAN style="BORDER-LEFT: 0.02in solid; DISPLAY: inline-block; HEIGHT: 1in;"></SPAN><SPAN style="BORDER-LEFT: white 0.02in solid; DISPLAY: inline-block; HEIGHT: 1in;"></SPAN><SPAN style="BORDER-LEFT: 0.02in solid; DISPLAY: inline-block; HEIGHT: 1in;"></SPAN><SPAN style="BORDER-LEFT: 0.02in solid; DISPLAY: inline-block; HEIGHT: 1in;"></SPAN><SPAN style="BORDER-LEFT: 0.02in solid; DISPLAY: inline-block; HEIGHT: 1in;"></SPAN><SPAN style="BORDER-LEFT: white 0.02in solid; DISPLAY: inline-block; HEIGHT: 1in;"></SPAN><SPAN style="BORDER-LEFT: 0.02in solid; DISPLAY: inline-block; HEIGHT: 1in;"></SPAN><SPAN style="BORDER-LEFT: white 0.02in solid; DISPLAY: inline-block; HEIGHT: 1in;"></SPAN><SPAN style="BORDER-LEFT: 0.02in solid; DISPLAY: inline-block; HEIGHT: 1in;"></SPAN><SPAN style="BORDER-LEFT: 0.02in solid; DISPLAY: inline-block; HEIGHT: 1in;"></SPAN><SPAN style="BORDER-LEFT: 0.02in solid; DISPLAY: inline-block; HEIGHT: 1in;"></SPAN><SPAN style="BORDER-LEFT: white 0.02in solid; DISPLAY: inline-block; HEIGHT: 1in;"></SPAN><SPAN style="BORDER-LEFT: 0.02in solid; DISPLAY: inline-block; HEIGHT: 1in;"></SPAN><SPAN style="BORDER-LEFT: white 0.02in solid; DISPLAY: inline-block; HEIGHT: 1in;"></SPAN><SPAN style="BORDER-LEFT: 0.02in solid; DISPLAY: inline-block; HEIGHT: 1in;"></SPAN><SPAN style="BORDER-LEFT: white 0.02in solid; DISPLAY: inline-block; HEIGHT: 1in;"></SPAN><SPAN style="BORDER-LEFT: 0.02in solid; DISPLAY: inline-block; HEIGHT: 1in;"></SPAN><SPAN style="BORDER-LEFT: white 0.02in solid; DISPLAY: inline-block; HEIGHT: 1in;"></SPAN><SPAN style="BORDER-LEFT: white 0.02in solid; DISPLAY: inline-block; HEIGHT: 1in;"></SPAN><SPAN style="BORDER-LEFT: white 0.02in solid; DISPLAY: inline-block; HEIGHT: 1in;"></SPAN><SPAN style="BORDER-LEFT: 0.02in solid; DISPLAY: inline-block; HEIGHT: 1in;"></SPAN><SPAN style="BORDER-LEFT: 0.02in solid; DISPLAY: inline-block; HEIGHT: 1in;"></SPAN><SPAN style="BORDER-LEFT: 0.02in solid; DISPLAY: inline-block; HEIGHT: 1in;"></SPAN><SPAN style="BORDER-LEFT: white 0.02in solid; DISPLAY: inline-block; HEIGHT: 1in;"></SPAN><SPAN style="BORDER-LEFT: 0.02in solid; DISPLAY: inline-block; HEIGHT: 1in;"></SPAN><SPAN style="BORDER-LEFT: 0.02in solid; DISPLAY: inline-block; HEIGHT: 1in;"></SPAN><SPAN style="BORDER-LEFT: 0.02in solid; DISPLAY: inline-block; HEIGHT: 1in;"></SPAN><SPAN style="BORDER-LEFT: white 0.02in solid; DISPLAY: inline-block; HEIGHT: 1in;"></SPAN><SPAN style="BORDER-LEFT: 0.02in solid; DISPLAY: inline-block; HEIGHT: 1in;"></SPAN><SPAN style="BORDER-LEFT: white 0.02in solid; DISPLAY: inline-block; HEIGHT: 1in;"></SPAN><SPAN style="BORDER-LEFT: 0.02in solid; DISPLAY: inline-block; HEIGHT: 1in;"></SPAN><SPAN style="BORDER-LEFT: 0.02in solid; DISPLAY: inline-block; HEIGHT: 1in;"></SPAN><SPAN style="BORDER-LEFT: 0.02in solid; DISPLAY: inline-block; HEIGHT: 1in;"></SPAN><SPAN style="BORDER-LEFT: white 0.02in solid; DISPLAY: inline-block; HEIGHT: 1in;"></SPAN><SPAN style="BORDER-LEFT: white 0.02in solid; DISPLAY: inline-block; HEIGHT: 1in;"></SPAN><SPAN style="BORDER-LEFT: white 0.02in solid; DISPLAY: inline-block; HEIGHT: 1in;"></SPAN><SPAN style="BORDER-LEFT: 0.02in solid; DISPLAY: inline-block; HEIGHT: 1in;"></SPAN><SPAN style="BORDER-LEFT: white 0.02in solid; DISPLAY: inline-block; HEIGHT: 1in;"></SPAN><SPAN style="BORDER-LEFT: 0.02in solid; DISPLAY: inline-block; HEIGHT: 1in;"></SPAN><SPAN style="BORDER-LEFT: white 0.02in solid; DISPLAY: inline-block; HEIGHT: 1in;"></SPAN><SPAN style="BORDER-LEFT: 0.02in solid; DISPLAY: inline-block; HEIGHT: 1in;"></SPAN><SPAN style="BORDER-LEFT: 0.02in solid; DISPLAY: inline-block; HEIGHT: 1in;"></SPAN><SPAN style="BORDER-LEFT: 0.02in solid; DISPLAY: inline-block; HEIGHT: 1in;"></SPAN><SPAN style="BORDER-LEFT: white 0.02in solid; DISPLAY: inline-block; HEIGHT: 1in;"></SPAN><SPAN style="BORDER-LEFT: white 0.02in solid; DISPLAY: inline-block; HEIGHT: 1in;"></SPAN><SPAN style="BORDER-LEFT: white 0.02in solid; DISPLAY: inline-block; HEIGHT: 1in;"></SPAN><SPAN style="BORDER-LEFT: 0.02in solid; DISPLAY: inline-block; HEIGHT: 1in;"></SPAN><SPAN style="BORDER-LEFT: white 0.02in solid; DISPLAY: inline-block; HEIGHT: 1in;"></SPAN><SPAN style="BORDER-LEFT: 0.02in solid; DISPLAY: inline-block; HEIGHT: 1in;"></SPAN><SPAN style="BORDER-LEFT: 0.02in solid; DISPLAY: inline-block; HEIGHT: 1in;"></SPAN><SPAN style="BORDER-LEFT: 0.02in solid; DISPLAY: inline-block; HEIGHT: 1in;"></SPAN><SPAN style="BORDER-LEFT: white 0.02in solid; DISPLAY: inline-block; HEIGHT: 1in;"></SPAN><SPAN style="BORDER-LEFT: 0.02in solid; DISPLAY: inline-block; HEIGHT: 1in;"></SPAN><SPAN style="BORDER-LEFT: white 0.02in solid; DISPLAY: inline-block; HEIGHT: 1in;"></SPAN><SPAN style="BORDER-LEFT: 0.02in solid; DISPLAY: inline-block; HEIGHT: 1in;"></SPAN><SPAN style="BORDER-LEFT: white 0.02in solid; DISPLAY: inline-block; HEIGHT: 1in;"></SPAN><SPAN style="BORDER-LEFT: 0.02in solid; DISPLAY: inline-block; HEIGHT: 1in;"></SPAN><SPAN style="BORDER-LEFT: white 0.02in solid; DISPLAY: inline-block; HEIGHT: 1in;"></SPAN><SPAN style="BORDER-LEFT: 0.02in solid; DISPLAY: inline-block; HEIGHT: 1in;"></SPAN><SPAN style="BORDER-LEFT: 0.02in solid; DISPLAY: inline-block; HEIGHT: 1in;"></SPAN><SPAN style="BORDER-LEFT: 0.02in solid; DISPLAY: inline-block; HEIGHT: 1in;"></SPAN><SPAN style="BORDER-LEFT: white 0.02in solid; DISPLAY: inline-block; HEIGHT: 1in;"></SPAN><SPAN style="BORDER-LEFT: white 0.02in solid; DISPLAY: inline-block; HEIGHT: 1in;"></SPAN><SPAN style="BORDER-LEFT: white 0.02in solid; DISPLAY: inline-block; HEIGHT: 1in;"></SPAN><SPAN style="BORDER-LEFT: 0.02in solid; DISPLAY: inline-block; HEIGHT: 1in;"></SPAN><SPAN style="BORDER-LEFT: white 0.02in solid; DISPLAY: inline-block; HEIGHT: 1in;"></SPAN><SPAN style="BORDER-LEFT: 0.02in solid; DISPLAY: inline-block; HEIGHT: 1in;"></SPAN><SPAN style="BORDER-LEFT: white 0.02in solid; DISPLAY: inline-block; HEIGHT: 1in;"></SPAN><SPAN style="BORDER-LEFT: 0.02in solid; DISPLAY: inline-block; HEIGHT: 1in;"></SPAN><SPAN style="BORDER-LEFT: 0.02in solid; DISPLAY: inline-block; HEIGHT: 1in;"></SPAN><SPAN style="BORDER-LEFT: 0.02in solid; DISPLAY: inline-block; HEIGHT: 1in;"></SPAN><SPAN style="BORDER-LEFT: white 0.02in solid; DISPLAY: inline-block; HEIGHT: 1in;"></SPAN><SPAN style="BORDER-LEFT: 0.02in solid; DISPLAY: inline-block; HEIGHT: 1in;"></SPAN><SPAN style="BORDER-LEFT: white 0.02in solid; DISPLAY: inline-block; HEIGHT: 1in;"></SPAN><SPAN style="BORDER-LEFT: white 0.02in solid; DISPLAY: inline-block; HEIGHT: 1in;"></SPAN><SPAN style="BORDER-LEFT: white 0.02in solid; DISPLAY: inline-block; HEIGHT: 1in;"></SPAN><SPAN style="BORDER-LEFT: 0.02in solid; DISPLAY: inline-block; HEIGHT: 1in;"></SPAN><SPAN style="BORDER-LEFT: white 0.02in solid; DISPLAY: inline-block; HEIGHT: 1in;"></SPAN><SPAN style="BORDER-LEFT: 0.02in solid; DISPLAY: inline-block; HEIGHT: 1in;"></SPAN><SPAN style="BORDER-LEFT: 0.02in solid; DISPLAY: inline-block; HEIGHT: 1in;"></SPAN><SPAN style="BORDER-LEFT: 0.02in solid; DISPLAY: inline-block; HEIGHT: 1in;"></SPAN><SPAN style="BORDER-LEFT: white 0.02in solid; DISPLAY: inline-block; HEIGHT: 1in;"></SPAN><SPAN style="BORDER-LEFT: 0.02in solid; DISPLAY: inline-block; HEIGHT: 1in;"></SPAN><SPAN style="BORDER-LEFT: 0.02in solid; DISPLAY: inline-block; HEIGHT: 1in;"></SPAN><SPAN style="BORDER-LEFT: 0.02in solid; DISPLAY: inline-block; HEIGHT: 1in;"></SPAN><SPAN style="BORDER-LEFT: white 0.02in solid; DISPLAY: inline-block; HEIGHT: 1in;"></SPAN><SPAN style="BORDER-LEFT: 0.02in solid; DISPLAY: inline-block; HEIGHT: 1in;"></SPAN><SPAN style="BORDER-LEFT: white 0.02in solid; DISPLAY: inline-block; HEIGHT: 1in;"></SPAN></div>
<div style="float:left; width:100%;" align=center >*PHP*</div></div>
Плюсы данного подхода в том, что после распечатывания наклеек с штрих кодами мы получим наиболее четкие линии чем при печати сгенерированной картинки.
Как генерируется штрих код code39 мы выяснили, осталось лишь сделать красивую верстку для удобного распечатывания и последующей нарезки наклеек.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 | <?php header('Content-Type: text/html; charset=utf-8'); ?> <!DOCTYPE html> <html> <head> <title>Штрих код PHP</title> <style> body { padding: 0; } /* Наклейка */ .b-sticker { width: 45%; padding: 3mm; float: left; font-family: Arial; border: 1px dashed black; page-break-inside: avoid; } .b-sticker table { width: 99%; border-collapse: collapse; } .b-sticker tr td { padding: 2mm; } .b-sticker tr:first-child td { border-bottom: 1mm solid #000; } .b-sticker tr td p { margin: 0; padding-bottom: 1mm; } /* Штрихкод код PHP*/ .barcode { width: 100%; } /* Размеры шрифтов */ .b-sticker .seller { font-size: 4mm; } .b-sticker .number { font-size: 6mm; } .b-sticker .customer-info { font-size: 3.8mm; } .b-sticker .customer-info .date, .b-sticker .customer-info .price, .b-sticker .customer-info .name, .b-sticker .customer-info .phone { } .b-sticker .punkt-info { font-size: 3.5mm; } </style> </head> <body> <?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' => 'ООО "Могута"', 'sku' => 'KEY3', 'price' => '1200', 'buyer_fio' => 'Авдеев Марк', 'buyer_phone' => '+7911039368'), array('shop' => 'ООО "Могута"', 'sku' => 'KEY4', 'price' => '1300', 'buyer_fio' => 'Авдеев Марк', 'buyer_phone' => '+7965004149'), array('shop' => 'ООО "Могута"', 'sku' => 'KEY5', 'price' => '1400', 'buyer_fio' => 'Авдеев Марк', 'buyer_phone' => '+7921424078'), array('shop' => 'ООО "Могута"', 'sku' => 'KEY6', 'price' => '1500', 'buyer_fio' => 'Авдеев Марк', 'buyer_phone' => '+7921448859'), ); ?> <?php foreach ($pkgs as $item): ?> <div class="b-sticker"> <table> <colgroup> <col width="40%"> <col width="10%"> <col width="60%"> </colgroup> <tr> <td class="customer-info" colspan="2"> <div class="seller"><?php echo $item['shop'] ?></div> <div class="number"><?php echo $item['sku'] ?></div> <div class="date">25 мая 2013</div> <div class="price"><?php echo $item['price'] ?></div> <div class="name"><?php echo $item['buyer_fio'] ?></div> <div class="phone"><?php echo $item['buyer_phone'] ?></div> </p> </td> <td> <div class="barcode" ><?php echo barcode::code39($item['sku']); ?></div> </td> </tr> <tr> <td><img src="logo.png" alt=""></td> <td class="punkt-info" colspan="2"> <p> Центр выдачи интернет-товаров 10.00 - 21.00, без обеда </p> <p> Санкт-Петербург, пр-кт Народного ополчения 10 <shy/>(812) 000-11-22 </p> </td> </tr> </table> </div> <?php endforeach; ?> </body> </html> <?php class barcode { protected static $code39 = array( '0' => 'bwbwwwbbbwbbbwbw', '1' => 'bbbwbwwwbwbwbbbw', '2' => 'bwbbbwwwbwbwbbbw', '3' => 'bbbwbbbwwwbwbwbw', '4' => 'bwbwwwbbbwbwbbbw', '5' => 'bbbwbwwwbbbwbwbw', '6' => 'bwbbbwwwbbbwbwbw', '7' => 'bwbwwwbwbbbwbbbw', '8' => 'bbbwbwwwbwbbbwbw', '9' => 'bwbbbwwwbwbbbwbw', 'A' => 'bbbwbwbwwwbwbbbw', 'B' => 'bwbbbwbwwwbwbbbw', 'C' => 'bbbwbbbwbwwwbwbw', 'D' => 'bwbwbbbwwwbwbbbw', 'E' => 'bbbwbwbbbwwwbwbw', 'F' => 'bwbbbwbbbwwwbwbw', 'G' => 'bwbwbwwwbbbwbbbw', 'H' => 'bbbwbwbwwwbbbwbw', 'I' => 'bwbbbwbwwwbbbwbw', 'J' => 'bwbwbbbwwwbbbwbw', 'K' => 'bbbwbwbwbwwwbbbw', 'L' => 'bwbbbwbwbwwwbbbw', 'M' => 'bbbwbbbwbwbwwwbw', 'N' => 'bwbwbbbwbwwwbbbw', 'O' => 'bbbwbwbbbwbwwwbw', 'P' => 'bwbbbwbbbwbwwwbw', 'Q' => 'bwbwbwbbbwwwbbbw', 'R' => 'bbbwbwbwbbbwwwbw', 'S' => 'bwbbbwbwbbbwwwbw', 'T' => 'bwbwbbbwbbbwwwbw', '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]; } $html = ' <div style=" float:left;"> <div>'; foreach (str_split($colors) as $i => $color) { if ($color=='b') { $html.='<SPAN style="BORDER-LEFT: 0.02in solid; DISPLAY: inline-block; HEIGHT: 1in;"></SPAN>'; } else { $html.='<SPAN style="BORDER-LEFT: white 0.02in solid; DISPLAY: inline-block; HEIGHT: 1in;"></SPAN>'; } } $html.='</div> <div style="float:left; width:100%;" align=center >'.$text.'</div></div>'; //echo htmlspecialchars($html); echo $html; } } |
Вышеприведенный php скрипт, будет генерировать информацию из массива
1 2 3 4 5 6 7 8 | $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' => 'ООО "Могута"', 'sku' => 'KEY3', 'price' => '1200', 'buyer_fio' => 'Авдеев Марк', 'buyer_phone' => '+7911039368'), array('shop' => 'ООО "Могута"', 'sku' => 'KEY4', 'price' => '1300', 'buyer_fio' => 'Авдеев Марк', 'buyer_phone' => '+7965004149'), array('shop' => 'ООО "Могута"', 'sku' => 'KEY5', 'price' => '1400', 'buyer_fio' => 'Авдеев Марк', 'buyer_phone' => '+7921424078'), array('shop' => 'ООО "Могута"', 'sku' => 'KEY6', 'price' => '1500', 'buyer_fio' => 'Авдеев Марк', 'buyer_phone' => '+7921448859'), ); |
Не трудно догадаться, какие ключи за что отвечают
- ‘shop’ – Название магазина;
- ‘sku’ – артикул из которого будет происходить генерация штрих кода;
- ‘price’ – цена товара;
- ‘buyer_fio’ – Ф.И.О. покупателя;
- ‘buyer_phone’ – телефон для связи.
Используйте этот РHР класс для генерации печатных форм наклеек со штрих кодами на коробки вашей продукции и кладовщики оценят ваш труд . 🙂
Читайте также похожие статьи:
Чтобы не пропустить публикацию следующей статьи подписывайтесь на рассылку по E-mail или RSS ленту блога.
Комментарии
Спасибо огромное, чертовски выручили, нужно было именно в html и css на выходе, а не картинкой! Когда генерируешь около 10 000 тысяч кодов за раз, скорость намного выше, чем при генерации картинок! 🙂
Спасибо, на экране все супер. Но при печати через FireFox штрих в 2 раза больше и все размазано…
Огромное спасибо. Ничего не размазано. Даже телефон сразу всё распознал
Спасибо большое. Отличная работа, мне очень пригодилось