Добавление фармакода в PyZbar

#barcode

#штрих-код

Вопрос:

У меня есть приложение для проверки в фармацевтике. Мне нужно проверить номера партий и фармакоды на этикетках с помощью OpenCV. Я думал об использовании PyZbar, но он не поддерживает фармакод. Как я могу добавить больше кодов, таких как фармакод, в PyZbar?

Большое спасибо

Ответ №1:

Фармакод (также известный как code32) реализован как code39 с использованием «схемы сжатия» radix-32. Таким образом, вы можете использовать PyZbar, понимая, что вы получите декодирование code39 из библиотеки, а затем должны преобразовать значение из base-32 в base-10.

Обратите внимание, что нет способа узнать, является ли code39 «прочитанным» на самом деле code32 или просто code39.

Это некоторый javascript, который преобразует значение code39 в исходную строку code32:

 // code32 radix set (missing the vowels AEIO)
const code32set = '0123456789BCDFGHJKLMNPQRSTUVWXYZ';
function code39toCode32(val) {
    if (/[^0-9BCDFGHJKLMNPQRSTUVWXYZ]/.test(val)) {
        throw new Error("Not code32");
    }
    let res = 0;
    for (let i = 0; i < val.length; i  ) {
        res = res * 32   code32set.indexOf(val[i]);
    }
    let code32 = ''   res;
    if (code32.length < 9) {
        code32 = ('000000000'   code32).slice(-9);
    }
    return code32;
}
  

Эта функция должна довольно легко переводиться на python.

Комментарии:

1. Большое вам спасибо за ваш ответ. На самом деле, Code32 — это итальянский фармацевтический код, и он особого типа и отличается от общего фармакода. Возможно ли добавить новые коды в Zbar?