Я пытаюсь сделать приложение для сканирования штрих-кода для клиента, и мне нужно различать ISBN и UPC / EAN.
Первоначально я думал, что номера ISBN имеют длину от 10 до 13 символов, а UPC / EAN имеют длину 12 цифр, но, читая далее, новые номера EAN имеют длину 13 цифр!
Так как я использую 2 API — один для книг и один для продуктов, я не хочу использовать все запросы API, ища оба, мне нужен способ различать два?
Я заметил, что в реальном приложении сканирования после сканирования элемента отображается, является ли он продуктом или книгой, но я не могу получить доступ к этой части сканера, так как использую Intel XDK и подключаемый модуль сканера штрих-кода.
Есть ли у кого-нибудь ответы о том, как использовать php, чтобы узнать, является ли кодовый номер ISBN или UPC / EAN?
Начиная с 2007 года номера ISBN используют 13 цифр вместо 10 цифр, номера EAN также используют 13 цифр,
Слишком различие между двумя номерами ISBN всегда начинается с 978. Вот и все, что я смог найти, и, поскольку большинство акций, с которыми я буду иметь дело, начиная с 2007 года, я не стал больше смотреть на десятизначные номера ISBN.
Я бы использовал контрольная цифра. 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«