From 1683609d9a9befbd3429c2be4414015bfb7b8462 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Thu, 17 Mar 2016 12:00:38 +0100 Subject: [PATCH] FIX Check of EAN13 barcode when mask was set to use 13 digits instead of 12 --- .../barcode/mod_barcode_product_standard.php | 14 +++++++++++--- 1 file changed, 11 insertions(+), 3 deletions(-) diff --git a/htdocs/core/modules/barcode/mod_barcode_product_standard.php b/htdocs/core/modules/barcode/mod_barcode_product_standard.php index 703db258e26..aeb7ea4cd8f 100644 --- a/htdocs/core/modules/barcode/mod_barcode_product_standard.php +++ b/htdocs/core/modules/barcode/mod_barcode_product_standard.php @@ -227,7 +227,7 @@ class mod_barcode_product_standard extends ModeleNumRefBarCode * Return if a code is used (by other element) * * @param DoliDB $db Handler acces base - * @param string $code Code a verifier + * @param string $code Code to check * @param Product $product Objet product * @return int 0 if available, <0 if KO */ @@ -277,12 +277,20 @@ class mod_barcode_product_standard extends ModeleNumRefBarCode return ''; } + dol_syslog(get_class($this).'::verif_syntax codefortest='.$codefortest." typefortest=".$typefortest); + $newcodefortest=$codefortest; + + // Special case, if mask is on 12 digits instead of 13, we remove last char into code to test if (in_array($typefortest,array('EAN13','ISBN'))) // We remove the CRC char not included into mask { - $newcodefortest=substr($newcodefortest,0,12); + if (preg_match('/\{(0+)([@\+][0-9]+)?([@\+][0-9]+)?\}/i',$mask,$reg)) + { + if (strlen($reg[1]) == 12) $newcodefortest=substr($newcodefortest,0,12); + dol_syslog(get_class($this).'::verif_syntax newcodefortest='.$newcodefortest); + } } - + $result=check_value($mask,$newcodefortest); return $result;