确定10位数字符串是否有效亚马逊ASIN

时间:2010-01-23 12:30:49

标签: php amazon

我有一个10位数的字符串传递给我,我想在进行更多处理和/或重定向之前验证它是否是有效的ASIN。

我知道非ISBN ASIN始终是非数字的,长度为10个字符

我只是希望能够判断传递的项目是否是有效的ASIN,或者在我已经消除它可能是ISBN之后它只是一个搜索字符串。

例如“SOUNDBOARD”是搜索词,而“B000J5XS3C”是ASIN,“1412775884”是ISBN。

是否有轻量级的方法来检查ASIN?

6 个答案:

答案 0 :(得分:23)

2017年更新

@Leonid评论说他找到了ASIN BT00LLINKI

虽然ASIN似乎不是严格增量的,但是最老的非ISBN ASIN确实比新的ASIN具有更多的零。也许我们不可避免地开始看到没有零填充的ASIN(然后是什么,我想知道......)。所以我们现在正在寻找“B”,然后是9个字母数字字符(或ISBN) - 不幸的是,这个零的“损失”使得误报更加容易。

/^B[\dA-Z]{9}|\d{9}(X|\d)$/

原始答案

在Javascript中,我使用以下正则表达式来确定字符串是否合理地是ASIN:

/^\s*(B\d{3}\w{6}|\d{9}(?:X|\d))\s*$/

或者,不用担心额外的空白或捕获:

/^B\d{2}\w{7}|\d{9}(X|\d)$/

正如其他人所说,亚马逊并未真正披露该规范。实际上,我只看到了两种可能的ASIN格式:

  1. 10位数的ISBN,即9位数+最终字符,可以是数字或“X”
  2. 字母B后跟两位或三位数后跟六或七个字母数字字符
  3. 如果有人遇到不符合该模式的ASIN,请插入。实际上可能会比这更严格,但我不确定。非ISBN ASIN可能只使用字母字符的子集,但即使如此,它们也会使用大部分字符。有些似乎比其他人更频繁,至少(K,Z,Q,W ......)

答案 1 :(得分:3)

对于PHP,Asins有一个有效的正则表达式:http://www.sebastianviereck.de/en/php-ueberpruefen-ob-ein-string-eine-valide-asin-ist/(英文版)

答案 2 :(得分:1)

也许您可以查看亚马逊网站是否存在ASIN。

http://www.amazon.com/dp/YOUR10DIGITASIN

此URL在产品存在时返回http-statuscode = 200,如果不是有效的ASIN则返回404.

答案 3 :(得分:0)

“当产品存在时,此URL返回http-statuscode = 200,如果不是有效的ASIN,则返回404.”

这不起作用,因为根据文档,ASIN是特定于区域的(如果你不相信,请自行检查)。你只能在amazon.co.uk验证asin - 让我们说 - amazon.co.uk,所以你也必须知道ASIN的来源。

然而,在你的情况下,你最好有三个输入字段 - 每个搜索一个。或者(好多了)一个字段和三个单选按钮。或者,你可以检查一下字典中的字符串...但猜测也很糟糕。

此外,没有轻量级方法来检查asin的有效性

答案 4 :(得分:0)

尝试了几种解决方案(包括最受好评的答案)后,它们在PHP中效果不佳。 (例如8619203011显示为ASIN)

以下是非常有效的解决方案:

function isAsin($string){
    $ptn = "/^(?i)(B0|BT)[0-9A-Z]{8}$/";
    if (preg_match($ptn, $string, $matches)) {
        return true;
    }
}
$testAsins = array('k023l5bix8', 'bb03l5bix8', 'b143l5bix8', 'bt00plinki', '         ', '');
foreach ($testAsins as $testAsin) {
    if(isAsin($testAsin)){
        echo $testAsin." is ASIN"."<br>";
    } else {
        echo $testAsin." is NOT ASIN"."<br>";
    }
}
  

说明:

     

/ ^(?i)(B0 | BT)[0-9A-Z] {8} $ /

     

/ ^ =开头

     

(?i)=不区分大小写

     

(B0 | BT)=以B0或BT开头

     

[0-9A-Z] =任何数字或字母

     

{8} =允许使用8个数字或字母(B0或BT的+2开头)

答案 5 :(得分:-4)

您是否知道亚马逊提供的API(包括Amazon Associates Web服务)允许您以编程方式与Amazon进行交互。我怀疑这将解决你的问题(以某种方式)。查看Amazon Web Services主页以获取更多信息。