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

RAD*_*ose 11 php amazon

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

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

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

例如,"SOUNDBOARD"是搜索词,而"B000J5XS3C"是ASIN,"1412775884"是ISBN.

是否有轻量级方式检查ASIN?

Sem*_*lon 25

2017年更新

@Leonid评论说他找到了ASIN BT00LLINKI.

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

/^B[\dA-Z]{9}|\d{9}(X|\d)$/
Run Code Online (Sandbox Code Playgroud)

原始答案

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

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

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

/^B\d{2}\w{7}|\d{9}(X|\d)$/
Run Code Online (Sandbox Code Playgroud)

正如其他人所提到的,亚马逊并没有真正透露这一规格.实际上,我只看到了两种可能的ASIN格式:

  1. 10位ISBN,9位数+最终字符,可以是数字或"X"
  2. 字母B后跟两个或三个数字,后跟六个或七个字母数字字符

如果有人遇到了不符合该模式的ASIN,请插入.实际上可能会比这更严格,但我不确定.非ISBN ASIN可能只使用字母字符的子集,但即使如此,它们也会使用大部分字符.有些似乎比其他人更频繁,至少(K,Z,Q,W ...)

  • 对于最近遇到此答案的人来说,[B0000000BS](http://amzn.com/B0000000BS)和[B00000BIES](http://amzn.com/B00000BIES)目前是有效的ASIN链接到真实产品..这些不符合上述模式.好像很多都在两年内发生了变化! (2认同)

小智 0

也许你可以在亚马逊网站上检查 ASIN 是否存在。

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

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