Accueil > > > GÉNÉRATEUR DE CODE BARRE CODE 39
GÉNÉRATEUR DE CODE BARRE CODE 39
Information sur la source
Description
J'ai déjà trouvé des sources qui reprennent despolices True Type (TTF) afin de les mettres en images: ce n'est pas paramétrable et les essais que j'ai fait sont souvent infructueux En fait ce petit script permet de générer un code barre code 39 sous une forme graphique en dessinant chacune des barres, de ce fait sont paramétrables: la largeur et hauteur du code barre et aussi l'affichage du texte en clair en dessous du code barre en espérant avoir été utile à ceux qui en ont besoin, pour ma part, j'ai développé ce code pour que les internautes puissent imprimer une feuille A4 qu'ils doivent faire tamponer par un partenaire et me la retourner par fax (participation gratuite à un jeux concours): ça me permet d'automatiser la réception des fax en mettant un scanner de code barre au dessus de la sortie du fax !!!!!!!!! Rapide, pas cher et entièrement automatisé (traitement par lot en recevant les fax sur une email) obligatoire: la librairie GD !
Source
- <?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);
- }
- ?>
<?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);
}
?>
Conclusion
Si vous avez des améliorations ou des commentaire et même des critiques, tout est bienvenue
Sources de la même categorie
Commentaires et avis
|
Derniers Blogs
TECHDAYS PARIS 2010 : LES SERVICES D'APPLICATIONS DANS SHAREPOINT 2010TECHDAYS PARIS 2010 : LES SERVICES D'APPLICATIONS DANS SHAREPOINT 2010 par ROMELARD Fabrice
Animé par: Xavier Moreels et Julien Bakmezdjian Ce sujet est lié au partage des applications comme services dans SharePoint 2010, ceci représente la possibilité de créer sa propre application qui sera utilisable comme ceux en standard : Search...
Cliquez pour lire la suite de l'article par ROMELARD Fabrice TECHDAYS PARIS 2010 : LA GED ET SHAREPOINT 2010TECHDAYS PARIS 2010 : LA GED ET SHAREPOINT 2010 par ROMELARD Fabrice
Animé par: Etienne Lacour Cette session a commencé par un rappel de la gestion de contenu et surtout une résumé des points ayant été amélioré avec 2010. Accompagné d'un point sur le cycle de vie des documents. Un rappel du fonctionnement de S...
Cliquez pour lire la suite de l'article par ROMELARD Fabrice TECHDAYS PARIS 2010 : SHAREPOINT 2010 ET LES RéSEAUX SOCIAUXTECHDAYS PARIS 2010 : SHAREPOINT 2010 ET LES RéSEAUX SOCIAUX par ROMELARD Fabrice
Animé par: Olivier Lepeltier et Karim Manar Cette session commence par la présentation du concept de réseau social, mais surtout de la particularité de du réseau social dans une entreprise. La vision du réseau social est donc une extension du MyS...
Cliquez pour lire la suite de l'article par ROMELARD Fabrice TECHDAYS PARIS 2010 : SHAREPOINT 2010 - DESCRIPTION ET NOUVEAUTéSTECHDAYS PARIS 2010 : SHAREPOINT 2010 - DESCRIPTION ET NOUVEAUTéS par ROMELARD Fabrice
Animé par: Karim Manar et Laurent Beaudouin Cette session a pour but de revenir sur ce qu'est SharePoint globalement, mais aussi de voir les évolutions liées avec l'avènement de la version 2010. A partir de la marguerite de...
Cliquez pour lire la suite de l'article par ROMELARD Fabrice TECHDAYS PARIS 2010 : PLEINIèRE LUNDITECHDAYS PARIS 2010 : PLEINIèRE LUNDI par ROMELARD Fabrice
Comme chaque année, c'est le grand rassemblement autour des technologies Microsoft qui se déroule donc à Paris au Palais des Congrès. Cette année est riche pour Microsoft en terme de livraison produit, paris l...
Cliquez pour lire la suite de l'article par ROMELARD Fabrice
Logiciels
DB-MAIN (9.1.0)DB-MAIN (9.1.0)DB-MAIN is a data-modeling and data-architecture tool. It is designed to help developers and anal... Cliquez pour télécharger DB-MAIN Xilisoft DPG Convertisseur (5.1.37.0120)XILISOFT DPG CONVERTISSEUR (5.1.37.0120)Xilisoft DPG Convertisseur offre aux fans de Nintendo DS une bonne solution leur permettant de dé... Cliquez pour télécharger Xilisoft DPG Convertisseur GraphicsGale (2.01.01)GRAPHICSGALE (2.01.01)GraphicsGale est un logiciel de PixelArt avec de nombreuse fonctionnalités permettant de réalisé ... Cliquez pour télécharger GraphicsGale Architecte 3D (Platinum 2010)ARCHITECTE 3D (PLATINUM 2010)Architecte 3D Platinium vous permet de concevoir facilement les plans votre future maison, de l'é... Cliquez pour télécharger Architecte 3D TeamViewer 5 (TeamViewer 5)TEAMVIEWER 5 (TEAMVIEWER 5)Dépanner un ami,expliquer une manipulation devient un jeu d'enfant.
Prise en main d'un autre ord... Cliquez pour télécharger TeamViewer 5
|