php实现生成code128条形码的方法详解


Posted in PHP onJuly 19, 2017

本文实例讲述了php实现生成code128条形码的方法。分享给大家供大家参考,具体如下:

效果图:

php实现生成code128条形码的方法详解

<?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 ='B';
  private $start_codes =array('A'=>self::STARTA,'B'=>self::STARTB,'C'=>self::STARTC);
  private $code ='';
  private $bin_code ='';
  private $text ='';
  public function __construct($code='',$text='',$type='B')
  {
    if (in_array($type,array('A','B','C')))
      $this->setType($type);
    else
      $this->setType('B');
    if ($code !=='')
      $this->setCode($code);
    if ($text !=='')
      $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 !='')
    {
      $this->code= $code;
      if ($this->text ==='')
        $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 =='A')
      {
        if ($val > 95)
          throw new Exception(' illegal barcode character '.$ch.' for code128A in '.__FILE__.' on line '.__LINE__);
        if ($val < 32)
          $val += 64;
        else
          $val -=32;
      }
      elseif ($this->type =='B')
      {
        if ($val < 32 || $val > 127)
          throw new Exception(' illegal barcode character '.$ch.' for code128B in '.__FILE__.' on line '.__LINE__);
        else
          $val -=32;
      }
      else
      {
        if (!is_numeric($ch) || (int)$ch < 0 || (int)($ch) > 99)
          throw new Exception(' illegal barcode character '.$ch.' for code128C in '.__FILE__.' on line '.__LINE__);
        else
        {
          if (strlen($ch) ==1)
            $ch .='0';
          $val = (int)($ch);
        }
      }
    }
    catch(Exception $ex)
    {
      errorlog('die',$ex->getMessage());
    }
    return $val;
  }
  private function parseCode()
  {
    $this->type=='C'?$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 ='png',$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; //????或3的字?的??度??0,??或5的字???度??1
    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 'jpg':
      case 'jpeg':
        Imagejpeg($this->image,$file_name);
        break;
      case 'png':
        Imagepng($this->image,$file_name);
        break;
      case 'gif':
        break;
        Imagegif($this->image,$file_name);
      default:
        Imagepng($this->image,$file_name);
        break;
    }
  }
}
$barcode = new BarCode128('88888888');
$barcode->createBarCode();
?>

附加一个强大的条码生成扩展包:
http://www.barcodebakery.com/

php实现生成code128条形码的方法详解

PHP 相关文章推荐
PHP 和 MySQL 基础教程(四)
Oct 09 PHP
PHP新手上路(五)
Oct 09 PHP
PHP大批量数据操作时临时调整内存与执行时间的方法
Apr 20 PHP
php生成略缩图代码
Jul 16 PHP
php安装xdebug/php安装pear/phpunit详解步骤(图)
Dec 22 PHP
采用header定义为文件然后readfile下载(隐藏下载地址)
Jan 31 PHP
php获取随机数组列表的方法
Nov 13 PHP
php通过session防url攻击方法
Dec 10 PHP
PHP 年月日的三级联动实例代码
May 24 PHP
PHP实现根据密码长度显示安全条
Jul 04 PHP
php处理多图上传压缩代码功能
Jun 13 PHP
php+js实现的无刷新下载文件功能示例
Aug 23 PHP
php-beanstalkd消息队列类实例分享
Jul 19 #PHP
php+ajax实现异步上传文件或图片功能
Jul 18 #PHP
Joomla框架实现字符串截取的方法示例
Jul 18 #PHP
PHP新特性详解之命名空间、性状与生成器
Jul 18 #PHP
PHP实现基于面向对象的mysqli扩展库增删改查操作工具类
Jul 18 #PHP
PHP基于XMLWriter操作xml的方法分析
Jul 17 #PHP
PHP基于DOMDocument解析和生成xml的方法分析
Jul 17 #PHP
You might like
php分页示例分享
2014/04/30 PHP
thinkphp5 URL和路由的功能详解与实例
2017/12/26 PHP
Mootools 1.2教程 滑动效果(Slide)
2009/09/15 Javascript
纯CSS打造的导航菜单(附jquery版)
2010/08/07 Javascript
jQuery实现form表单reset按钮重置清空表单功能
2012/12/18 Javascript
在js文件中如何获取basePath处理js路径问题
2013/07/10 Javascript
js中创建对象的几种方式示例介绍
2014/01/26 Javascript
javascript生成随机数的方法
2014/05/16 Javascript
node.js中的url.format方法使用说明
2014/12/10 Javascript
Jquery树插件zTree用法入门教程
2015/02/17 Javascript
jquery实现表单验证并阻止非法提交
2015/07/09 Javascript
JS+CSS实现表格高亮的方法
2015/08/05 Javascript
有关json_decode乱码及NULL的问题
2015/10/13 Javascript
JavaScript严格模式下关于this的几种指向详解
2017/07/12 Javascript
自适应布局meta标签中viewport、content、width、initial-scale、minimum-scale、maximum-scale总结
2017/08/18 Javascript
详解Vue路由钩子及应用场景(小结)
2017/11/07 Javascript
vue中v-show和v-if的异同及v-show用法
2019/06/06 Javascript
详解ng-alain动态表单SF表单项设置必填和正则校验
2019/06/11 Javascript
小程序分页实践之编写可复用分页组件
2019/07/18 Javascript
获取Django项目的全部url方法详解
2017/10/26 Python
python自动登录12306并自动点击验证码完成登录的实现源代码
2018/04/25 Python
python实现周期方波信号频谱图
2018/07/21 Python
Python使用sqlalchemy模块连接数据库操作示例
2019/03/13 Python
python写一个随机点名软件的实例
2019/11/28 Python
python selenium实现发送带附件的邮件代码实例
2019/12/10 Python
HTML5 客户端数据库简易使用:IndexedDB
2019/12/19 HTML / CSS
国际经济贸易专业推荐信
2013/11/06 职场文书
2013年学期结束动员演讲稿
2014/01/07 职场文书
JAVA程序员自荐书
2014/01/30 职场文书
《中国的气候》教学反思
2014/02/23 职场文书
洗发水广告词
2014/03/13 职场文书
交通文明倡议书
2014/05/16 职场文书
四风自我剖析材料思想汇报
2014/10/01 职场文书
如何在centos上使用yum安装rabbitmq-server
2021/03/31 Servers
MySQL Innodb索引机制详细介绍
2021/11/23 MySQL
Win11跳过联网界面创建本地管理账户的3种方法
2022/04/20 数码科技