Générer un code barre

Consultez la formation au référencement naturel Google de WebRankInfo / Ranking Metrics


xdeslandes
WRInaute impliqué
WRInaute impliqué
 
Messages: 314
Inscription: Mer Déc 29, 2004 20:17

Message le Jeu Aoû 04, 2005 8:58

L'exemple qu'il montre en ligne fonctionne pour EAN13, mais pas pour le code 39 !
C'est toujours la même chose : il semble que générer un EAN13 soit fréquent et facile, mais pour les autres codes, ce ne sont que des exécutables ou des trucs pas faciles d'emploi.
Il est clair que sous forme de classe (comme Debora), l'intégration de l'image générée est faisable dans mon appli.
J'envisage deux solutions au choix :
1- développer une fonction qui traduit mes chaines alphanumériques en chaines de 13 chiffres, qui seront ensuite codées par Debora
2- transformer en classe php (suivant le modèle de Debora) le code suivant qui fonctionne pour le code 39 :
Code: Tout sélectionner
<?php
// code barre Code 39
// Le 27/05/2005
 
//Chacun des 43 caractères du mode simple se compose d'un motif fixe constitué de 5 barres noires et de 4 barres blanches (espace).
//Les barres peuvent être fines ou larges (Les larges font 2,2 à 3 fois la largeur des fines)
//Il y a toujours 3 barres larges parmi les 9 barres.
//Une barre blanche fine ajoutée à la fin permet l'espacement avec le caractère suivant.
//Un caractère spécial (Affecté au symbole *) sert de délimiteur de début et de fin.
//Une clé de contrôle peut être ajoutée; elle est calculée en totalisant les valeurs de chaque caractère tirées du tableau suivant, puis en prenant le reste de la division de cette somme par 43.
//Dans le tableau suivant les barres noires étroites sont symbolisées par "1", les larges par "111", les barres blanches étroites par "0" et les larges par "000".
 
//Exemple de clé de contrôle pour : ZB65732
//35 + 11 + 6 +5 +7 +3 +2 = 69
//69 / 43 = 1, reste 26 qui correspond à la lettre Q
//Nouveau code avec la clé : ZB65732Q
 
// Merci à http://grandzebu.net/informatique/codbar/code39.htm pour l'explication ci-dessus
 
//il suffit d'appeler le script: codebarre.php?texte=0123456789&h=80&L=2
 
if(isset($_GET['texte'])) {
  $text = $_GET['texte'];
  function str_split( $str ) {
    $arr = array();
    for ($j = 0; $j < strlen($str); $j++) {
      $arr[] = substr($str,$j,1);
    }
    return $arr;
  }
  //echo $text;
  //putenv('GDFONTPATH=' . realpath($_GET['prof'].'../images/'));
  //putenv('GDFONTPATH='/home/.sites/143/site40/web/images/');
  putenv('GDFONTPATH=' . realpath('.'));
//echo realpath('.');
if(!isset($_GET['h'])) {$barcode_hauteur = 80; } else {$barcode_hauteur = $_GET['h'];}
$tab['0']=' 101000111011101';    $tab2[0]='0';    $tab3['0']=0;    $tab['F']='101110111000101';    $tab2[15]='F';    $tab3['F']=15;    $tab['U']='111000101010111';    $tab2[30]='U';    $tab3['U']=30;
$tab['1']=' 111010001010111';    $tab2[1]='1';    $tab3['1']=1;    $tab['G']=' 101010001110111';    $tab2[16]='G';    $tab3['G']=16;    $tab['V']='100011101010111';    $tab2[31]='V';    $tab3['V']=31;
$tab['2']=' 101110001010111';    $tab2[2]='2';    $tab3['2']=2;    $tab['H']=' 111010100011101';    $tab2[17]='H';    $tab3['H']=17;    $tab['W']='111000111010101';    $tab2[32]='W';    $tab3['W']=32;
$tab['3']=' 111011100010101';    $tab2[3]='3';    $tab3['3']=3;    $tab['I']=' 101110100011101';    $tab2[18]='I';    $tab3['I']=18;    $tab['X']='100010111010111';    $tab2[33]='X';    $tab3['X']=33;
$tab['4']=' 101000111010111';    $tab2[4]='4';    $tab3['4']=4;    $tab['J']=' 101011100011101';    $tab2[19]='J';    $tab3['J']=19;    $tab['Y']='111000101110101';    $tab2[34]='Y';    $tab3['Y']=34;
$tab['5']=' 111010001110101';    $tab2[5]='5';    $tab3['5']=5;    $tab['K']=' 111010101000111';    $tab2[20]='K';    $tab3['K']=20;    $tab['Z']='100011101110101';    $tab2[35]='Z';    $tab3['Z']=35;
$tab['6']=' 101110001110101';    $tab2[6]='6';    $tab3['6']=6;    $tab['L']=' 101110101000111';    $tab2[21]='L';    $tab3['L']=21;    $tab['-']='100010101110111';    $tab2[36]='-';    $tab3['-']=36;
$tab['7']='101000101110111';    $tab2[7]='7';    $tab3['7']=7;    $tab['M']=' 111011101010001';    $tab2[22]='M';    $tab3['M']=22;    $tab['.']='111000101011101';    $tab2[37]='.';    $tab3['.']=37;
$tab['8']=' 111010001011101';    $tab2[8]='8';    $tab3['8']=8;    $tab['N']=' 101011101000111';    $tab2[23]='N';    $tab3['N']=23;    $tab[' ']='100011101011101';    $tab2[38]=' ';    $tab3[' ']=38;
$tab['9']=' 101110001011101';    $tab2[9]='9';    $tab3['9']=9;    $tab['O']=' 111010111010001';    $tab2[24]='O';    $tab3['O']=24;    $tab['$']='100010001000101';    $tab2[39]='$';    $tab3['$']=39;
$tab['A']=' 111010100010111';    $tab2[10]='A';    $tab3['A']=10;    $tab['P']=' 101110111010001';    $tab2[25]='P';    $tab3['P']=25;    $tab['/']='100010001010001';    $tab2[40]='/';    $tab3['/']=40;
$tab['B']='101110100010111';    $tab2[11]='B';    $tab3['B']=11;    $tab['Q']='101010111000111';    $tab2[26]='Q';    $tab3['Q']=26;    $tab['+']='100010100010001';    $tab2[41]='+';    $tab3['+']=41;
$tab['C']='111011101000101';    $tab2[12]='C';    $tab3['C']=12;    $tab['R']='111010101110001';    $tab2[27]='R';    $tab3['R']=27;    $tab['%']='101000100010001';    $tab2[42]='%';    $tab3['%']=42;
$tab['D']='101011100010111';    $tab2[13]='D';    $tab3['D']=13;    $tab['S']='101110101110001';    $tab2[28]='S';    $tab3['S']=28;
$tab['E']='111010111000101';    $tab2[14]='E';    $tab3['E']=14;    $tab['T']='101011101110001';    $tab2[29]='T';    $tab3['T']=29;    $tab['*']='100010111011101';
 
$j=0;
$barcode= $tab['*'].'0';
foreach ( str_split( $text ) as $caractere ) {
$barcode.= $tab[$caractere].'0';
$j+=$tab3[$caractere];
}
// calcul du code de contôle
$taille_police=5;
$j=fmod($j, 43);
$barcode.=$tab[$tab2[$j]].'0';
$barcode.=$tab['*'].'0';
$text='*'.$text.$tab2[$j].'*';
//barre détermine le nombre de pixel d'une barre
  //le coef est la différence de largeur entre les barres fines et les épaisse, il doit être entre 2,2 et 3
  //mais vu qu'on travail avec de barres de 1 pixels les couples possibles sont
  // dimension 0 1 2 3 4 5 6 7 8
  $tab=array(
"barre"=>array(1, 2, 3, 4, 5, 6, 8, 9, 10),
"coef"=> array(3, 3, 3, 3, 3, 3, 3, 3, 3));
  //dimension permet de sélectionner une taille (largeur) dans le tableau ci-dessus
  if(!isset($_GET['L'])) {$dimension = 2; } else {$dimension = $_GET['L'];}
$barre=$tab["barre"][$dimension];
$coef=$tab["coef"][$dimension];
//le nombre total de barre : 3 barres larges pour 6 fines plus 1 barre fine d'espacement
  $nbre=(3*$coef+6+1)*$barre;
  //le nombre de barre d'1 pixel (avec le code de contôle et le "*" à chaque extrémité)
  $barcode_longueur=strlen($barcode)*$barre;
  //creation de l'image
  $im = imagecreate($barcode_longueur,$barcode_hauteur);
  $white = imagecolorallocate($im, 255,255,255);
  $black = imagecolorallocate($im, 0,0,0);
  $font_hauteur = imagefontheight( $taille_police );
  $font_largeur = imagefontwidth( $taille_police );
  //détermination de la hauteur des barre
  $barcode_hauteur=$barcode_hauteur-$font_hauteur;
  //on construit chaque barre
  $xpos=0;
  foreach ( str_split($barcode) as $caractere ) {
    for($a=0; $a<$barre; $a++) {
      if ( $caractere == 0 ) {
        imageline( $im, $xpos, 0, $xpos, $barcode_hauteur, $white );
      } else {
        imageline( $im, $xpos, 0, $xpos, $barcode_hauteur, $black );
      }
      $xpos++;
    }
  }
  //on ajoute le texte lisible en dessous
  imagestring( $im, $taille_police,($barcode_longueur-$font_largeur*strlen($text))/2,$barcode_hauteur,$text,$black);
  //on finalise l'image
  header("Content-type: image/png");
  imagepng($im);
  imagedestroy($im);
}
?>


Qu'en pensez-vous ?


psykoko
WRInaute occasionnel
WRInaute occasionnel
 
Messages: 187
Inscription: Ven Juin 03, 2005 15:04

Message le Jeu Aoû 04, 2005 10:23

-http://www.phpcs.com/code.aspx?ID=31659

je crois que tu devrais trouver ce que tu recherche non?


xdeslandes
WRInaute impliqué
WRInaute impliqué
 
Messages: 314
Inscription: Mer Déc 29, 2004 20:17

Message le Ven Aoû 05, 2005 13:30

Ce code est effectivement excellent, mais difficilement exploitable. Il est bien lorsque l'on veut l'appeler directement avec les paramètres, mais j'aimerais bien pouvoir appeler qqch du genre :
Code: Tout sélectionner
<img src="code39.php?texte=1234567890123qsderty&h=50&L=1" border="0">

Il faudrait, je pense, créer à partir de ce script une classe php. Qu'en pensez-vous ?
(merci de vos coups de mains et avis :D !)


xdeslandes
WRInaute impliqué
WRInaute impliqué
 
Messages: 314
Inscription: Mer Déc 29, 2004 20:17

Message le Sam Nov 19, 2005 10:31

Je retombe sur ce topic après quelque temps. Juste pour vous dire que finalement, j'ai utilisé la classe php FPDF qui génère des fichiers pdf, et qui est implémentée pour générer des codes barres. Bref, tout ce qu'il me fallait, et super souple, facilement adaptable. Merci FPDF, et merci à vous (un peu tard). :D

Générer un code barre

Formation recommandée sur ce thème :

Formation Référencement naturel Google : apprenez une méthode efficace pour optimiser à fond le référencement naturel dans Google de façon durable... Formation animée par Olivier Duffez et Fabien Facériès, experts en référencement naturel.

Tous les détails sur le site Ranking Metrics : programme, prix, dates et lieux, inscription en ligne.

Lectures recommandées sur ce thème :

Consultez la description détaillée des produits ou services de Google suivants : Google Code, Google Toolbar API



Qui est en ligne

Utilisateurs parcourant ce forum: Aucun utilisateur enregistré et 0 invités