Добро пожаловать на авторский блог Авдеева Марка.

Только для читателей Lifeexample возможно открыть интернет-магазин на Moguta.CMS со скидкой в 15%

<<< Конкурс на 5000 рублей «Все об интернет-магазине» || SQL Работа с датами >>>

PHP штрих код

24.05.2013
PHP штрих код

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

Нет такого человека на сегодняшний день, кто бы ни разу не встретил штрих код в повседневной жизни, ведь все мы ежедневно совершаем покупки в супермаркетах. Если посмотреть внимательно,то на всех этикетках и упаковках в магазинах имеется место, на котором напечатан набор черных полосок разной ширины, разделенных белым пространством, так вот данный набор и называется штрих код.

Существует большая разновидность штрих кодов:

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

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

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

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

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

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

Штриховые коды UPC и EAN

Штриховые коды UPC и EAN

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

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

Матричный код Data Matrix

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

Штриховой код 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*

Особенностью примера служит то, что в результате генерации штрих кода 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 раза больше и все размазано…

  • Оставить комментарий

    Подписаться на комментарии к этой статье по RSS

    Размещение статей и контекстных ссылок
    Бесплатная CMS для вашего магазина
    Яндекс.Метрика