bcode.php 3.12 KB
<?php
// ïðèíèìàåì ÷èñëî èëè ãåíåðèðóåì ñëó÷àéíûé êîä 
$code_num = (integer)$_GET['num'] ? (integer)$_GET['num'] : rand(11111111, 99999999);
  ////// íàñòðîéêà  /////////////////////////////////////////////////////////////
 $height = 200;//100;           // âûñîòà èçîáðàæåíèÿ  (âñå ðàçìåðû - â ïèêñåëàõ)
 $width = 80;//36;              // øèðèíà èçîáðàæåíèÿ
 GLOBAL $from_top;
 $from_top = 2;             // îòñòóï êîäà îò âåðõà èçîáðàæåíèÿ
 define("BORDER",false);     // ðèñîâàòü ðàìêó - äëÿ öåëåé îòëàäêè
 define("FROM_LEFT",20);      // îòñòóï ñëåâà
 define("CODE_WIDTH", 250);  // øèðèíà êîäà
 define("FONT_HEIGHT",26);   // âûñîòà øðèôòà öèôð êîäà + 1-2 ïèêñåëà
 define("MODULE_WIDTH",2);  // øèðèíà ìîäóëÿ øðèõ-êîäà â ïèêñåëàõ
 ///////////////////////////////////////////////////////////////////////////////
 // îïðåäåëÿåì èñïîëüçóåìûå öâåòà
 $im = ImageCreateTrueColor($width,$height);
 GLOBAL $white;
 $white = ImageColorAllocate($im, 255,255,255);
 // öâåò ðàìêè
 $blue = ImageColorAllocate($im, 199,223,250);
 GLOBAL $black;
 $black = ImageColorAllocate($im, 0,0,0);
 ImageFill($im,0,0,$white);
 // ðèñóåì ðàìêó
 if(BORDER)
 {
     ImageLine($im, 0, 0, 0, $height, $blue);
     ImageLine($im, 0, 0, $width, 0, $blue);
     ImageLine($im,$width-1,0, $width-1,$height, $blue);
     ImageLine($im,0,$height-1, $width,$height-1, $blue);
 }
 // ðèñóåì øòðèõ-êîä
   // ìàññèâ ïîëîñîê-öèôð
 $num[0] = "101010001110";
 $num[1] = "101011100010";
 $num[2] = "101000101110";
 $num[3] = "111000101010";
 $num[4] = "101110100010";
 $num[5] = "111010100010";
 $num[6] = "100010101110";
 $num[7] = "100010111010";
 $num[8] = "100011101010";
 $num[9] = "111010001010";
 //$num[10]= "10100010001110"; // êîä *
 $num[10]= "100101101101";


 // ôóíêöèÿ âûâîäà ïîëîñîê êîäà
 function draw_line($im, $line_str,$number){

if($number=='11'){
ImageTTFText($im, 21, 270, FROM_LEFT, $GLOBALS['from_top']+2,$GLOBALS['black'],'./fonts/tahoma.ttf', "*" );
}else
  if ($number != "10")
  {
    // âûâîäèì öèôðû íà øòðèõ-êîäå
   ImageTTFText($im, 21, 270, FROM_LEFT, $GLOBALS['from_top']+2,$GLOBALS['black'],'./fonts/tahoma.ttf', $number );
   $from_left = FROM_LEFT + FONT_HEIGHT;
  }
  else $from_left = FROM_LEFT;
  for($j = 0; $j < strlen($line_str); $j++)
  {
    $sub_line = substr($line_str, $j,1);
    if ($sub_line == "1") $line_color = $GLOBALS['black'];
    else  $line_color = $GLOBALS['white'];
    for ($i = 1;$i <= MODULE_WIDTH; $i++)
    {
      //ImageLine($im,$from_left, $GLOBALS['from_top'], CODE_WIDTH + FROM_LEFT, $GLOBALS['from_top'], $line_color);
      $GLOBALS['from_top']++;
    }
   }
 }
 //////////////////////// íà÷àëî âûâîäà øòðèõ-êîäà /////////////////////////////
     // íà÷àëüíûé ñèìâîë
 draw_line($im,$num[10],11);
    // öèôðû êîäà
 for ($i = 0; $i < strlen($code_num); $i++)
 {
  $number = (integer)substr($code_num, $i,1);
  draw_line($im,$num[$number],$number);
 }
  // êîíå÷íûé ñèìâîë
 draw_line($im,$num[10],11);
///////////////////////// êîíåö ãåíåðàöèè øòðèõ-êîäà /////////////////////////////
 // âûâîäèì êàðòèíêó â áðàóçåð
 Header('Content-type: image/png');
 ImagePng($im);
  // ...èëè ñîõðàíÿåì â ôàéë
 // ImagePng($im, "barcode_$code_num.png");
 ImageDestroy($im);
?>