Generowanie kodów kreskowych php


Kody kreskowe mają szerokie zastosowanie w handlu i logistyce, poniżej przedstawie metodę generowania kodów kreskowych z wykorzystaniem języka php. Jednym z prostszych typów kodów kreskowych jest Code 39 o stałej szerokości pojedynczego znaku. Za pomocą Code 30 możemy zakodować 43 znaki alfanumeryczne (duże litery od A do Z, cyfry, znaki specjalne: -, ., spacja, $, /, +, %, *).


Przystępujemy do pisania kodu (przedstawione przykłady są bardzo uproszczone tak więc w celu ich wykorzystania na potrzeby aplikacji dobrze jest uzupełnić kod o klasy i metody zgodnie z potrzebami danego projektu). Na początek potrzebujemy tablicy zawierającej informację o kolejności białych i czarnych pasków dla każdej litery znak b oznacza kolor czarny w biały.

$code = 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');

Następnie utwórzmy zmienną txt do której przypiszemy tekst z którego chcemy zrobić kod kreskowy. W code 39 znakiem rozpoczęcia i zakończenia jest * trzeba więc użyć je w tekście.

$txt = '*TESTOWY KOD*';

Tworzymy obrazek o szerokości równej ilości znaków pomnożonej przez 16 (każdy znak kodowany jest przez kombinację 16 białych lub czarnych pasków), wysokość ustawiamy dowolnie. Jeżeli będziemy chcieli zwiększyć skalę możemy pomnożyć szerokość x2 x3 itd.

$barcode = imageCreate(strlen($txt) * 16, 100);

Wypełniamy obrazek kolorem białym.

$bg = imagecolorallocate($barcode, 255, 255, 255);

Definiujemy kolor czarnego paska.

$black = imagecolorallocate($barcode, 0, 0, 0);

Dzielimy tekst na znaki

$chars = str_split($txt);

Tworzymy ciąg znaków b/w zgodnie z zakodowanym tekstem.

$bars = '';

foreach ($chars as $char) {

   $bars .= $code[$char];

}

Wypełniamy znaki b (paski które powinny być czarne) kolorem czarnym

foreach (str_split($bars) as $i => $bar) {

    if ($bar == 'b') {

       imageFilledRectangle($barcode, $i, 0, ($i+1) -1 , 90, $black);

    }

}

Na koniec używamy funkcji imagepng aby wyświetlić obrazek w przeglądarce

header('Content-Type: image/png');

imagepng($barcode);

Tradycyjnie cały kod poniżej

$code = 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');

$txt = '*TESTOWY KOD*';

$barcode = imageCreate(strlen($txt) * 16, 100);

$bg = imagecolorallocate($barcode, 255, 255, 255);

$black = imagecolorallocate($barcode, 0, 0, 0);

$chars = str_split($txt);

$bars = '';

foreach ($chars as $char) {

   $bars .= $code[$char];

}

foreach (str_split($bars) as $i => $bar) {

    if ($bar == 'b') {

       imageFilledRectangle($barcode, $i, 0, ($i+1) -1 , 90, $black);

    }

}

header('Content-Type: image/png');

imagepng($barcode);

Efektem działania jest uzyskanie kodu kreskowego jak poniżej

nazwa.pl