Advertisement
Guest User

Barcode

a guest
Oct 5th, 2012
2,771
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
PHP 6.41 KB | None | 0 0
  1. <?php
  2.  
  3. /*
  4.  *    <img src="/barcode.php&text=testing" alt="testing" />
  5.  */
  6.    
  7.     // Get pararameters that are passed in through $_GET or set to the default value
  8.     $text = (isset($_GET["text"])?$_GET["text"]:"0");
  9.     $size = (isset($_GET["size"])?$_GET["size"]:"20");
  10.     $width_scale = (isset($_GET["width_scale"])?$_GET["width_scale"]:1.0);
  11.    
  12.     $orientation = (isset($_GET["orientation"])?$_GET["orientation"]:"horizontal");
  13.     $code_type = (isset($_GET["codetype"])?$_GET["codetype"]:"code128");
  14.     $code_string = "";
  15.  
  16.     // Translate the $text into barcode the correct $code_type
  17.     if(strtolower($code_type) == "code128")
  18.     {
  19.         $chksum = 104;
  20.         // Must not change order of array elements as the checksum depends on the array's key to validate final code
  21.         $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");
  22.         $code_keys = array_keys($code_array);
  23.         $code_values = array_flip($code_keys);
  24.         for($X = 1; $X <= strlen($text); $X++)
  25.         {
  26.             $activeKey = substr( $text, ($X-1), 1);
  27.             $code_string .= $code_array[$activeKey];
  28.             $chksum=($chksum + ($code_values[$activeKey] * $X));
  29.         }
  30.         $code_string .= $code_array[$code_keys[($chksum - (intval($chksum / 103) * 103))]];
  31.  
  32.         $code_string = "211214" . $code_string . "2331112";
  33.     }
  34.     elseif(strtolower($code_type) == "code39")
  35.     {
  36.         $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");
  37.  
  38.         // Convert to uppercase
  39.         $upper_text = strtoupper($text);
  40.  
  41.         for($X = 1; $X<=strlen($upper_text); $X++)
  42.         {
  43.             $code_string .= $code_array[substr( $upper_text, ($X-1), 1)] . "1";
  44.         }
  45.  
  46.         $code_string = "1211212111" . $code_string . "121121211";
  47.     }
  48.     elseif(strtolower($code_type) == "code25")
  49.     {
  50.         $code_array1 = array("1","2","3","4","5","6","7","8","9","0");
  51.         $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");
  52.  
  53.         for($X = 1; $X <= strlen($text); $X++)
  54.         {
  55.             for($Y = 0; $Y < count($code_array1); $Y++)
  56.             {
  57.                 if(substr($text, ($X-1), 1) == $code_array1[$Y])
  58.                     $temp[$X] = $code_array2[$Y];
  59.             }
  60.         }
  61.  
  62.         for($X=1; $X<=strlen($text); $X+=2)
  63.         {
  64.             $temp1 = explode( "-", $temp[$X] );
  65.             $temp2 = explode( "-", $temp[($X + 1)] );
  66.             for($Y = 0; $Y < count($temp1); $Y++)
  67.                 $code_string .= $temp1[$Y] . $temp2[$Y];
  68.         }
  69.  
  70.         $code_string = "1111" . $code_string . "311";
  71.     }
  72.     elseif(strtolower($code_type) == "codabar")
  73.     {
  74.         $code_array1 = array("1","2","3","4","5","6","7","8","9","0","-","$",":","/",".","+","A","B","C","D");
  75.         $code_array2 = array("1111221","1112112","2211111","1121121","2111121","1211112","1211211","1221111","2112111","1111122","1112211","1122111","2111212","2121112","2121211","1121212","1122121","1212112","1112122","1112221");
  76.  
  77.         // Convert to uppercase
  78.         $upper_text = strtoupper($text);
  79.  
  80.         for($X = 1; $X<=strlen($upper_text); $X++)
  81.         {
  82.             for($Y = 0; $Y<count($code_array1); $Y++)
  83.             {
  84.                 if(substr($upper_text, ($X-1), 1) == $code_array1[$Y] )
  85.                     $code_string .= $code_array2[$Y] . "1";
  86.             }
  87.         }
  88.         $code_string = "11221211" . $code_string . "1122121";
  89.     }
  90.  
  91.     // Pad the edges of the barcode
  92.     $code_length = 10;
  93.     for($i=1; $i <= strlen($code_string); $i++)
  94.         $code_length = $code_length + (integer)(substr($code_string,($i-1),1));
  95.  
  96.     if(strtolower($orientation) == "horizontal")
  97.     {
  98.         $img_width = $code_length * $width_scale;
  99.         $img_height = $size;
  100.     }
  101.     else
  102.     {
  103.         $img_width = $size;
  104.         $img_height = $code_length * $width_scale;
  105.     }
  106.    
  107.     $image = imagecreate($img_width, $img_height);
  108.     $black = imagecolorallocate ($image, 0, 0, 0);
  109.     $white = imagecolorallocate ($image, 255, 255, 255);
  110.  
  111.     imagefill( $image, 0, 0, $white );
  112.  
  113.     $location = 5;
  114.     for($position = 1 ; $position <= strlen($code_string); $position++)
  115.     {
  116.         $cur_size = $location + ( substr($code_string, ($position-1), 1) );
  117.         if(strtolower($orientation) == "horizontal")
  118.             imagefilledrectangle( $image, $location * $width_scale, 0, $cur_size * $width_scale, $img_height, ($position % 2 == 0 ? $white : $black) );
  119.         else
  120.             imagefilledrectangle( $image, 0, $location * $width_scale, $img_width, $cur_size * $width_scale, ($position % 2 == 0 ? $white : $black) );
  121.         $location = $cur_size;
  122.     }
  123.    
  124.     // Draw barcode to the screen
  125.     header ('Content-type: image/png');
  126.     imagepng($image);
  127.     imagedestroy($image);
  128. ?>
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement