<?php
/**
* Bar codes checker - Checks if a barcode can be valid en returns type of barcode
*
* @link http://www.phpclasses.org/package/8560-PHP-Detect-type-and-check-EAN-and-UPC-barcodes.html
* @author Ferry Bouwhuis
* @version 1.0.1
* @LastChange 2014-04-13
*/
class clsLibGTIN
{
public static function GTINCheck($p_sGTINCode, $p_bReturnGTIN14 = FALSE, $p_getType = 0)
{
//Setting return value
/*
* If TRUE it will retun al barcodes as 14 digit strings
* If FALSE it will return only what is needed UPC -> 12 / EAN -> 13 /
*/
$bReturnGTIN14 = $p_bReturnGTIN14;
//Filter UPC coupon codes
/*
* If TRUE it will return false on UPC coupon codes
* Type will always return UPC coupon code
*/
$bSkipCouponCodes = true;
//Trims parsed string to remove unwanted whitespace or characters
$p_sGTINCode = (string)trim($p_sGTINCode);
if(preg_match('/[^0-9]/', $p_sGTINCode))
return false;
if(!is_string($p_sGTINCode)){
$p_sGTINCode = strval($p_sGTINCode);
}
$sGTINCode = trim($p_sGTINCode);
$p_sGTINCode = null;
$length = strlen($sGTINCode);
if(($length > 11 && $length <= 14) || $length == 8){
$zerros = 18-$length;
$length = null;
$fill = "";
for($i = 0; $i < $zerros; $i++){
$fill .= "0";
}
$zerros = null;
$i = null;
$sGTINCode = $fill . $sGTINCode;
$fill = null;
if(!clsLibGTIN::GTINCheckDigit($sGTINCode))
{
return FALSE;
}elseif(substr($sGTINCode,5,1) > 2){
//EAN / JAN / EAN-13 code
if($p_getType){
return 'EAN';
}else{
return (string)substr($sGTINCode,($bReturnGTIN14 ? -14 : -13));
}
}elseif(substr($sGTINCode,6,1) == 0 && substr($sGTINCode,0,10) == 0){
//EAN-8 / GTIN-8 code
if($p_getType){
return 'EAN-8';
}else{
return (string)substr($sGTINCode,($bReturnGTIN14 ? -14 : -8));
}
}elseif(substr($sGTINCode,5,1) <= 0){
//UPC / UCC-12 GTIN-12 code
if($p_getType){
if(substr($sGTINCode,6,1) == 5)
return 'UPC coupon code';
else
return 'UPC';
}else{
if($bSkipCouponCodes && substr($sGTINCode,6,1) == 5)
return false;
return (string)substr($sGTINCode,($bReturnGTIN14 ? -14 : -12));
}
}elseif(substr($sGTINCode,0,6) == 0){
//GTIN-14
if($p_getType){
return 'GTIN-14';
}else{
return (string)substr($sGTINCode,-14);
}
}else{
//EAN code
if($p_getType){
return 'EAN';
}else{
return (string)substr($sGTINCode,($bReturnGTIN14 ? -14 : -13));
}
}
}else{
return FALSE;
}
}
public static function GTINCheckDigit($p_sGTINCode)
{
$iCalculation = 0;
for($i = 0; $i < (strlen($p_sGTINCode)-1); $i++){
$iCalculation += $i % 2 ? $p_sGTINCode[$i] * 1 : $p_sGTINCode[$i] * 3;
}
if(substr(10-(substr($iCalculation,-1)), -1) != substr($p_sGTINCode, -1)){
$iCalculation = null;
$p_sGTINCode = null;
return FALSE;
}else{
$iCalculation = null;
$p_sGTINCode = null;
return TRUE;
}
}
}
?>
|