Ajout d'un deuxime gnrateur de codes barres

This commit is contained in:
Regis Houssin 2007-09-28 12:15:59 +00:00
parent b0e2e42b86
commit 426c85a52f
8 changed files with 816 additions and 119 deletions

View File

@ -1,7 +1,7 @@
<?php
/* Copyright (C) 2003-2004 Rodolphe Quiedeville <rodolphe@quiedeville.org>
* Copyright (C) 2004-2005 Laurent Destailleur <eldy@users.sourceforge.net>
* Copyright (C) 2005-2006 Regis Houssin <regis.houssin@cap-networks.com>
* Copyright (C) 2005-2007 Regis Houssin <regis.houssin@cap-networks.com>
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
@ -46,16 +46,6 @@ if ($_GET["action"] == 'settype' && $user->admin)
$barcode_encode_type_set = $_GET["value"];
}
/*
$sql = "DELETE FROM ".MAIN_DB_PREFIX."const WHERE name = 'BARCODE_ENCODE_TYPE';";
$db->query($sql);
$sql = "INSERT INTO ".MAIN_DB_PREFIX."const (name,value,visible) VALUES
('BARCODE_ENCODE_TYPE','".$_POST["host"]."',0);";
$db->query($sql);
}
*/
llxHeader('',$langs->trans("BarcodeSetup"),'BarcodeConfiguration');
print_fiche_titre($langs->trans("BarcodeSetup"),'','setup');
@ -69,9 +59,6 @@ print_titre($langs->trans("BarcodeEncodeModule"));
print '<table class="noborder" width="100%">';
//print '<form action="barcode.php" method="post">';
//print '<input type="hidden" name="action" value="settype">';
print '<tr class="liste_titre">';
print '<td>'.$langs->trans("Name").'</td>';
@ -95,7 +82,7 @@ $var=true;
print '</td>';
// Affiche exemple
print '<td align="center"><img src="'.DOL_URL_ROOT.'/genbarcode.php?code=1234567&encoding=EAN&scale=1"></td>';
print '<td align="center"><img src="'.dol_genbarcode('1234567','EAN',2).'"></td>';
print '<td align="center">';
if ($barcode_encode_type_set == "EAN8")
@ -120,7 +107,7 @@ $var=true;
print '</td>';
// Affiche exemple
print '<td align="center"><img src="'.DOL_URL_ROOT.'/genbarcode.php?code=123456789012&encoding=EAN&scale=1"></td>';
print '<td align="center"><img src="'.dol_genbarcode('123456789012','EAN',1).'"></td>';
print '<td align="center">';
if ($barcode_encode_type_set == "EAN13")
@ -145,7 +132,7 @@ $var=true;
print '</td>';
// Affiche exemple
print '<td align="center"><img src="'.DOL_URL_ROOT.'/genbarcode.php?code=123456789012&encoding=UPC&scale=1"></td>';
print '<td align="center"><img src="'.dol_genbarcode('123456789012','UPC',1).'"></td>';
print '<td align="center">';
if ($barcode_encode_type_set == "UPC")
@ -167,7 +154,7 @@ $var=true;
print '</td>';
// Affiche exemple
print '<td align="center"><img src="'.DOL_URL_ROOT.'/genbarcode.php?code=123456789&encoding=ISBN&scale=1"></td>';
print '<td align="center"><img src="'.dol_genbarcode('123456789','ISBN',1).'"></td>';
print '<td align="center">';
if ($barcode_encode_type_set == "ISBN")
@ -193,7 +180,7 @@ $var=true;
print '</td>';
// Affiche exemple
print '<td align="center"><img src="'.DOL_URL_ROOT.'/genbarcode.php?code=1234567890&encoding=39&scale=1"></td>';
print '<td align="center"><img src="'.dol_genbarcode('1234567890','39',1).'"></td>';
print '<td align="center">';
if ($barcode_encode_type_set == "code39")
@ -220,7 +207,7 @@ $var=true;
print '</td>';
// Affiche exemple
print '<td align="center"><img src="'.DOL_URL_ROOT.'/genbarcode.php?code=ABCD1234567890&encoding=128&scale=1"></td>';
print '<td align="center"><img src="'.dol_genbarcode('ABCD1234567890','128',1).'"></td>';
print '<td align="center">';
if ($barcode_encode_type_set == "code128")
@ -242,7 +229,7 @@ $var=true;
print '</td>';
// Affiche exemple
print '<td align="center"><img src="'.DOL_URL_ROOT.'/genbarcode.php?code=1234567890&encoding=I25&scale=1"></td>';
print '<td align="center"><img src="'.dol_genbarcode('1234567890','I25',1).'"></td>';
print '<td align="center">';
if ($barcode_encode_type_set == "I25")
@ -257,99 +244,6 @@ $var=true;
print "</table>\n";
/*
* FORMAT PAPIER
*/
/*
print_titre($langs->trans("PaperFormatModule"));
$def = array();
$sql = "SELECT nom FROM ".MAIN_DB_PREFIX."barcode_format_paper_model_pdf";
$resql=$db->query($sql);
if ($resql)
{
$i = 0;
$num_rows=$db->num_rows($resql);
while ($i < $num_rows)
{
$array = $db->fetch_array($resql);
array_push($def, $array[0]);
$i++;
}
}
else
{
dolibarr_print_error($db);
}
$dir = "../includes/modules/formatpaper/";
print "<table class=\"noborder\" width=\"100%\">\n";
print "<tr class=\"liste_titre\">\n";
print " <td width=\"140\">".$langs->trans("Name")."</td>\n";
print " <td>".$langs->trans("Description")."</td>\n";
print ' <td align="center" width="60">'.$langs->trans("Activated")."</td>\n";
print ' <td align="center" width="60">'.$langs->trans("Default")."</td>\n";
print "</tr>\n";
clearstatcache();
$handle=opendir($dir);
$var=true;
while (($file = readdir($handle))!==false)
{
if (substr($file, strlen($file) -12) == '.modules.php' && substr($file,0,12) == 'pdf_paper_')
{
$name = substr($file, 12, strlen($file) - 24);
$classname = substr($file, 0, strlen($file) -12);
$var=!$var;
print "<tr ".$bc[$var].">\n <td>";
print "$name";
print "</td>\n <td>\n";
require_once($dir.$file);
$obj = new $classname($db);
print $obj->description;
print "</td>\n <td align=\"center\">\n";
if (in_array($name, $def))
{
print img_tick();
print "</td>\n <td>";
print '<a href="barcode.php?action=del&amp;value='.$name.'">'.$langs->trans("Disable").'</a>';
}
else
{
print "&nbsp;";
print "</td>\n <td>";
print '<a href="barcode.php?action=set&amp;value='.$name.'">'.$langs->trans("Activate").'</a>';
}
print "</td>\n <td align=\"center\">";
if ($barcode_addon_var_pdf == "$name")
{
print img_tick();
}
else
{
print '<a href="barcode.php?action=setpdf&amp;value='.$name.'">'.$langs->trans("Activate").'</a>';
}
print '</td></tr>';
}
}
closedir($handle);
print '</table>';
*/
print "<br>";
$db->close();

View File

@ -26,8 +26,7 @@
\version $Revision$
*/
require_once('master.inc.php');
require_once(DOL_DOCUMENT_ROOT.'/includes/barcode/php-barcode/php-barcode.php');
require_once('php-barcode.php');
function getvar($name){
global $_GET, $_POST;

View File

@ -338,4 +338,4 @@ proprietary programs. If your program is a subroutine library, you may
consider it more useful to permit linking proprietary applications with the
library. If this is what you want to do, use the GNU Library General
Public License instead of this License.
$Id$
$Id: GPL,v 1.1 2007/09/27 22:24:56 hregis Exp $

View File

@ -35,7 +35,7 @@
*/
require_once('master.inc.php');
require_once('../../../master.inc.php');
/* CONFIGURATION */
@ -79,7 +79,7 @@ if (isset($_ENV['windir']) && file_exists($_ENV['windir'])){
*/
if (isset($_ENV['windir']) && file_exists($_ENV['windir']))
{
$genbarcode_loc = DOL_DOCUMENT_ROOT.'/includes/barcode/genbarcode/genbarcode.exe';
$genbarcode_loc = DOL_DOCUMENT_ROOT.'/includes/barcode/php-barcode/genbarcode/genbarcode.exe';
}
else
{

View File

@ -0,0 +1,786 @@
<?php
// ******************************************************* ©2003 Pitoo.com *****
// ***** CODES A BARRES - Php script *****
// *****************************************************************************
// ***** (c) 2002 - pitoo.com - mail@pitoo.com *****
// *****************************************************************************
// *****************************************************************************
// ***** Ce script est "FREEWARE", il peut etre librement copie et reutilise
// ***** dans vos propres pages et applications. Il peut egalement etre modifie
// ***** ou ameliore.
// ***** CEPENDANT : par respect pour l'auteur, avant d'utiliser, recopier,
// ***** modifier ce code vous vous engagez a :
// ***** - conserver intact l'entete de ce fichier ( les commentaires comportant
// ***** Le nom du script, le copyright le nom de l'auteur et son e-mail, ce
// ***** texte et l'historique des mises a jour ).
// ***** - envoyer un e-mail a l'auteur <mail@pitoo.com> lui indiquant votre
// ***** intention d'utiliser le resultat de son travail.
// *****************************************************************************
// ***** Toute remarque, tout commentaire, tout rapport de bug, toute recompense
// ***** sont la bienvenue : <mail@pitoo.com>.
// *****************************************************************************
// *****************************************************************************
// ***** Historique des versions *****
// *****************************************************************************
$last_version = "V2.05" ;
// ***** V2.05 - 13/06/2006 - pitoo.com
// ***** - Suppression des fonctions inutiles (V1)
// ***** - Ajout de commentaires
// ***** V2.04 - 23/01/2006 - pitoo.com
// ***** - Correction erreur codage Lettre A du code 39
// ***** V2.03 - 20/11/2004 - pitoo.com
// ***** - Supression de messages warning php
// ***** V2.02 - 07/04/2004 - pitoo.com
// ***** - Suppression du checksum et des Start/Stop sur le code KIX
// ***** V2.01 - 18/12/2003 - pitoo.com
// ***** - Correction de bug pour checksum C128 = 100 / 101 / 102
// ***** V2.00 - 19/06/2003 - pitoo.com
// ***** - Réécriture de toutes les fonctions pour génération directe de
// ***** l'image du code barre en PNG plutôt que d'utiliser une multitude
// ***** de petits fichiers GIFs
// ***** V1.32 - 21/12/2002 - pitoo.com
// ***** - Ecriture du code 39
// ***** - Amelioration des codes UPC et 25 ()
// ***** V1.31 - 17/12/2002 - pitoo.com
// ***** - Amelioration du code 128 (ajout du Set de caracteres C)
// ***** - Amelioration du code 128 (ajout du code lisible en dessous )
// ***** V1.3 - 12/12/2002 - pitoo.com
// ***** - Ecriture du code 128 B
// ***** V1.2 - 01/08/2002 - pitoo.com
// ***** - Ecriture du code UPC / EAN
// ***** V1.0 - 01/01/2002 - pitoo.com
// ***** - Ecriture du code 25
if ( !class_exists( "pi_barcode" ) ) {
class pi_barcode
{
/**
* Définition des symbologies
*/
var $C128 = array(
0 => "11011001100", 1 => "11001101100", 2 => "11001100110",
3 => "10010011000", 4 => "10010001100", 5 => "10001001100",
6 => "10011001000", 7 => "10011000100", 8 => "10001100100",
9 => "11001001000", 10 => "11001000100", 11 => "11000100100",
12 => "10110011100", 13 => "10011011100", 14 => "10011001110",
15 => "10111001100", 16 => "10011101100", 17 => "10011100110",
18 => "11001110010", 19 => "11001011100", 20 => "11001001110",
21 => "11011100100", 22 => "11001110100", 23 => "11101101110",
24 => "11101001100", 25 => "11100101100", 26 => "11100100110",
27 => "11101100100", 28 => "11100110100", 29 => "11100110010",
30 => "11011011000", 31 => "11011000110", 32 => "11000110110",
33 => "10100011000", 34 => "10001011000", 35 => "10001000110",
36 => "10110001000", 37 => "10001101000", 38 => "10001100010",
39 => "11010001000", 40 => "11000101000", 41 => "11000100010",
42 => "10110111000", 43 => "10110001110", 44 => "10001101110",
45 => "10111011000", 46 => "10111000110", 47 => "10001110110",
48 => "11101110110", 49 => "11010001110", 50 => "11000101110",
51 => "11011101000", 52 => "11011100010", 53 => "11011101110",
54 => "11101011000", 55 => "11101000110", 56 => "11100010110",
57 => "11101101000", 58 => "11101100010", 59 => "11100011010",
60 => "11101111010", 61 => "11001000010", 62 => "11110001010",
63 => "10100110000", 64 => "10100001100", 65 => "10010110000",
66 => "10010000110", 67 => "10000101100", 68 => "10000100110",
69 => "10110010000", 70 => "10110000100", 71 => "10011010000",
72 => "10011000010", 73 => "10000110100", 74 => "10000110010",
75 => "11000010010", 76 => "11001010000", 77 => "11110111010",
78 => "11000010100", 79 => "10001111010", 80 => "10100111100",
81 => "10010111100", 82 => "10010011110", 83 => "10111100100",
84 => "10011110100", 85 => "10011110010", 86 => "11110100100",
87 => "11110010100", 88 => "11110010010", 89 => "11011011110",
90 => "11011110110", 91 => "11110110110", 92 => "10101111000",
93 => "10100011110", 94 => "10001011110", 95 => "10111101000",
96 => "10111100010", 97 => "11110101000", 98 => "11110100010",
99 => "10111011110", // 99 et 'c' sont identiques ne nous sert que pour le checksum
100 => "10111101110", // 100 et 'b' sont identiques ne nous sert que pour le checksum
101 => "11101011110", // 101 et 'a' sont identiques ne nous sert que pour le checksum
102 => "11110101110", // 102 correspond à FNC1 ne nous sert que pour le checksum
'c' => "10111011110", 'b' => "10111101110", 'a' => "11101011110",
'A' => "11010000100", 'B' => "11010010000", 'C' => "11010011100",
'S' => "1100011101011"
);
var $C25 = array(
0 => "11331", 1 => "31113",
2 => "13113", 3 => "33111",
4 => "11313", 5 => "31311",
6 => "13311", 7 => "11133",
8 => "31131", 9 => "13131",
'D' => "111011101", 'F' => "111010111", // Code 2 parmi 5
'd' => "1010", 'f' => "11101" // Code 2/5 entrelacé
);
var $C39 = array(
'0' => "101001101101", '1' => "110100101011", '2' => "101100101011",
'3' => "110110010101", '4' => "101001101011", '5' => "110100110101",
'6' => "101100110101", '7' => "101001011011", '8' => "110100101101",
'9' => "101100101101", 'A' => "110101001011", 'B' => "101101001011",
'C' => "110110100101", 'D' => "101011001011", 'E' => "110101100101",
'F' => "101101100101", 'G' => "101010011011", 'H' => "110101001101",
'I' => "101101001101", 'J' => "101011001101", 'K' => "110101010011",
'L' => "101101010011", 'M' => "110110101001", 'N' => "101011010011",
'O' => "110101101001", 'P' => "101101101001", 'Q' => "101010110011",
'R' => "110101011001", 'S' => "101101011001", 'T' => "101011011001",
'U' => "110010101011", 'V' => "100110101011", 'W' => "110011010101",
'X' => "100101101011", 'Y' => "110010110101", 'Z' => "100110110101",
'-' => "100101011011", '.' => "110010101101", ' ' => "100110101101",
'$' => "100100100101", '/' => "100100101001", '+' => "100101001001",
'%' => "101001001001", '*' => "100101101101"
);
var $codabar = array(
'0' => "101010011", '1' => "101011001", '2' => "101001011",
'3' => "110010101", '4' => "101101001", '5' => "110101001",
'6' => "100101011", '7' => "100101101", '8' => "100110101",
'9' => "110100101", '-' => "101001101", '$' => "101100101",
':' => "1101011011", '/' => "1101101011", '.' => "1101101101",
'+' => "1011011011", 'A' => "1011001001", 'B' => "1010010011",
'C' => "1001001011", 'D' => "1010011001"
);
var $MSI = array(
0 => "100100100100",
1 => "100100100110",
2 => "100100110100",
3 => "100100110110",
4 => "100110100100",
5 => "100110100110",
6 => "100110110100",
7 => "100110110110",
8 => "110100100100",
9 => "110100100110",
'D' => "110",
'F' => "1001"
);
var $C11 = array(
'0' => "101011",
'1' => "1101011",
'2' => "1001011",
'3' => "1100101",
'4' => "1011011",
'5' => "1101101",
'6' => "1001101",
'7' => "1010011",
'8' => "1101001",
'9' => "110101",
'-' => "101101",
'S' => "1011001"
);
var $postnet = array(
'0' => "11000",
'1' => "00011",
'2' => "00101",
'3' => "00110",
'4' => "01001",
'5' => "01010",
'6' => "01100",
'7' => "10001",
'8' => "10010",
'9' => "10100"
);
var $kix = array( //0=haut, 1=bas, 2=milieu, 3=toute la hauteur
'0' => '2233', '1' => '2103', '2' => '2130',
'3' => '1203', '4' => '1230', '5' => '1100',
'6' => '2013', '7' => '2323', '8' => '2310',
'9' => '1023', 'A' => '1010', 'B' => '1320',
'C' => '2031', 'D' => '2301', 'E' => '2332',
'F' => '1001', 'G' => '1032', 'H' => '1302',
'I' => '0213', 'J' => '0123', 'K' => '0110',
'L' => '3223', '2' => '3210', 'N' => '3120',
'O' => '0231', 'P' => '0101', 'Q' => '0132',
'R' => '3201', 'S' => '3232', 'T' => '3102',
'U' => '0011', 'V' => '0321', 'W' => '0312',
'X' => '3021', 'Y' => '3021', 'Z' => '3322'
);
var $CMC7 = array(
0 => "0,3-0,22|2,1-2,24|4,0-4,8|4,18-4,25|8,0-8,8|8,18-8,25|12,0-12,8|12,18-12,25|14,1-14,24|16,3-16,22",
1 => "0,5-0,12|0,17-0,25|4,3-4,10|4,17-4,25|6,2-6,9|6,17-6,25|8,1-8,25|10,0-10,25|14,14-14,25|16,14-16,25",
2 => "0,2-0,9|0,17-0,25|2,0-2,9|2,16-2,25|6,0-6,6|6,13-6,25|10,0-10,6|10,11-10,17|10,20-10,25|12,0-12,6|12,10-12,16|12,20-12,25|14,0-14,14|14,20-14,25|16,2-16,13|16,20-16,25",
3 => "0,2-0,9|0,17-0,23|4,0-4,9|4,17-4,25|6,0-6,8|6,18-6,25|10,0-10,7|10,10-10,16|10,19-10,25|12,0-12,7|12,10-12,16|12,19-12,25|14,0-14,25|16,2-16,12|16,14-16,23",
4 => "0,6-0,21|4,4-4,21|6,3-6,11|6,16-6,21|8,2-8,10|8,16-8,21|12,0-12,8|12,15-12,25|14,0-14,8|14,15-14,25|16,0-16,8|16,15-16,25",
5 => "0,0-0,14|0,19-0,25|2,0-2,14|2,19-2,25|4,0-4,6|4,9-4,14|4,19-4,25|6,0-6,6|6,9-6,14|6,19-6,25|10,0-10,6|10,9-10,14|10,19-10,25|14,0-14,6|14,9-14,25|16,0-16,6|16,11-16,23",
6 => "0,2-0,23|2,0-2,25|4,0-4,6|4,10-4,15|4,19-4,25|8,0-8,6|8,10-8,15|8,19-8,25|10,0-10,6|10,10-10,15|10,19-10,25|14,0-14,7|14,10-14,25|16,2-16,7|16,12-16,23",
7 => "0,0-0,9|0,19-0,25|4,0-4,6|4,16-4,25|8,0-8,6|8,12-8,21|10,0-10,6|10,9-10,19|12,0-12,17|14,0-14,15|16,0-16,13",
8 => "0,2-0,10|0,15-0,23|2,0-2,11|2,14-2,25|6,0-6,6|6,10-6,15|6,19-6,25|8,0-8,6|8,10-8,15|8,19-8,25|10,0-10,6|10,10-10,15|10,19-10,25|14,0-14,11|14,14-14,25|16,2-16,10|16,15-16,23",
9 => "0,2-0,13|0,18-0,23|2,0-2,15|2,18-2,25|6,0-6,6|6,10-6,15|6,19-6,25|8,0-8,6|8,10-8,15|8,19-8,25|12,0-12,6|12,10-12,15|12,19-12,25|14,0-14,25|16,2-16,23",
'A' => "0,4-0,15|0,19-0,24|2,4-2,15|2,19-2,24|4,4-4,15|4,19-4,24|8,4-8,15|8,19-8,24|10,4-10,15|10,19-10,24|12,4-12,15|12,19-12,24|16,4-16,15|16,19-16,24",
'B' => "0,9-0,24|4,7-4,22|6,6-6,21|8,5-8,20|10,4-10,19|12,3-12,18|16,1-16,16",
'C' => "0,4-0,12|0,16-0,24|2,4-2,12|2,16-2,24|4,4-4,12|4,16-4,24|6,4-6,12|6,16-6,24|10,7-10,21|12,7-12,21|16,7-16,21",
'D' => "0,10-0,24|2,10-2,24|6,10-6,24|8,10-8,24|10,4-10,24|12,4-12,24|16,4-16,24",
'E' => "0,7-0,12|0,16-0,25|2,5-2,23|4,3-4,21|6,1-6,19|8,0-8,18|12,3-12,21|16,7-16,12|16,16-16,25",
);
var $EANbars = 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"
)
);
var $EANparity = 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')
);
/**
* Constructeur
*
* Initialise la classe
*
* @CODE string code CODE
*
* return void
*/
function pi_barcode($TYPE, $CODE, $HEIGHT=10, $HR="Y", $WIDTH=0, $SHOWTYPE="N")
{
$this->TYPE = $TYPE;
$this->HEIGHT = $HEIGHT;
$this->WIDTH = $WIDTH;
if( $HR == "Y" ) $this->HR = $CODE;
$this->SHOWTYPE = $SHOWTYPE;
settype($CODE,'string');
$lencode = strlen($CODE);
$strCode="";
//Transformation de la chaine en tableau
for($i=0; $i < $lencode ; $i++)
{
$this->CODE[$i] = substr($CODE,$i,1);
}
switch( $TYPE ) {
case "EAN" :
case "UPC" :
if( $lencode == 8 ) {
$strCode = '101'; //Premier séparateur (101)
for ($i=0; $i<4; $i++) $strCode .= $this->EANbars['A'][$this->CODE[$i]]; //Codage partie gauche (tous de classe A)
$strCode .= '01010'; //Séparateur central (01010) //Codage partie droite (tous de classe C)
for ($i=4; $i<8; $i++) $strCode .= $this->EANbars['C'][$this->CODE[$i]];
$strCode .= '101'; //Dernier séparateur (101)
} else {
$parity = $this->EANparity[$this->CODE[0]]; //On récupère la classe de codage de la partie qauche
$strCode = '101'; //Premier séparateur (101)
for ($i=1; $i<7; $i++) $strCode .= $this->EANbars[$parity[$i-1]][$this->CODE[$i]]; //Codage partie gauche
$strCode .= '01010'; //Séparateur central (01010) //Codage partie droite (tous de classe C)
for ($i=7; $i<13; $i++) $strCode .= $this->EANbars['C'][$this->CODE[$i]];
$strCode .= '101'; //Dernier séparateur (101)
}
break;
case "C128C" :
$strCode = $this->C128['C']; //Start
$checksum = 105 ;
$j = 1 ;
for($i=0;$i<strlen($CODE);$i+=2) {
$tmp = intval(substr($CODE, $i, 2)) ;
$checksum += ( $j++ * $tmp ) ;
$strCode .= $this->C128[$tmp];
}
$checksum %= 103 ;
$strCode .= $this->C128[$checksum];
$strCode .= $this->C128['S']; //Stop
break;
case "C128" :
$strCode = $this->C128['B']; //Start
$checksum = 104 ;
$j = 1 ;
for($i=0;$i<$lencode;$i++) {
$tmp = ord($this->CODE[$i]) - 32 ;
$checksum += ( $j++ * $tmp ) ;
$strCode .= $this->C128[$tmp];
}
$checksum %= 103 ;
$strCode .= $this->C128[$checksum];
$strCode .= $this->C128['S']; //Stop
break;
case "C25" :
$strCode = $this->C25['D']."0"; //Start
for($i=0;$i<$lencode;$i++) {
$num = intval($this->CODE[$i]) ;
$tmp = $this->C25[$num];
for($j=0;$j<5;$j++) {
$tmp2 = intval(substr($tmp,$j,1)) ;
for($k=1;$k<=$tmp2;$k++) $strCode .= "1";
$strCode .= "0";
}
}
$strCode .= $this->C25['F']; //Stop
break;
case "C25I" :
$strCode = $this->C25['d']; //Start
$checksum = 0;
for($i=0;$i<$lencode;$i+=2) {
$num1 = intval($this->CODE[$i]) ;
$num2 = intval($this->CODE[$i+1]) ;
$checksum += ($num1+$num2);
$tmp1 = $this->C25[$num1];
$tmp2 = $this->C25[$num2];
for($j=0;$j<5;$j++) {
$t1 = intval(substr($tmp1,$j,1)) ;
$t2 = intval(substr($tmp2,$j,1)) ;
for($k=1;$k<=$t1;$k++) $strCode .= "1";
for($k=1;$k<=$t2;$k++) $strCode .= "0";
}
}
$strCode .= $this->C25['f']; //Stop
break;
case "C39" :
for($i=0;$i<$lencode;$i++) {
$tmp = $this->CODE[$i];
$strCode .= $this->C39[$tmp] . "0";
}
$strCode = substr($strCode,0,-1);
break;
case "CODABAR" :
for($i=0;$i<$lencode;$i++) {
$tmp = $this->CODE[$i];
$strCode .= $this->codabar[$tmp] . "0";
}
$strCode = substr($strCode,0,-1);
break;
case "MSI" :
$strCode = $this->MSI['D']; //Start
for($i=0;$i<$lencode;$i++) {
$tmp = intval($this->CODE[$i]);
$strCode .= $this->MSI[$tmp];
}
$strCode .= $this->MSI['F']; //Stop
break;
case "C11" :
$strCode = $this->C11['S']."0"; //Start
for($i=0;$i<$lencode;$i++) {
$tmp = $this->CODE[$i];
$strCode .= $this->C11[$tmp]."0";
}
$strCode .= $this->C11['S']; //Stop
break;
case "POSTNET" :
$strCode = "1"; //Start
for($i=0;$i<$lencode;$i++) {
$tmp = $this->CODE[$i];
$strCode .= $this->postnet[$tmp];
}
$strCode .= "1"; //Stop
$tmp = ( strlen($strCode) * 4 ) + 20;
if( $HR == "Y" ) $this->HEIGHT = 32;
else $this->HEIGHT = 22;
$this->WIDTH = $tmp;
break;
case "KIX" :
// $strCode = "31"; //Start
$strCode = "";
for($i=0;$i<$lencode;$i++) {
$tmp = $this->CODE[$i];
$strCode .= $this->kix[$tmp];
}
// $strCode .= "32"; //Stop
$tmp = ( strlen($strCode) * 4 ) + 20;
if( $HR == "Y" ) $this->HEIGHT = 32;
else $this->HEIGHT = 22;
$this->WIDTH = $tmp;
break;
case "CMC7" :
$strCode = "";
for($i=0;$i<$lencode;$i++) {
$tmp = $this->CODE[$i];
$strCode .= $tmp;
}
$this->WIDTH = ( strlen($CODE) * 24 ) + 12 ;
$this->HEIGHT = 35;
break;
case "ERR" :
$this->HEIGHT = 36;
$this->WIDTH = 200;
break;
}
$this->strCode = $strCode;
$tmp = strlen($this->strCode) + 20;
if($this->WIDTH < $tmp) $this->WIDTH = $tmp;
}
/**
* Création de l'image
*
* Crée une image GIF ou PNG du code généré par giveCode
*
* return void
*/
function makeImage()
{
//Initialisation de l'image
$posX = 10; // position X
$posY = 0; // position Y
$intL = 1; // largeur de la barre
$nb_elem = strlen($this->strCode);
$img=imagecreate($this->WIDTH, $this->HEIGHT);
$color[0] = ImageColorAllocate($img, 255,255,255);
$color[1] = ImageColorAllocate($img, 0,0,0);
$color[2] = ImageColorAllocate($img, 160,160,160);
imagefilledrectangle($img, 0, 0, $nb_elem+20, $this->HEIGHT, $color[0]);
for($i=0;$i<$nb_elem;$i++)
{
$intH = $this->HEIGHT; // hauteur du code
if( $this->HR != "" ) switch($this->TYPE){
case "EAN" :
case "UPC" :
if($i<=2 OR $i>=($nb_elem-3) OR ($i>=($nb_elem/2)-2 AND $i<=($nb_elem/2)+2)) $intH-=6; else $intH-=11;
break;
default :
if($i>0 AND $i<($nb_elem-1)) $intH-=11;
}
$fill_color = substr($this->strCode,$i,1);
if($this->TYPE == "POSTNET") {
if($fill_color == "1") imagefilledrectangle($img, $posX, ($posY+1), $posX+1, ($posY+20), $color[1]);
else imagefilledrectangle($img, $posX, ($posY+12), $posX+1, ($posY+20), $color[1]);
$intL = 4 ;
} elseif($this->TYPE == "KIX") {
if($fill_color == "0") imagefilledrectangle($img, $posX, ($posY+1), $posX+1, ($posY+13), $color[1]);
elseif($fill_color == "1") imagefilledrectangle($img, $posX, ($posY+7), $posX+1, ($posY+19), $color[1]);
elseif($fill_color == "2") imagefilledrectangle($img, $posX, ($posY+7), $posX+1, ($posY+13), $color[1]);
else imagefilledrectangle($img, $posX, ($posY+1), $posX+1, ($posY+19), $color[1]);
$intL = 4 ;
} elseif($this->TYPE == "CMC7") {
$tmp = $this->CMC7[$fill_color];
$coord = explode( "|", $tmp );
for( $j=0; $j<sizeof($coord); $j++) {
$pts = explode( "-", $coord[$j] );
$deb = explode( ",", $pts[0] );
$X1 = $deb[0] + $posX ;
$Y1 = $deb[1] + 5 ;
$fin = explode( ",", $pts[1] );
$X2 = $fin[0] + $posX ;
$Y2 = $fin[1] + 5 ;
imagefilledrectangle($img, $X1, $Y1, $X2, $Y2, $color[1]);
}
$intL = 24 ;
}
else {
if($fill_color == "1") imagefilledrectangle($img, $posX, $posY, $posX, ($posY+$intH), $color[1]);
}
// imagefilledrectangle($img, $posX, $posY, $posX, ($posY+$intH), $color[$fill_color]);
//Deplacement du pointeur
$posX += $intL;
}
$ifw = imagefontwidth(3);
$ifh = imagefontheight(3) - 1;
switch($this->TYPE){
case "ERR" :
$ifw = imagefontwidth(3);
imagestring($img, 3, floor(($this->WIDTH/2)-(($ifw * 7)/2)), 1, "ERROR :", $color[1]);
$ifw = imagefontwidth(2);
imagestring($img, 2, floor(($this->WIDTH/2)-(($ifw * strlen(implode('',$this->CODE)))/2)), 13, implode('',$this->CODE), $color[1]);
$ifw = imagefontwidth(1);
imagestring($img, 1, ($this->WIDTH)-($ifw * 9)-2, 26, "Pitoo.com", $color[2]);
break;
case "EAN" :
if(strlen($this->HR) > 10) imagestring($img, 3, 3, $this->HEIGHT - $ifh, substr($this->HR,-13,1), $color[1]);
case "UPC" :
if(strlen($this->HR) > 10) {
imagestring($img, 3, 14, $this->HEIGHT - $ifh, substr($this->HR,1,6), $color[1]);
imagestring($img, 3, 60, $this->HEIGHT - $ifh, substr($this->HR,7,6), $color[1]);
} else {
imagestring($img, 3, 14, $this->HEIGHT - $ifh, substr($this->HR,0,4), $color[1]);
imagestring($img, 3, 46, $this->HEIGHT - $ifh, substr($this->HR,4,4), $color[1]);
}
break;
case "CMC7" ;
break;
default :
$ifw = imagefontwidth(3);
$ifh = imagefontheight(3) - 1;
imagestring($img, 3, intval(($this->WIDTH/2)-(($ifw * strlen($this->HR))/2))+1, $this->HEIGHT - $ifh, $this->HR, $color[1]);
}
$ifw = imagefontwidth(1) * 9;
if( (rand(0,50)<1) AND ($this->HEIGHT >= $ifw) ) {
imagestringup($img, 1, $nb_elem + 12, $this->HEIGHT - 2, "Pitoo.com", $color[2]);
}
if( $this->SHOWTYPE == "Y" ) {
if(($this->TYPE == "EAN") AND (substr($this->HR,-13,1) != "0") AND (strlen($this->HR) > 10)) {
imagestringup($img, 1, 0, $this->HEIGHT - 12, $this->TYPE, $color[2]);
} elseif($this->TYPE == "POSTNET") {
imagestringup($img, 1, 0, $this->HEIGHT - 2, "POST", $color[2]);
} else {
imagestringup($img, 1, 0, $this->HEIGHT - 2, $this->TYPE, $color[2]);
}
}
Header( "Content-type: image/png");
imagepng($img);
imagedestroy($img);
}
}//Fin de la classe
}
extract($_GET);
$type = strtoupper($type);
switch( $type ) {
case "C128C" :
if (preg_match("/^[0-9]{2,48}$/", $code)){
$tmp = strlen("$code");
if(($tmp%2)!=0) $code = "0$code";
} else {
$type = "ERR";
$code = "CODE 128C REQUIRES DIGITS ONLY";
}
case "C128" :
$carok = true;
for($i=0;$i<strlen($code);$i++) {
$tmp = ord(substr($code,$i,1)) ;
if($tmp < 32 OR $tmp > 126) $carok = false;
}
if( !$carok ) {
$type = "ERR";
$code = "UNAUTHORIZED CHARS IN 128 CODE";
}
break;
case "UPC" :
$code = "0$code";
case "EAN" :
$long = strlen( $code ) ;
$factor = 3;
$sum = 0;
if (preg_match("/^[0-9]{8}$/", $code) OR preg_match("/^[0-9]{13}$/", $code)){
// if ($long==13){
for ($index = ($long - 1); $index > 0; $index--) {
$sum += substr( $code, $index - 1, 1 ) * $factor ;
$factor = 4 - $factor ;
}
$cc = ( ( 1000 - $sum ) % 10 ) ;
if ( substr( $code, -1, 1) != $cc ) {
$type = "ERR";
$code = "CHECKSUM ERROR IN EAN/UPC CODE";
}
} elseif (preg_match("/^[0-9]{7}$/", $code) OR preg_match("/^[0-9]{12}$/", $code)){
// } elseif ($long==12){
for ($index = ($long ); $index > 0; $index--) {
$sum += substr( $code, $index - 1, 1 ) * $factor ;
$factor = 4 - $factor ;
}
$cc = ( ( 1000 - $sum ) % 10 ) ;
$code .= "$cc" ;
} else {
$type = "ERR";
$code = "THIS CODE IS NOT EAN/UPC TYPE";
}
break;
case "C25I" :
$tmp = strlen("$code");
if(($tmp%2)==0) { $code = "0$code"; $tmp++; }
case "C25" :
if (preg_match("/^[0-9]{1,48}$/", $code)){
$checksum = 0;
$factor = 3;
$tmp = strlen("$code");
for($i=$tmp-1; $i>=0; $i--) {
$checksum += (intval(substr($code,$i,1))*$factor);
$factor = 4-$factor;
}
$checksum = 10-($checksum%10);
if($checksum==10) $checksum = 0;
$code .= "$checksum";
} else {
$type = "ERR";
$code = "CODE C25 REQUIRES DIGITS ONLY";
}
break;
case "C39" :
if(preg_match("/^[0-9A-Z\-\.\$\/+% ]{1,48}$/i", $code)) {
$code = "*$code*";
} else {
$type = "ERR";
$code = "UNAUTHORIZED CHARS IN CODE 39";
}
break;
case "CODABAR" :
if(!preg_match("/^(A|B|C|D)[0-9\-\$:\/\.\+]{1,48}(A|B|C|D)$/i", $code)) {
$type = "ERR";
$code = "CODABAR START/STOP : ABCD";
}
break;
case "MSI" :
if (preg_match("/^[0-9]{1,48}$/", $code)){
$checksum = 0;
$factor = 1;
$tmp = strlen("$code");
for($i=0; $i<$tmp; $i++) {
$checksum += (intval(substr($code,$i,1))*$factor);
$factor++;
if($factor > 10) $factor = 1;
}
$checksum = (1000-$checksum)%10;
$code .= "$checksum";
} else {
$type = "ERR";
$code = "CODE MSI REQUIRES DIGITS ONLY";
}
break;
case "C11" :
if (preg_match("/^[0-9\-]{1,48}$/", $code)){
$checksum = 0;
$factor = 1;
$tmp = strlen("$code");
for($i=$tmp-1; $i>=0; $i--) {
$tmp = substr($code,$i,1);
if($tmp == "-") $tmp=10;
else $tmp = intval($tmp);
$checksum += ($tmp*$factor);
$factor++;
if($factor>10) $factor=1;
}
$checksum = $checksum%11;
if($checksum==10) $code .= $checksum . "-";
else $code .= "$checksum";
} else {
$type = "ERR";
$code = "UNAUTHORIZED CHARS IN CODE 11";
}
break;
case "POSTNET" :
if (preg_match("/^[0-9]{5}$/", $code) OR preg_match("/^[0-9]{9}$/", $code) OR preg_match("/^[0-9]{11}$/", $code)){
$checksum = 0;
$tmp = strlen("$code");
for($i=$tmp-1; $i>=0; $i--) {
$checksum += intval(substr($code,$i,1));
}
$checksum = 10-($checksum%10);
if($checksum==10) $checksum=0;
$code .= "$checksum";
} else {
$type = "ERR";
$code = "POSTNET MUST BE 5/9/11 DIGITS";
}
break;
case "KIX" :
if (preg_match("/^[A-Z0-9]{1,50}$/", $code)){
// ***** LE CODE KIX n'a pas de checksum (correction V2.02)
// $checksum = 0;
// $tmp = strlen("$code");
// for($i=$tmp-1; $i>=0; $i--) {
// $checksum += intval(substr($code,$i,1));
// }
// $checksum = 10-($checksum%10);
// if($checksum==10) $checksum=0;
// $code .= "$checksum";
} else {
$type = "ERR";
$code = "UNAUTHORIZED CHARS IN KIX CODE";
}
break;
case "CMC7" :
if(!preg_match("/^[0-9A-E]{1,48}$/", $code)) {
$type = "ERR";
$code = "CMC7 MUST BE NUMERIC or ABCDE";
}
break;
default :
$type = "ERR";
$code = "UNKWOWN BARCODE TYPE";
break;
}
// ***** Largeur par défaut
if( isset( $width ) && ( $width >= 10 ) ) { $hw = $width ; }
else { $hw = 10 ; }
// ***** Hauteur par défaut
if( isset( $height ) && ( $height > 0 ) ) { $hh = $height ; }
else { $hh = 10 ; }
// ***** Autres valeurs par défaut
if( isset( $readable ) && ( $readable == "Y" ) ) { $hr = "Y" ; }
else{ $hr = "N" ; }
if( !isset( $showtype ) ) { $showtype = "N" ; }
// ***** Création de l'objet
$objCode = new pi_barcode( $type, $code, $hh, $hr, $hw, $showtype ) ;
$objCode -> makeImage() ;

View File

@ -3545,4 +3545,22 @@ function viewExcelFileContent($file_to_include='',$max_rows=0,$max_cols=0)
</SCRIPT>";
}
/**
\brief Générateur de codes barres
\param
\return url
*/
function dol_genbarcode($code,$encoding,$generator=1,$readable='Y')
{
if ($generator == 1)
{
$url = DOL_URL_ROOT.'/includes/barcode/php-barcode/genbarcode.php?code='.$code.'&encoding='.$encoding.'&scale=1';
}
else if ($generator == 2)
{
$url = DOL_URL_ROOT.'/includes/barcode/pi_barcode/pi_barcode.php?code='.$code.'&type='.$encoding.'&height=50&readable='.$readable;
}
return $url;
}
?>