barcode - 将 Pharmacode 添加到 PyZbar
问题描述
我有一个制药业的检验申请。我需要使用 OpenCV 检查标签上的批号和 Pharmacode。我想过使用 PyZbar,但它不支持 Pharmacode。如何向 PyZbar 添加更多代码,例如 Pharmacode?
非常感谢
解决方案
Pharmacode(也称为 code32)使用 radix-32“压缩方案”实现为 code39。因此,您可以使用 PyZbar,前提是您将从库中获得 code39 解码,然后必须将值从 base-32 转换为 base-10。
请注意,无法知道“读取”的 code39 实际上是 code32 还是纯 code39。
这是一些将 code39 值转换为其原始 code32 字符串的 javascript:
// 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。
推荐阅读
- javascript - Webpack 5 开发服务器不提供 CSS
- html - 如何使用来自不同文件夹的 Angular 组件?
- docker - 如何为 docker compose run 指定 docker compose 文件?
- delphi - 在地图视图中将文本添加到标记?
- c++ - Qt Installer Framework:如何仅更新已更改的文件?
- javascript - 如何解析包含标签的字符串?
- angular - Angular 11 mat 输入在删除内容时显示 [object HTMLInputElement]
- powershell - Powershell AD(列出空组并列出未使用的本地组)
- ruby-on-rails - “语法错误,意外'\n',期待'。' 或 &. 或 :: 或 '['" 与 Ruby on Rails
- snowflake-cloud-data-platform - 查询分析 - 非常高的同步率?