PHP区分ISBN和UPC / EAN

时间:2016-08-19 13:18:14

标签: php barcode-scanner intel-xdk

我正在尝试为客户制作条形码扫描应用程序,需要区分ISBN和UPC / EAN。

我原本以为ISBN号长度在10到13个字符之间,UPC / EAN长度为12位,但是进一步读取新的EAN数字是13位数字!

由于我使用2个API用于书籍,1个用于产品我不想使用搜索它们的所有API请求我需要一种方法来区分这两者吗?

我注意到在实际的扫描应用程序上扫描项目后,它显示天气是产品或书籍,但我无法访问扫描仪的那部分,因为我使用的是英特尔XDK并使用条形码扫描仪插件。 / p>

有没有人对如何使用php查询代码是ISBN还是UPC / EAN有任何答案?

2 个答案:

答案 0 :(得分:0)

截至2007年,ISBN使用13位而不是10位,EAN编号也使用13位数,

两个ISBN号之间的区别总是从978开始。这就是我能找到的全部,因为我将要处理的大部分股票是从2007年开始,我还没有进一步查看10位数的ISBN号。

答案 1 :(得分:0)

我会使用check-digitEANISBNUPC以不同的方式计算其校验位数,因此我通常不会指望其他任何一个校验。

使用该信息,您可以非常轻松地编写快速脚本来快速验证给定的条形码。它符合的标准可能就是它。

例如,以下是验证EAN-13条形码的方法:

function validateEAN13($barcode){
    $checksum= 0;

    foreach(str_split($barcode) as $i=>$num){ //loop through the barcode
        $num = intval($num);
        if($i < strlen($barcode) - 1){ //don't include the last digit in the checksum.
            $weight = ($i + 1)  % 2 == 0 ? 1 : 3;
            $checksum += $weight * $num;
        }
    } //at the end of the loop $num will be equal to the check-digit.

    $compare = ( 10 - $checksum % 10);

    return ( $num == $compare );

}

您可以编写类似的功能来验证其他类型的条形码。然后只需遍历每个检查,直到它匹配某些内容。

编辑:我刚刚意识到ISBN-13是EAN的一个子集,并且将相互验证,因此上述操作无效。但是,正如您在回复中指出的那样。所有ISBN都将以978或979开头。没有EAN,因为EAN的前3位数是原产国,978/979属于“Bookland