Home  >  Article  >  Backend Development  >  Detailed explanation of how to generate barcode in php

Detailed explanation of how to generate barcode in php

巴扎黑
巴扎黑Original
2017-08-14 09:27:409654browse

This article mainly introduces the method of generating code128 barcodes in PHP. It gives the definition and usage of the PHP barcode generation class in the form of a complete example. Friends in need can refer to it.

The examples in this article describe PHP implements the method of generating code128 barcode. Share it with everyone for your reference, the details are as follows:

Rendering:


##

<?php
class BarCode128 {
  const STARTA = 103;
  const STARTB = 104;
  const STARTC = 105;
  const STOP = 106;
  private $unit_width = 1; //单位宽度 缺省1个象素
  private $is_set_height = false;
  private $width = -1;
  private $heith = 35;
  private $quiet_zone = 6;
  private $font_height = 15;
  private $font_type = 4;
  private $color =0x000000;
  private $bgcolor =0xFFFFFF;
  private $image = null;
  private $codes = array("212222","222122","222221","121223","121322","131222","122213","122312","132212","221213","221312","231212","112232","122132","122231","113222","123122","123221","223211","221132","221231","213212","223112","312131","311222","321122","321221","312212","322112","322211","212123","212321","232121","111323","131123","131321","112313","132113","132311","211313","231113","231311","112133","112331","132131","113123","113321","133121","313121","211331","231131","213113","213311","213131","311123","311321","331121","312113","312311","332111","314111","221411","431111","111224","111422","121124","121421","141122","141221","112214","112412","122114","122411","142112","142211","241211","221114","413111","241112","134111","111242","121142","121241","114212","124112","124211","411212","421112","421211","212141","214121","412121","111143","111341","131141","114113","114311","411113","411311","113141","114131","311141","411131","211412","211214","211412","2331112");
  private $valid_code = -1;
  private $type =&#39;B&#39;;
  private $start_codes =array(&#39;A&#39;=>self::STARTA,&#39;B&#39;=>self::STARTB,&#39;C&#39;=>self::STARTC);
  private $code =&#39;&#39;;
  private $bin_code =&#39;&#39;;
  private $text =&#39;&#39;;
  public function __construct($code=&#39;&#39;,$text=&#39;&#39;,$type=&#39;B&#39;)
  {
    if (in_array($type,array(&#39;A&#39;,&#39;B&#39;,&#39;C&#39;)))
      $this->setType($type);
    else
      $this->setType(&#39;B&#39;);
    if ($code !==&#39;&#39;)
      $this->setCode($code);
    if ($text !==&#39;&#39;)
      $this->setText($text);
  }
  public function setUnitWidth($unit_width)
  {
    $this->unit_width = $unit_width;
    $this->quiet_zone = $this->unit_width*6;
    $this->font_height = $this->unit_width*15;
    if (!$this->is_set_height)
    {
      $this->heith = $this->unit_width*35;
    }
  }
  public function setFontType($font_type)
  {
    $this->font_type = $font_type;
  }
  public function setBgcolor($bgcoloe)
  {
    $this->bgcolor = $bgcoloe;
  }
  public function setColor($color)
  {
    $this->color = $color;
  }
  public function setCode($code)
  {
    if ($code !=&#39;&#39;)
    {
      $this->code= $code;
      if ($this->text ===&#39;&#39;)
        $this->text = $code;
    }
  }
  public function setText($text)
  {
    $this->text = $text;
  }
  public function setType($type)
  {
    $this->type = $type;
  }
  public function setHeight($height)
  {
    $this->height = $height;
    $this->is_set_height = true;
  }
  private function getValueFromChar($ch)
  {
    $val = ord($ch);
    try
    {
      if ($this->type ==&#39;A&#39;)
      {
        if ($val > 95)
          throw new Exception(&#39; illegal barcode character &#39;.$ch.&#39; for code128A in &#39;.__FILE__.&#39; on line &#39;.__LINE__);
        if ($val < 32)
          $val += 64;
        else
          $val -=32;
      }
      elseif ($this->type ==&#39;B&#39;)
      {
        if ($val < 32 || $val > 127)
          throw new Exception(&#39; illegal barcode character &#39;.$ch.&#39; for code128B in &#39;.__FILE__.&#39; on line &#39;.__LINE__);
        else
          $val -=32;
      }
      else
      {
        if (!is_numeric($ch) || (int)$ch < 0 || (int)($ch) > 99)
          throw new Exception(&#39; illegal barcode character &#39;.$ch.&#39; for code128C in &#39;.__FILE__.&#39; on line &#39;.__LINE__);
        else
        {
          if (strlen($ch) ==1)
            $ch .=&#39;0&#39;;
          $val = (int)($ch);
        }
      }
    }
    catch(Exception $ex)
    {
      errorlog(&#39;die&#39;,$ex->getMessage());
    }
    return $val;
  }
  private function parseCode()
  {
    $this->type==&#39;C&#39;?$step=2:$step=1;
    $val_sum = $this->start_codes[$this->type];
    $this->width = 35;
    $this->bin_code = $this->codes[$val_sum];
    for($i =0;$i<strlen($this->code);$i+=$step)
    {
      $this->width +=11;
      $ch = substr($this->code,$i,$step);
      $val = $this->getValueFromChar($ch);
      $val_sum += $val;
      $this->bin_code .= $this->codes[$val];
    }
    $this->width *=$this->unit_width;
    $val_sum = $val_sum%103;
    $this->valid_code = $val_sum;
    $this->bin_code .= $this->codes[$this->valid_code];
    $this->bin_code .= $this->codes[self::STOP];
  }
  public function getValidCode()
  {
    if ($this->valid_code == -1)
      $this->parseCode();
    return $this->valid_code;
  }
  public function getWidth()
  {
    if ($this->width ==-1)
      $this->parseCode();
    return $this->width;
  }
  public function getHeight()
  {
    if ($this->width ==-1)
      $this->parseCode();
    return $this->height;
  }
  public function createBarCode($image_type =&#39;png&#39;,$file_name=null)
  {
    $this->parseCode();
    $this->image = ImageCreate($this->width+2*$this->quiet_zone,$this->heith + $this->font_height);
    $this->bgcolor = imagecolorallocate($this->image,$this->bgcolor >> 16,($this->bgcolor >> 8)&0x00FF,$this->bgcolor & 0xFF);
    $this->color = imagecolorallocate($this->image,$this->color >> 16,($this->color >> 8)&0x00FF,$this->color & 0xFF);
    ImageFilledRectangle($this->image, 0, 0, $this->width + 2*$this->quiet_zone,$this->heith + $this->font_height, $this->bgcolor);
    $sx = $this->quiet_zone;
    $sy = $this->font_height -1;
    $fw = 10; //編號為2或3的字體的寬度為10,為4或5的字體寬度為11
    if ($this->font_type >3)
    {
      $sy++;
      $fw=11;
    }
    $ex = 0;
    $ey = $this->heith + $this->font_height - 2;
    for($i=0;$i<strlen($this->bin_code);$i++)
    {
      $ex = $sx + $this->unit_width*(int) $this->bin_code{$i} -1;
      if ($i%2==0)
        ImageFilledRectangle($this->image, $sx, $sy, $ex,$ey, $this->color);
      $sx =$ex + 1;
    }
    $t_num = strlen($this->text);
    $t_x = $this->width/$t_num;
    $t_sx = ($t_x -$fw)/2;    //目的为了使文字居中平均分布
    for($i=0;$i<$t_num;$i++)
    {
      imagechar($this->image,$this->font_type,6*$this->unit_width +$t_sx +$i*$t_x,0,$this->text{$i},$this->color);
    }
    if (!$file_name)
    {
      header("Content-Type: image/".$image_type);
    }
    switch ($image_type)
    {
      case &#39;jpg&#39;:
      case &#39;jpeg&#39;:
        Imagejpeg($this->image,$file_name);
        break;
      case &#39;png&#39;:
        Imagepng($this->image,$file_name);
        break;
      case &#39;gif&#39;:
        break;
        Imagegif($this->image,$file_name);
      default:
        Imagepng($this->image,$file_name);
        break;
    }
  }
}
$barcode = new BarCode128(&#39;88888888&#39;);
$barcode->createBarCode();
?>

Attach a powerful barcode generation Extension pack:

http://www.barcodebakery.com/

The above is the detailed content of Detailed explanation of how to generate barcode in php. For more information, please follow other related articles on the PHP Chinese website!

Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn