Source for file upca.php
Documentation is available at upca.php
/* vim: set expandtab tabstop=4 softtabstop=4 shiftwidth=4: */
// +----------------------------------------------------------------------+
// +----------------------------------------------------------------------+
// | Copyright (c) 1997-2001 The PHP Group |
// +----------------------------------------------------------------------+
// | This source file is subject to version 3.0 of the PHP license, |
// | that is bundled with this package in the file LICENSE, and is |
// | available at through the world-wide-web at |
// | http://www.php.net/license/3_0.txt. |
// | If you did not receive a copy of the PHP license and are unable to |
// | obtain it through the world-wide-web, please send a note to |
// | license@php.net so we can mail you a copy immediately. |
// +----------------------------------------------------------------------+
// | Author: Didier FOURNOUT <didier.fournout@nyc.fr> |
// +----------------------------------------------------------------------+
// +----------------------------------------------------------+
// Jeffrey K. Brown 5/22/2005
// Slightly Modified ean13.php to get upca.php
// I needed a way to print UPC-A bar codes on a
// PHP page. The Image_Barcode class seemed like
// the best way to do it, so I modified ean13 to
// print in the UPC-A format. Checked the bar code
// tables against some documentation below (no errors)
// and validated the changes with my trusty cue-cat.
// http://www.indiana.edu/~atmat/units/barcodes/bar_t4.htm
// +----------------------------------------------------------+
require_once "Image/Barcode.php";
class Image_Barcode_upca extends Image_Barcode
var $_barcodeheight = 50;
* Font use to display text
var $_font = 2; // gd internal small font
var $_number_set = array (
'A' => array (0 ,0 ,0 ,1 ,1 ,0 ,1 ),
'B' => array (0 ,1 ,0 ,0 ,1 ,1 ,1 ),
'C' => array (1 ,1 ,1 ,0 ,0 ,1 ,0 )
'A' => array (0 ,0 ,1 ,1 ,0 ,0 ,1 ),
'B' => array (0 ,1 ,1 ,0 ,0 ,1 ,1 ),
'C' => array (1 ,1 ,0 ,0 ,1 ,1 ,0 )
'A' => array (0 ,0 ,1 ,0 ,0 ,1 ,1 ),
'B' => array (0 ,0 ,1 ,1 ,0 ,1 ,1 ),
'C' => array (1 ,1 ,0 ,1 ,1 ,0 ,0 )
'A' => array (0 ,1 ,1 ,1 ,1 ,0 ,1 ),
'B' => array (0 ,1 ,0 ,0 ,0 ,0 ,1 ),
'C' => array (1 ,0 ,0 ,0 ,0 ,1 ,0 )
'A' => array (0 ,1 ,0 ,0 ,0 ,1 ,1 ),
'B' => array (0 ,0 ,1 ,1 ,1 ,0 ,1 ),
'C' => array (1 ,0 ,1 ,1 ,1 ,0 ,0 )
'A' => array (0 ,1 ,1 ,0 ,0 ,0 ,1 ),
'B' => array (0 ,1 ,1 ,1 ,0 ,0 ,1 ),
'C' => array (1 ,0 ,0 ,1 ,1 ,1 ,0 )
'A' => array (0 ,1 ,0 ,1 ,1 ,1 ,1 ),
'B' => array (0 ,0 ,0 ,0 ,1 ,0 ,1 ),
'C' => array (1 ,0 ,1 ,0 ,0 ,0 ,0 )
'A' => array (0 ,1 ,1 ,1 ,0 ,1 ,1 ),
'B' => array (0 ,0 ,1 ,0 ,0 ,0 ,1 ),
'C' => array (1 ,0 ,0 ,0 ,1 ,0 ,0 )
'A' => array (0 ,1 ,1 ,0 ,1 ,1 ,1 ),
'B' => array (0 ,0 ,0 ,1 ,0 ,0 ,1 ),
'C' => array (1 ,0 ,0 ,1 ,0 ,0 ,0 )
'A' => array (0 ,0 ,0 ,1 ,0 ,1 ,1 ),
'B' => array (0 ,0 ,1 ,0 ,1 ,1 ,1 ),
'C' => array (1 ,1 ,1 ,0 ,1 ,0 ,0 )
var $_number_set_left_coding = array (
'0' => array ('A','A','A','A','A','A'),
'1' => array ('A','A','B','A','B','B'),
'2' => array ('A','A','B','B','A','B'),
'3' => array ('A','A','B','B','B','A'),
'4' => array ('A','B','A','A','B','B'),
'5' => array ('A','B','B','A','A','B'),
'6' => array ('A','B','B','B','A','A'),
'7' => array ('A','B','A','B','A','B'),
'8' => array ('A','B','A','B','B','A'),
'9' => array ('A','B','B','A','B','A')
//==========================================================================================
function draw ($text, $imgtype = 'png') {
$barcodewidth= (12 * 7 * $this->_barwidth) + 3 + 5 + 3 + 2 * (imagefontwidth($this->_font)+1 );
// Calculate the barcode width
$barcodewidth = (strlen($text)) * (7 * $this->_barwidth)
$barcodelongheight = (int) (imagefontheight($this->_font)/2 )+ $this->_barcodeheight;
$img = ImageCreate ($barcodewidth, $barcodelongheight+ imagefontheight($this->_font)+1 );
// Alocate the black and white colors
$black = ImageColorAllocate ($img, 0 , 0 , 0 );
$white = ImageColorAllocate ($img, 255 , 255 , 255 );
// Fill image with white color
$imgerror = ImageCreate ($barcodewidth, $barcodelongheight+ imagefontheight($this->_font)+1 );
$red = ImageColorAllocate ($imgerror, 255 , 0 , 0 );
$black = ImageColorAllocate ($imgerror, 0 ,0 ,0 );
imagestring($imgerror, $this->_font, $barcodewidth/2- (10/2* imagefontwidth($this->_font)), $this->_barcodeheight/2 , "Code Error", $black);
// get the first digit which is the key for creating the first 6 bars
imagestring($img, $this->_font, $xpos, $this->_barcodeheight, $key, $black);
//===========================================================================================
// Draws the left guard pattern (bar-space-bar)
$xpos += $this->_barwidth;
$xpos += $this->_barwidth;
$xpos += $this->_barwidth;
$set_array = $this->_number_set_left_coding[$key];
//=========================================================================================
foreach ($this->_number_set['0'][$set_array[0 ]] as $bar) {
$xpos += $this->_barwidth;
//=========================================================================================
// Draw left $text contents
for ($idx = 1; $idx < 6; $idx ++ ) {
imagestring ($img, $this->_font, $xpos+1 , $this->_barcodeheight, $value, $black);
//foreach ($this->_number_set[$value][$set_array[$idx-1]] as $bar) {
foreach ($this->_number_set[$value][$set_array[$idx]] as $bar) {
$xpos += $this->_barwidth;
//=========================================================================================
// Draws the center pattern (space-bar-space-bar-space)
$xpos += $this->_barwidth;
$xpos += $this->_barwidth;
$xpos += $this->_barwidth;
$xpos += $this->_barwidth;
$xpos += $this->_barwidth;
//====================================================================================
// Draw right $text contents
for ($idx = 6; $idx < 11; $idx ++ ) {
imagestring ($img, $this->_font, $xpos+1 , $this->_barcodeheight, $value, $black);
foreach ($this->_number_set[$value]['C'] as $bar) {
$xpos += $this->_barwidth;
//======================================================================================
foreach ($this->_number_set[$value]['C'] as $bar) {
$xpos += $this->_barwidth;
// ===================================================================================
// Draws the right guard pattern (bar-space-bar)
$xpos += $this->_barwidth;
$xpos += $this->_barwidth;
$xpos += $this->_barwidth;
// ====================================================================================
imagestring($img, $this->_font, $xpos+1 , $this->_barcodeheight, $value, $black);
// ======================================================================================
header("Content-type: image/gif");
header("Content-type: image/jpg");
header("Content-type: image/png");
Documentation generated on Mon, 11 Mar 2019 14:21:06 -0400 by phpDocumentor 1.4.4. PEAR Logo Copyright © PHP Group 2004.
|