首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >PHP区分ISBN和UPC/EAN

PHP区分ISBN和UPC/EAN
EN

Stack Overflow用户
提问于 2016-08-19 21:18:14
回答 2查看 612关注 0票数 2

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

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

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

我注意到,在实际的扫描应用程序上,一旦扫描了物品,它就会显示它是产品还是书籍,但我无法访问扫描仪的这一部分,因为我正在使用英特尔XDK和条形码扫描仪插件。

有没有人知道怎么用php查出代码号是ISBN还是UPC/EAN?

EN

回答 2

Stack Overflow用户

发布于 2016-08-19 22:23:34

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

2个ISBN编号之间的区别总是以978开头。这就是我能找到的所有东西,因为我将处理的大部分股票是从2007年开始的,我没有进一步研究过10位数的ISBN号码。

票数 1
EN

Stack Overflow用户

发布于 2016-08-19 22:48:16

我会使用check-digitEANISBNUPC计算校验位的方式不同,所以通常我不会期望一个校验位与另一个校验位相比较。

有了这些信息,您就可以非常容易地编写一个快速脚本来非常快速地验证给定的条形码。无论它符合哪种标准,它都很可能是什么。

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

代码语言:javascript
复制
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开头。不会,因为企业账户号码的前3位是原产国,978/979属于"Bookland

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39040088

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档