<?php
/*
* Author David S. Tufts
* Company davidscotttufts.com
*
* Date: 05/25/2003
* Usage: <img src="/barcode.php?text=testing" alt="testing" />
*/
// For demonstration purposes, get pararameters that are passed in through $_GET or set to the default value
$filepath = (isset($_GET["filepath"]) ? $_GET["filepath"] : "");
$text = (isset($_GET["text"]) ? $_GET["text"] : "0");
$size = (isset($_GET["size"]) ? $_GET["size"] : "20");
$orientation = (isset($_GET["orientation"]) ? $_GET["orientation"] : "horizontal");
$code_type = (isset($_GET["codetype"]) ? $_GET["codetype"] : "code128");
$print = (isset($_GET["print"]) && $_GET["print"] == 'true' ? true : false);
$sizefactor = (isset($_GET["sizefactor"]) ? $_GET["sizefactor"] : "1");
// This function call can be copied into your project and can be made from anywhere in your code
barcode($filepath, $text, $size, $orientation, $code_type, $print, $sizefactor);
function barcode(
$filepath = "",
$text = "0",
$size = "20",
$orientation = "horizontal",
$code_type = "code128",
$print = false,
$SizeFactor = 1
) {
$code_string = "";
// Translate the $text into barcode the correct $code_type
if (in_array(strtolower($code_type), array("code128", "code128b"))) {
$chksum = 104;
// Must not change order of array elements as the checksum depends on the array's key to validate final code
$code_array = array(
" " => "212222",
"!" => "222122",
"\"" => "222221",
"#" => "121223",
"$" => "121322",
"%" => "131222",
"&" => "122213",
"'" => "122312",
"(" => "132212",
")" => "221213",
"*" => "221312",
"+" => "231212",
"," => "112232",
"-" => "122132",
"." => "122231",
"/" => "113222",
"0" => "123122",
"1" => "123221",
"2" => "223211",
"3" => "221132",
"4" => "221231",
"5" => "213212",
"6" => "223112",
"7" => "312131",
"8" => "311222",
"9" => "321122",
":" => "321221",
";" => "312212",
"<" => "322112",
"=" => "322211",
">" => "212123",
"?" => "212321",
"@" => "232121",
"A" => "111323",
"B" => "131123",
"C" => "131321",
"D" => "112313",
"E" => "132113",
"F" => "132311",
"G" => "211313",
"H" => "231113",
"I" => "231311",
"J" => "112133",
"K" => "112331",
"L" => "132131",
"M" => "113123",
"N" => "113321",
"O" => "133121",
"P" => "313121",
"Q" => "211331",
"R" => "231131",
"S" => "213113",
"T" => "213311",
"U" => "213131",
"V" => "311123",
"W" => "311321",
"X" => "331121",
"Y" => "312113",
"Z" => "312311",
"[" => "332111",
"\\" => "314111",
"]" => "221411",
"^" => "431111",
"_" => "111224",
"\`" => "111422",
"a" => "121124",
"b" => "121421",
"c" => "141122",
"d" => "141221",
"e" => "112214",
"f" => "112412",
"g" => "122114",
"h" => "122411",
"i" => "142112",
"j" => "142211",
"k" => "241211",
"l" => "221114",
"m" => "413111",
"n" => "241112",
"o" => "134111",
"p" => "111242",
"q" => "121142",
"r" => "121241",
"s" => "114212",
"t" => "124112",
"u" => "124211",
"v" => "411212",
"w" => "421112",
"x" => "421211",
"y" => "212141",
"z" => "214121",
"{" => "412121",
"|" => "111143",
"}" => "111341",
"~" => "131141",
"DEL" => "114113",
"FNC 3" => "114311",
"FNC 2" => "411113",
"SHIFT" => "411311",
"CODE C" => "113141",
"FNC 4" => "114131",
"CODE A" => "311141",
"FNC 1" => "411131",
"Start A" => "211412",
"Start B" => "211214",
"Start C" => "211232",
"Stop" => "2331112"
);
//\Elminson\BarCode\CodeType::code_data
$code_keys = array_keys($code_array);
$code_values = array_flip($code_keys);
for ($X = 1; $X <= strlen($text); $X++) {
$activeKey = substr($text, ($X - 1), 1);
$code_string .= $code_array[$activeKey];
$chksum = ($chksum + ($code_values[$activeKey] * $X));
}
$code_string .= $code_array[$code_keys[($chksum - (intval($chksum / 103) * 103))]];
$code_string = "211214" . $code_string . "2331112";
} elseif (strtolower($code_type) == "code128a") {
$chksum = 103;
$text = strtoupper($text); // Code 128A doesn't support lower case
// Must not change order of array elements as the checksum depends on the array's key to validate final code
$code_array = array(
" " => "212222",
"!" => "222122",
"\"" => "222221",
"#" => "121223",
"$" => "121322",
"%" => "131222",
"&" => "122213",
"'" => "122312",
"(" => "132212",
")" => "221213",
"*" => "221312",
"+" => "231212",
"," => "112232",
"-" => "122132",
"." => "122231",
"/" => "113222",
"0" => "123122",
"1" => "123221",
"2" => "223211",
"3" => "221132",
"4" => "221231",
"5" => "213212",
"6" => "223112",
"7" => "312131",
"8" => "311222",
"9" => "321122",
":" => "321221",
";" => "312212",
"<" => "322112",
"=" => "322211",
">" => "212123",
"?" => "212321",
"@" => "232121",
"A" => "111323",
"B" => "131123",
"C" => "131321",
"D" => "112313",
"E" => "132113",
"F" => "132311",
"G" => "211313",
"H" => "231113",
"I" => "231311",
"J" => "112133",
"K" => "112331",
"L" => "132131",
"M" => "113123",
"N" => "113321",
"O" => "133121",
"P" => "313121",
"Q" => "211331",
"R" => "231131",
"S" => "213113",
"T" => "213311",
"U" => "213131",
"V" => "311123",
"W" => "311321",
"X" => "331121",
"Y" => "312113",
"Z" => "312311",
"[" => "332111",
"\\" => "314111",
"]" => "221411",
"^" => "431111",
"_" => "111224",
"NUL" => "111422",
"SOH" => "121124",
"STX" => "121421",
"ETX" => "141122",
"EOT" => "141221",
"ENQ" => "112214",
"ACK" => "112412",
"BEL" => "122114",
"BS" => "122411",
"HT" => "142112",
"LF" => "142211",
"VT" => "241211",
"FF" => "221114",
"CR" => "413111",
"SO" => "241112",
"SI" => "134111",
"DLE" => "111242",
"DC1" => "121142",
"DC2" => "121241",
"DC3" => "114212",
"DC4" => "124112",
"NAK" => "124211",
"SYN" => "411212",
"ETB" => "421112",
"CAN" => "421211",
"EM" => "212141",
"SUB" => "214121",
"ESC" => "412121",
"FS" => "111143",
"GS" => "111341",
"RS" => "131141",
"US" => "114113",
"FNC 3" => "114311",
"FNC 2" => "411113",
"SHIFT" => "411311",
"CODE C" => "113141",
"CODE B" => "114131",
"FNC 4" => "311141",
"FNC 1" => "411131",
"Start A" => "211412",
"Start B" => "211214",
"Start C" => "211232",
"Stop" => "2331112"
);
$code_keys = array_keys($code_array);
$code_values = array_flip($code_keys);
for ($X = 1; $X <= strlen($text); $X++) {
$activeKey = substr($text, ($X - 1), 1);
$code_string .= $code_array[$activeKey];
$chksum = ($chksum + ($code_values[$activeKey] * $X));
}
$code_string .= $code_array[$code_keys[($chksum - (intval($chksum / 103) * 103))]];
$code_string = "211412" . $code_string . "2331112";
} elseif (strtolower($code_type) == "code39") {
$code_array = array(
"0" => "111221211",
"1" => "211211112",
"2" => "112211112",
"3" => "212211111",
"4" => "111221112",
"5" => "211221111",
"6" => "112221111",
"7" => "111211212",
"8" => "211211211",
"9" => "112211211",
"A" => "211112112",
"B" => "112112112",
"C" => "212112111",
"D" => "111122112",
"E" => "211122111",
"F" => "112122111",
"G" => "111112212",
"H" => "211112211",
"I" => "112112211",
"J" => "111122211",
"K" => "211111122",
"L" => "112111122",
"M" => "212111121",
"N" => "111121122",
"O" => "211121121",
"P" => "112121121",
"Q" => "111111222",
"R" => "211111221",
"S" => "112111221",
"T" => "111121221",
"U" => "221111112",
"V" => "122111112",
"W" => "222111111",
"X" => "121121112",
"Y" => "221121111",
"Z" => "122121111",
"-" => "121111212",
"." => "221111211",
" " => "122111211",
"$" => "121212111",
"/" => "121211121",
"+" => "121112121",
"%" => "111212121",
"*" => "121121211"
);
// Convert to uppercase
$upper_text = strtoupper($text);
for ($X = 1; $X <= strlen($upper_text); $X++) {
$code_string .= $code_array[substr($upper_text, ($X - 1), 1)] . "1";
}
$code_string = "1211212111" . $code_string . "121121211";
} elseif (strtolower($code_type) == "code25") {
$code_array1 = array("1", "2", "3", "4", "5", "6", "7", "8", "9", "0");
$code_array2 = array(
"3-1-1-1-3",
"1-3-1-1-3",
"3-3-1-1-1",
"1-1-3-1-3",
"3-1-3-1-1",
"1-3-3-1-1",
"1-1-1-3-3",
"3-1-1-3-1",
"1-3-1-3-1",
"1-1-3-3-1"
);
for ($X = 1; $X <= strlen($text); $X++) {
for ($Y = 0; $Y < count($code_array1); $Y++) {
if (substr($text, ($X - 1), 1) == $code_array1[$Y]) {
$temp[$X] = $code_array2[$Y];
}
}
}
for ($X = 1; $X <= strlen($text); $X += 2) {
if (isset($temp[$X]) && isset($temp[($X + 1)])) {
$temp1 = explode("-", $temp[$X]);
$temp2 = explode("-", $temp[($X + 1)]);
for ($Y = 0; $Y < count($temp1); $Y++) {
$code_string .= $temp1[$Y] . $temp2[$Y];
}
}
}
$code_string = "1111" . $code_string . "311";
} elseif (strtolower($code_type) == "codabar") {
$code_array1 = array(
"1",
"2",
"3",
"4",
"5",
"6",
"7",
"8",
"9",
"0",
"-",
"$",
":",
"/",
".",
"+",
"A",
"B",
"C",
"D"
);
$code_array2 = array(
"1111221",
"1112112",
"2211111",
"1121121",
"2111121",
"1211112",
"1211211",
"1221111",
"2112111",
"1111122",
"1112211",
"1122111",
"2111212",
"2121112",
"2121211",
"1121212",
"1122121",
"1212112",
"1112122",
"1112221"
);
// Convert to uppercase
$upper_text = strtoupper($text);
for ($X = 1; $X <= strlen($upper_text); $X++) {
for ($Y = 0; $Y < count($code_array1); $Y++) {
if (substr($upper_text, ($X - 1), 1) == $code_array1[$Y]) {
$code_string .= $code_array2[$Y] . "1";
}
}
}
$code_string = "11221211" . $code_string . "1122121";
}
// Pad the edges of the barcode
$code_length = 20;
if ($print) {
$text_height = 30;
} else {
$text_height = 0;
}
for ($i = 1; $i <= strlen($code_string); $i++) {
$code_length = $code_length + (integer)(substr($code_string, ($i - 1), 1));
}
if (strtolower($orientation) == "horizontal") {
$img_width = $code_length * $SizeFactor;
$img_height = $size;
} else {
$img_width = $size;
$img_height = $code_length * $SizeFactor;
}
$image = imagecreate($img_width, $img_height + $text_height);
$black = imagecolorallocate($image, 0, 0, 0);
$white = imagecolorallocate($image, 255, 255, 255);
imagefill($image, 0, 0, $white);
if ($print) {
imagestring($image, 5, 31, $img_height, $text, $black);
}
$location = 10;
for ($position = 1; $position <= strlen($code_string); $position++) {
$cur_size = $location + (substr($code_string, ($position - 1), 1));
if (strtolower($orientation) == "horizontal") {
imagefilledrectangle($image, $location * $SizeFactor, 0, $cur_size * $SizeFactor, $img_height,
($position % 2 == 0 ? $white : $black));
} else {
imagefilledrectangle($image, 0, $location * $SizeFactor, $img_width, $cur_size * $SizeFactor,
($position % 2 == 0 ? $white : $black));
}
$location = $cur_size;
}
// Draw barcode to the screen or save in a file
if ($filepath == "") {
header('Content-type: image/png');
imagepng($image);
imagedestroy($image);
} else {
imagepng($image, $filepath);
imagedestroy($image);
}
}
?>
|