сканер штрих-кода — PHP различают ISBN и UPC / EAN

Я пытаюсь сделать приложение для сканирования штрих-кода для клиента, и мне нужно различать ISBN и UPC / EAN.

Первоначально я думал, что номера ISBN имеют длину от 10 до 13 символов, а UPC / EAN имеют длину 12 цифр, но, читая далее, новые номера EAN имеют длину 13 цифр!

Так как я использую 2 API — один для книг и один для продуктов, я не хочу использовать все запросы API, ища оба, мне нужен способ различать два?

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

Есть ли у кого-нибудь ответы о том, как использовать php, чтобы узнать, является ли кодовый номер ISBN или UPC / EAN?

1

Решение

Начиная с 2007 года номера ISBN используют 13 цифр вместо 10 цифр, номера EAN также используют 13 цифр,

Слишком различие между двумя номерами ISBN всегда начинается с 978. Вот и все, что я смог найти, и, поскольку большинство акций, с которыми я буду иметь дело, начиная с 2007 года, я не стал больше смотреть на десятизначные номера ISBN.

0

Другие решения

Я бы использовал контрольная цифра. EAN, ISBN, а также СКП посчитайте их контрольные цифры по-разному, поэтому обычно я не ожидаю, что один из них будет проверять другой.

С помощью этой информации вы можете довольно легко написать быстрый скрипт для очень быстрой проверки определенного штрих-кода. Какому бы стандарту он ни соответствовал, скорее всего, он и есть.

Например, вот как вы можете проверить штрих-код 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 не будет, так как первые 3 цифры EAN являются страной происхождения, а 978/979 принадлежат «Bookland«

0