Определите, является ли строка из 10 цифр действительной Amazon ASIN - PullRequest
10 голосов
/ 23 января 2010

Мне передается строка из 10 цифр, и я хочу убедиться, что это действительный ASIN, прежде чем выполнять дополнительную обработку и / или перенаправление.

Я знаю, что не ISBN ASIN всегда будет не числовым и имеет длину 10 символов

Я просто хочу иметь возможность узнать, является ли передаваемый элемент действительным ASIN или это просто строка поиска после того, как я уже исключил, что это может быть ISBN.

Например, «SOUNDBOARD» - это поисковый термин, а «B000J5XS3C» - ASIN, а «1412775884» - ISBN.

Есть ли легкий способ проверить ASIN?

Ответы [ 6 ]

23 голосов
/ 11 октября 2012

Обновление, 2017

@ Леонид заметил, что нашел АСИН BT00LLINKI.

Хотя ASIN не является строго инкрементным, самые старые ASIN не-ISBN имеют тенденцию иметь больше нулей, чем новые ASIN. Возможно, это было неизбежно, что мы начали бы видеть ASIN без добавления нуля (и что потом, мне интересно ...). Итак, теперь мы ищем «B», за которым следуют девять буквенно-цифровых символов (или 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)$/

Как уже упоминалось, Amazon на самом деле не раскрывает спецификацию. На практике я видел только два возможных формата ASIN:

  1. 10-значные ISBN, которые состоят из 9 цифр + последний символ, который может быть цифрой или "X"
  2. Буква B, за которой следуют две или три цифры, за которыми следуют шесть или семь буквенно-цифровых символов

Если кто-то сталкивался с ASIN, который не соответствует этому шаблону, присоединяйтесь. Возможно, на самом деле возможно получить более строгие ограничения, но я не уверен. ASIN не ISBN могут использовать только подмножество буквенных символов, но даже если это так, они используют большинство из них. Некоторые, кажется, появляются чаще, чем другие, по крайней мере (K, Z, Q, W ...)

3 голосов
/ 06 января 2014

Для PHP здесь есть правильное регулярное выражение для Asins: http://www.sebastianviereck.de/en/php-ueberpruefen-ob-ein-string-eine-valide-asin-ist/ (английская версия)

1 голос
/ 23 января 2010

возможно, вы можете проверить на сайте Amazon, есть ли ASIN.

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

этот URL возвращает http-статус-код = 200, если продукт существует, и 404, если это был неправильный ASIN.

0 голосов
/ 19 февраля 2019

После нескольких попыток (включая ответ с наибольшим количеством голосов) они не сработали в 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>";
    }
}

Пояснение:

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

/ ^ = Начало

(? I) = без учета регистра

(B0 | BT) = Начиная с B0 или BT

[0-9A-Z] = любые цифры или буквы

{8} = разрешено 8 цифр или букв (сверху +2 от B0 или BT)

0 голосов
/ 22 февраля 2010

"этот URL возвращает http-statuscode = 200, если продукт существует, и 404, если это не был действительный ASIN."

это НЕ будет работать, так как в соответствии с документами ASIN являются специфическими для региона (проверьте это сами, если не верите). вы можете проверить только asin от - скажем - amazon.co.uk на amazon.co.uk, так что вам также нужно знать, откуда взялся ASIN.

однако, в вашем случае вам лучше иметь три поля ввода - по одному для каждого поиска. или (намного лучше) одно поле с тремя переключателями. В качестве альтернативы, вы можете проверить строку в словаре ... но угадывание всегда ОЧЕНЬ плохое проектирование.

кроме того, нет легкого способа проверить асин на достоверность

0 голосов
/ 23 января 2010

Знаете ли вы, что Amazon предлагает API, в том числе веб-сервис Amazon Associates, который позволяет программно взаимодействовать с Amazon. Я подозреваю, что это решит вашу проблему (каким-то образом). Для получения дополнительной информации посетите домашнюю страницу Amazon Web Services .

...