我正在尝试为客户制作条形码扫描应用程序,需要区分ISBN和UPC / EAN。
我原本以为ISBN号长度在10到13个字符之间,UPC / EAN长度为12位,但是进一步读取新的EAN数字是13位数字!
由于我使用2个API用于书籍,1个用于产品我不想使用搜索它们的所有API请求我需要一种方法来区分这两者吗?
我注意到在实际的扫描应用程序上扫描项目后,它显示天气是产品或书籍,但我无法访问扫描仪的那部分,因为我使用的是英特尔XDK并使用条形码扫描仪插件。 / p>
有没有人对如何使用php查询代码是ISBN还是UPC / EAN有任何答案?
答案 0 :(得分:0)
截至2007年,ISBN使用13位而不是10位,EAN编号也使用13位数,
两个ISBN号之间的区别总是从978开始。这就是我能找到的全部,因为我将要处理的大部分股票是从2007年开始,我还没有进一步查看10位数的ISBN号。
答案 1 :(得分:0)
我会使用check-digit。 EAN,ISBN和UPC以不同的方式计算其校验位数,因此我通常不会指望其他任何一个校验。
使用该信息,您可以非常轻松地编写快速脚本来快速验证给定的条形码。它符合的标准可能就是它。
例如,以下是验证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”