You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
133 lines
9.4 KiB
133 lines
9.4 KiB
<?php |
|
|
|
/* |
|
* Author: David S. Tufts |
|
* Company: Rocketwood.LLC |
|
* www.rocketwood.com |
|
* Date: 05/25/2003 |
|
* Usage: |
|
* <img src="/barcode.php?text=testing" alt="testing" /> |
|
*/ |
|
|
|
// Get pararameters that are passed in through $_GET or set to the default value |
|
$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"); |
|
$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"); |
|
$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; |
|
for ($i = 1; $i <= strlen($code_string); $i++) { |
|
$code_length = $code_length + (int)(substr($code_string, ($i - 1), 1)); |
|
} |
|
|
|
if (strtolower($orientation) == "horizontal") { |
|
$img_width = $code_length; |
|
$img_height = $size; |
|
} else { |
|
$img_width = $size; |
|
$img_height = $code_length; |
|
} |
|
|
|
$image = imagecreate($img_width, $img_height); |
|
$black = imagecolorallocate($image, 0, 0, 0); |
|
$white = imagecolorallocate($image, 255, 255, 255); |
|
|
|
imagefill($image, 0, 0, $white); |
|
|
|
$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, 0, $cur_size, $img_height, ($position % 2 == 0 ? $white : $black)); |
|
} else { |
|
imagefilledrectangle($image, 0, $location, $img_width, $cur_size, ($position % 2 == 0 ? $white : $black)); |
|
} |
|
$location = $cur_size; |
|
} |
|
// Draw barcode to the screen |
|
header('Content-type: image/png'); |
|
imagepng($image); |
|
imagedestroy($image);
|
|
|