This script implements EAN-13 and UPC-A barcodes


Author: Olivier
License: FPDF


This script implements EAN-13 and UPC-A barcodes (the second being a particular case of the first one). Bars are drawn directly in the PDF (no image is generated).

EAN13(float x, float y, string barcode [, float h [, float w]])

x: abscissa of barcode.
y: ordinate of barcode.
barcode: value of barcode.
h: height of barcode. Default value: 16.
w: width of a bar. Default value: 0.35.

UPC_A(float x, float y, string barcode [, float h [, float w]])

Same parameters.

An EAN-13 barcode is made up of 13 digits, UPC-A of 12 (leading zeroes are added if necessary). The last digit is a check digit; if it's not supplied, it will be automatically computed.


<?php require('fpdf.php'); class PDF_EAN13 extends FPDF { function EAN13($x, $y, $barcode, $h=16, $w=.35) { $this->Barcode($x, $y, $barcode, $h, $w, 13); } function UPC_A($x, $y, $barcode, $h=16, $w=.35) { $this->Barcode($x, $y, $barcode, $h, $w, 12); } function GetCheckDigit($barcode) { //Compute the check digit $sum=0; for($i=1;$i<=11;$i+=2) $sum+=3*$barcode[$i]; for($i=0;$i<=10;$i+=2) $sum+=$barcode[$i]; $r=$sum%10; if($r>0) $r=10-$r; return $r; } function TestCheckDigit($barcode) { //Test validity of check digit $sum=0; for($i=1;$i<=11;$i+=2) $sum+=3*$barcode[$i]; for($i=0;$i<=10;$i+=2) $sum+=$barcode[$i]; return ($sum+$barcode[12])%10==0; } function Barcode($x, $y, $barcode, $h, $w, $len) { //Padding $barcode=str_pad($barcode, $len-1, '0', STR_PAD_LEFT); if($len==12) $barcode='0'.$barcode; //Add or control the check digit if(strlen($barcode)==12) $barcode.=$this->GetCheckDigit($barcode); elseif(!$this->TestCheckDigit($barcode)) $this->Error('Incorrect check digit'); //Convert digits to bars $codes=array( 'A'=>array( '0'=>'0001101', '1'=>'0011001', '2'=>'0010011', '3'=>'0111101', '4'=>'0100011', '5'=>'0110001', '6'=>'0101111', '7'=>'0111011', '8'=>'0110111', '9'=>'0001011'), 'B'=>array( '0'=>'0100111', '1'=>'0110011', '2'=>'0011011', '3'=>'0100001', '4'=>'0011101', '5'=>'0111001', '6'=>'0000101', '7'=>'0010001', '8'=>'0001001', '9'=>'0010111'), 'C'=>array( '0'=>'1110010', '1'=>'1100110', '2'=>'1101100', '3'=>'1000010', '4'=>'1011100', '5'=>'1001110', '6'=>'1010000', '7'=>'1000100', '8'=>'1001000', '9'=>'1110100') ); $parities=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') ); $code='101'; $p=$parities[$barcode[0]]; for($i=1;$i<=6;$i++) $code.=$codes[$p[$i-1]][$barcode[$i]]; $code.='01010'; for($i=7;$i<=12;$i++) $code.=$codes['C'][$barcode[$i]]; $code.='101'; //Draw bars for($i=0;$i<strlen($code);$i++) { if($code[$i]=='1') $this->Rect($x+$i*$w, $y, $w, $h, 'F'); } //Print text uder barcode $this->SetFont('Arial', '', 12); $this->Text($x, $y+$h+11/$this->k, substr($barcode, -$len)); } } ?>


<?php require('ean13.php'); $pdf=new PDF_EAN13(); $pdf->AddPage(); $pdf->EAN13(80, 40, '123456789012'); $pdf->Output(); ?>
View the result here.



Quelle, zuletzt abgerufen 02.10.2016 14:57