Générer un code barre
19 messages
• Page 2 sur 2 • 1, 2
-

xdeslandes - WRInaute occasionnel

- Messages: 391
- Inscription: 29 Déc 2004
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 :
Qu'en pensez-vous ?
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 ?
-

xdeslandes - WRInaute occasionnel

- Messages: 391
- Inscription: 29 Déc 2004
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 :
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
!)
- 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
-

xdeslandes - WRInaute occasionnel

- Messages: 391
- Inscription: 29 Déc 2004
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). 
19 messages
• Page 2 sur 2 • 1, 2
Lectures recommandées sur ce thème :
- Trouver son checksum Google avec la toolbar (barre d'outils) - 20-10-2002
- Trouver son PageRank sans la toolbar - 01-08-2003
- Google ajoute la Navigation par nom dans sa Toolbar - 15-07-2004
- Faille de sécurité dans la Google Toolbar - 10-08-2002
- La barre d'outils Alexa pour Firefox - 21-07-2007
- Google change son algorithme de checksum de la Toolbar - 09-09-2004
- Google Toolbar pour Firefox version 2 - 08-04-2006
- Actualité Ask Jeeves - 08-12-2005
Consultez la description détaillée des produits ou services de Google suivants : Google Code, Google AdWords API, Google Toolbar API
- Test du code HTTP d'une page
Cet outil vous permet de connaître le code HTTP renvoyé par le serveur pour une page donnée.
Qui est en ligne
Utilisateurs parcourant ce forum: Aucun utilisateur enregistré et 1 invité
