suche gutes EAN-13 Strichcode php Script

ciberjoerg

Erfahrenes Mitglied
Meine frage wäre ob jemand ein Gutes und Fehlerfreies PHP script zum erstellen von strichcodebildern mit veränderbarer Größe.
dieses script welches ich bisher nutze, funktioniert zwar einwandfrei und ohne fehler, erzeugt sogar 1:1 strichcodes wie auf produktverpackungen, aber die strichcodes lassen sich nicht an der größe anpassen.

ein beispiel meines scripts sieht so aus:

http://nijo-portal.pytalhost.de/code.php?barcode=0123456789123&coding=EAN-13

den quellcode gibts hier:

http://nijo-portal.pytalhost.de/code.txt
 
Ich kann dir diesen vom fpdf addon anbieten, sollte ja kein Problem sein es seinen Bedürfnissen anzupassen.

kopiert von hier ;)
PHP:
<?php
define('FPDF_FONTPATH', 'font/');
require('fpdf.php');

class PDF 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));
}
}

$pdf=new PDF();
$pdf->Open();
$pdf->AddPage();
$pdf->EAN13(80, 40, '123456789012');
$pdf->Output();
?>
 
hey danke das sieht echt gut aus. nur leider kann ich da leider keine 13 stellige variable übergeben um den code zu erzeugen.
 
Zuletzt bearbeitet:
Bin mir nicht sicher ob die EAN-13 auch 13 Stellen vorsieht, dazu kenne ich die Materie zuwenig. Ansonsten den Count in den For Schleifen mal erhöhen, weiß aber nicht ob es dann noch lesbar ist.
 
Zuletzt bearbeitet von einem Moderator:
Zurück