C'est une reprise du code de GALLY, page
http://www.phpcs.com/code.aspx?ID=43670#
mais modifiée et commentée.
Source / Exemple :
<?php
/*
création de code barre 128B
modifications par Tuckleberry du code de GALLY HOME CORP,
à la page http://www.phpcs.com/code.aspx?ID=43670#
suivant les spécification du code 128 expliqué à la page http://www.gomaro.ch/code128.htm
// recupération des variables
$CODE_TXT = isset($_GET['text']) ? $_GET['text'] : '';
$CODE_HGT = isset($_GET['height']) ? $_GET['height'] : 80;
$CODE_TTX = isset($_GET['write']) ? $_GET['write'] : 0;
$CODE_LNG = isset($_GET['len']) ? $_GET['len'] : 2;
if ($CODE_TXT) {
/*
initialisation de la table de codage des caractères
Chaque caractère est codé sur 6 barres, 3 noires et 3 blanches,chaque barre varie en
épaisseur de 1 à 4 "modules", le nombre total de "modules" est toujours égal à 11,
sauf pour le code STOP qui possède une barre noire de 2 "modules", ce qui fait 13.
(ceci servira à calculer la longueur en pixel du code barre plus bas..)
$tab=array();
$tab[0]='212222';
$tab[1]='222122';
$tab[2]='222221';
$tab[3]='121223';
$tab[4]='121322';
$tab[5]='131222';
$tab[6]='122213';
$tab[7]='122312';
$tab[8]='132212';
$tab[9]='221213';
$tab[10]='221312';
$tab[11]='231212';
$tab[12]='112232';
$tab[13]='122132';
$tab[14]='122231';
$tab[15]='113222';
$tab[16]='123122';
$tab[17]='123221';
$tab[18]='223211';
$tab[19]='221132';
$tab[20]='221231';
$tab[21]='213212';
$tab[22]='223112';
$tab[23]='312131';
$tab[24]='311222';
$tab[25]='321122';
$tab[26]='321221';
$tab[27]='312212';
$tab[28]='322112';
$tab[29]='322211';
$tab[30]='212123';
$tab[31]='212321';
$tab[32]='232121';
$tab[33]='111323';
$tab[34]='131123';
$tab[35]='131321';
$tab[36]='112313';
$tab[37]='132113';
$tab[38]='132311';
$tab[39]='211313';
$tab[40]='231113';
$tab[41]='231311';
$tab[42]='112133';
$tab[43]='112331';
$tab[44]='132131';
$tab[45]='113123';
$tab[46]='113321';
$tab[47]='133121';
$tab[48]='313121';
$tab[49]='211331';
$tab[50]='231131';
$tab[51]='213113';
$tab[52]='213311';
$tab[53]='213131';
$tab[54]='311123';
$tab[55]='311321';
$tab[56]='331121';
$tab[57]='312113';
$tab[58]='312311';
$tab[59]='332111';
$tab[60]='314111';
$tab[61]='221411';
$tab[62]='431111';
$tab[63]='111224';
$tab[64]='111422';
$tab[65]='121124';
$tab[66]='121421';
$tab[67]='141122';
$tab[68]='141221';
$tab[69]='112214';
$tab[70]='112412';
$tab[71]='122114';
$tab[72]='122411';
$tab[73]='142112';
$tab[74]='142211';
$tab[75]='241211';
$tab[76]='221114';
$tab[77]='413111';
$tab[78]='241112';
$tab[79]='134111';
$tab[80]='111242';
$tab[81]='121142';
$tab[82]='121241';
$tab[83]='114212';
$tab[84]='124112';
$tab[85]='124211';
$tab[86]='411212';
$tab[87]='421112';
$tab[88]='421211';
$tab[89]='212141';
$tab[90]='214121';
$tab[91]='412121';
$tab[92]='111143';
$tab[93]='111341';
$tab[94]='131141';
$tab[95]='114113';
$tab[96]='114311';
$tab[97]='411113';
$tab[98]='411311';
$tab[99]='113141';
$tab[100]='114131';
$tab[101]='311141';
$tab[102]='411131';
$tab[103]='211412'; // Start A
$tab[104]='211214'; // Start B
$tab[105]='211232'; // Start C
$tab[106]='2331112'; // STOP
// Initialisation du code barre par le caractère "Start B"
$barcsum = 104;
$barcode = $tab[104];
// nombre de caractère de la chaîne, servira plusieurs fois dans le code
$size_cara =strlen($CODE_TXT);
// construction du code barre et calcul du cheksum
$codecar=0;
for($i=0; $i<$size_cara; $i++) {
$j++;
// le code du caractère en code B est son code ASCII moins 32
$codecar=ord($CODE_TXT{$i})-32;
$barcode.=$tab[$codecar];
$barcsum+=$codecar*$j;
}
// calcule du modulo du checkum
$barcsum = fmod($barcsum, 103);
// ajout du checksum au code barre
$barcode.= $tab[$barcsum];
// ajout du code de STOP
$barcode.= $tab[106];
// taille de la police de caratère
$font_taille = 5;
/*
longueur en pixel du code barre
(caractères de la chaîne + le caractère de début + celui de cheksum + les espaces de début et fin)
fois 11 modules
+ les 13 modules du STOP,
le tout multiplié par l'épaisseur demandée
$barcode_longueur=(($size_cara+4)*11+13)*$CODE_LNG;
// calcul de la hauteur de l'image en fonction du texte à écrire ou non
$IM_HGT = $CODE_HGT;
if ($CODE_TTX!=true) {$IM_HGT-=14;}
// création de la zone image
$im = imagecreate($barcode_longueur,$IM_HGT);
// initialisation des paramètres graphiques pour le dessin et l'écriture
$COL_White = imagecolorallocate($im, 255,255,255);
$COL_Black = imagecolorallocate($im, 0,0,0);
$font_hauteur = imagefontheight($font_taille);
$font_largeur = imagefontwidth($font_taille);
$CODE_HGT = $CODE_HGT-$font_hauteur;
$xpos = 0;
$COLOR = $COL_Black;
// dessin zone blanche de début
imagefilledrectangle ( $im, $xpos, 0, $xpos+11*$CODE_LNG, $CODE_HGT, $COL_White );
$xpos+=11*$CODE_LNG;
// dessin du code barre
$nb=strlen($barcode);
for($j=0; $j<$nb; $j++)
{
$TMP_CODE = $barcode{$j};
imagefilledrectangle ( $im, $xpos, 0, $xpos+$TMP_CODE*$CODE_LNG, $CODE_HGT, $COLOR );
$xpos+=$TMP_CODE*$CODE_LNG;
$COLOR = ($COLOR!=$COL_Black) ? $COL_Black : $COL_White;
}
// dessin zone blanche de fin
imagefilledrectangle ( $im, $xpos, 0, $xpos+11*$CODE_LNG, $CODE_HGT, $COL_White );
// ajout du texte si nécessaire
if ($CODE_TTX==true) {
imagestring($im,$font_taille,($barcode_longueur-$font_largeur*$size_cara)/2,$CODE_HGT,$CODE_TXT,$COL_Black);
}
// envoi du header et de l'image, suivi de sa destruction pour libérer la mémoire :)
header('Content-type: image/gif');
imagegif($im);
imagedestroy($im);
}
?>
Conclusion :
C'est une "correction", mais elle doit être encore perfectible.
Vous n'êtes pas encore membre ?
inscrivez-vous, c'est gratuit et ça prend moins d'une minute !
Les membres obtiennent plus de réponses que les utilisateurs anonymes.
Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.
Le fait d'être membre vous permet d'avoir des options supplémentaires.