一维码EAN 13简介及其解码实现(zxing-cpp)

2023-11-09

一维码EAN 13:属于国际标准条码, 由13个数字组成,为EAN的标准编码型式(EAN标准码)。

依结构的不同,EAN条码可区分为:

1.  EAN 13码: 由13个数字组成,为EAN的标准编码型式(EAN标准码)。

2.  EAN 8码: 由8个数字组成,属EAN的简易编码型式(EAN缩短码)。

EAN码的全名为欧洲商品条码(European Article Number),于1977年,由欧洲十二个工业国家所共同发展出来的一种条码。目前已成为一种国际性的条码系统。EAN条码系统的管理是由国际商品条码总会(International Article Numbering Association)负责各会员国的国家代表号码之分配与授权,再由各会员国的商品条码专责机构,对其国内的制造商、批发商、零售商等授予厂商代表号码。

EAN码具有以下特性:

1.      只能储存数字。

2.      可双向扫瞄处理,即条码可由左至右或由右至左扫瞄。

3.      必须有一检查码,以防读取资料的错误情形发生,位于EAN码中的最右边处。

4.      具有左护线、中线及右护线,以分隔条码上的不同部分与撷取适当的安全空间来处理。

5.      条码长度一定,较欠缺弹性,但经由适当的管道,可使其通用于世界各国。

EAN 13码介绍:标准码共13位数,是由”国家代码”3位数,”厂商代码”4位数,”产品代码”5位数,以及”检查码”1位数组成。

EAN 13码的结构如下图:


EAN 13编码方式:

1.      国家号码由国际商品条码总会授权,我国的”国家号码”为”690~691”,凡由我国核发的号码,均须冠上”690”为字头,以别于其他国家。

2.      厂商代码由中国商品条码策进会核发给申请厂商,占四个码,代表申请厂商的号码。

3.      产品代码占五个码,系代表单项产品的号码,由厂商自由编定。

4.  检查码占一个码,系为防止条码扫瞄器误读的自我检查。

以下是通过zxing-cpp开源库实现的对一维码EAN 13进行解码的测试代码:

#include "funset.hpp"
#include <string>
#include <fstream>
#include <Windows.h>

#include <zxing/LuminanceSource.h>
#include <zxing/common/Counted.h>
#include <zxing/Reader.h>
#include <zxing/aztec/AztecReader.h>
#include <zxing/common/GlobalHistogramBinarizer.h>
#include <zxing/DecodeHints.h>
#include <zxing/datamatrix/DataMatrixReader.h>
#include <zxing/MultiFormatReader.h>
#include <zxing/pdf417/PDF417Reader.h>
#include <zxing/qrcode/QRCodeReader.h>
#include <zxing/oned/CodaBarReader.h>
#include <zxing/oned/Code39Reader.h>
#include <zxing/oned/Code93Reader.h>
#include <zxing/oned/Code128Reader.h>
#include <zxing/oned/EAN8Reader.h>
#include <zxing/oned/EAN13Reader.h>

#include <opencv2/opencv.hpp>

#include "zxing/MatSource.h"

int test_EAN13_decode()
{
	std::string image_name = "E:/GitCode/BarCode_Test/test_images/EAN13.png";
	cv::Mat matSrc = cv::imread(image_name, 1);
	if (!matSrc.data) {
		fprintf(stderr, "read image error: %s", image_name.c_str());
		return -1;
	}

	cv::Mat matGray;
	cv::cvtColor(matSrc, matGray, CV_BGR2GRAY);

	zxing::Ref<zxing::LuminanceSource> source = MatSource::create(matGray);
	int width = source->getWidth();
	int height = source->getHeight();
	fprintf(stderr, "image width: %d, height: %d\n", width, height);

	zxing::Ref<zxing::Reader> reader;
	reader.reset(new zxing::oned::EAN13Reader);

	zxing::Ref<zxing::Binarizer> binarizer(new zxing::GlobalHistogramBinarizer(source));
	zxing::Ref<zxing::BinaryBitmap> bitmap(new zxing::BinaryBitmap(binarizer));
	zxing::Ref<zxing::Result> result(reader->decode(bitmap, zxing::DecodeHints(zxing::DecodeHints::EAN_13_HINT)));

	std::string txt = "E:/GitCode/BarCode_Test/test_images/EAN13.txt";
	std::ifstream in(txt);
	if (!in.is_open()) {
		fprintf(stderr, "fail to open file: %s\n", txt.c_str());
		return -1;
	}

	std::string str1;
	std::getline(in, str1);
	fprintf(stderr, "actual        result: %s\n", str1.c_str());
	std::string str2 = result->getText()->getText();
	fprintf(stdout, "recognization result: %s\n", str2.c_str());

	if (str1.compare(str2) == 0) {
		fprintf(stderr, "=====  recognition is correct  =====\n");
	}
	else {
		fprintf(stderr, "=====  recognition is wrong =====\n");
		return -1;
	}

	in.close();

	return 0;
}

测试图像如下:


测试结果如下:



GitHubhttps://github.com/fengbingchun/Barcode_Test

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

一维码EAN 13简介及其解码实现(zxing-cpp) 的相关文章

  • rgss加密文件解包器_Galgame汉化中的逆向 (一):文本加密(压缩)与解密

    本文为看雪论坛优秀文章 看雪论坛作者ID devseed 0x0 前言 看到关于游戏汉化相关的逆向教程挺少的 作为某汉化组的成员也帮过别的汉化组 于是就想把我见到的几个典型的例子整理分析一下 还是挺有意思的 此教程和我在贴吧和隔壁发的一样
  • 时序预测

    时序预测 Python实现NARX DNN空气质量预测 目录 时序预测 Python实现NARX DNN空气质量预测 效果一览 基本介绍 研究内容 程序设计 参考资料 效果一览 基本介绍 时序预测 Python实现NARX DNN空气质量预
  • 如何使a==1&&a==2&&a==3表达式成立?

    前几天闲着无聊 玩手机无意中发现一个题 觉得挺有意思的 就顺手记录一下 题目 a 1 a 2 a 3 true 思考 我思考了一会 这让一个值既是1又是2又是3的 不可能吧 这肯定是一个伪命题 但突然我灵光一现 对象属性不是可以拦截吗 我能
  • Flex 构建路径

    然libs文件夹是构建路径的一部分 但它并不总是SWC的理想存放位置 当多个项目同时使用相同的SWC时 就不能都存放在libs文件夹中 在这种情况下 SWC可以保持在中心位置 众所周知 SWC路径可以被添加到构建路径中 虽然这意味着需要建立
  • 问题 G: 用递归的方法求值

    题目描述 求1 2 3 4 5 n的值 输入格式 一个n n不大于10000 输出格式 输出1到n的累加和 输入样例 复制 2 输出样例 复制 3 这道题比较简单 边界是n 0 核心代码为 if n 0 return 0 else retu
  • C++ template 模板的模板参数(5.4节)

    有时 让模板参数本身成为模板是很有用的 我们将继续以stack类模板作为例子 来说明模板的模板参数的用途 在Stack的例子中 如果要使用一个和缺省值不同的内部容器 程序员必须两次指定元素类型 也就是说 为了指定内部容器的类型 你需要同时传
  • java实现文件的上传和下载

    文件的上传 upload 文件上传 客户端通过表单的文件域file 把客户端的文件 上传保存到服务器的硬盘上 页面 首先对上传的表单有以下要求 必须有文件域 input type file 表单提交方式 method post 表单的 en
  • 【剑指Offer】35.复杂链表的复制(JS实现)

    题目描述 请实现 copyRandomList 函数 复制一个复杂链表 在复杂链表中 每个节点除了有一个 next 指针指向下一个节点 还有一个 random 指针指向链表中的任意节点或者 null 示例1 输入 head 7 null 1
  • 图灵机模拟程序功能设计

    图灵机由无限长的纸带 读写头 状态寄存器 控制规则等四部分组成 纸带上的符号可以是 0 1 空格 要利用图灵机求解一个问题 需要自己设计图灵机 程序 即定义一些状态 其中包括初始状态和结束状态 设计给出控制规则 并进行图灵机初始化 设定初始
  • chrome/Edge搜索技巧

    1 剔除干扰项搜索 搜索内容 不想要的关键词 排除干扰项 2 特定搜索 给关键词加引号 关键词 只搜索引号里面的字 3 指定网站内搜索 site 域名 关键词 4 指定格式搜索 filetype 文件格式 关键词 可以制定pdf doc p
  • series not exists. Legend data should be same with series name or data name.

    normal删除
  • php+vscode+xdebug搭建php调试环境

    php vscode xdebug搭建php调试环境 开发环境 windows 10 php 8 0 23 xdebug 3 1 6 配置xdebug 查看php版本信息 cmd exe php version 可看到 我的版本信息为8 0
  • 阿里云maven 仓库地址配置

    参考 https help aliyun com document detail 102512 html spm a2c40 aliyun maven repo 0 0 36183054erKD4V 配置指南 maven配置指南 打开mav
  • 深度学习之生成对抗网络(7)WGAN原理

    深度学习之生成对抗网络 7 WGAN原理 1 JS散度的缺陷 2 EM距离 3 WGAN GP WGAN算法从理论层面分析了GAN训练不稳定的原因 并提出了有效的解决方法 那么是什么原因导致了GAN训练如此不稳定呢 WGAN提出是因为JS散
  • Best Cow Fences (前缀和 + 二分)

    描述 Farmer John s farm consists of a long row of N 1 lt N lt 100 000 fields Each field contains a certain number of cows
  • java Timer(定时调用、实现固定时间执行)

    最近需要用到定时调用的功能 可以通过java的Timer类来进行定时调用 下面是有关Timer的一些相关知识 其实就Timer来讲就是一个调度器 而TimerTask呢只是一个实现了run方法的一个类 而具体的TimerTask需要由你自己

随机推荐

  • caffe_master windows下的安装编译

    一 安装配置 caffe master包 https pan baidu com s 1kI2TcOX3Ak kNGGzsTYRBA 其它有需要请留言2602721630 qq com 本文在windows下使用visual studio2
  • 51单片机控制SG90舵机、MG90S舵机

    舵机的控制信号为周期是20ms 的脉宽调制 PWM 信号 其中脉冲宽度从0 5ms 2 5ms 相对应舵盘的位置为0 180度 呈线性变化 也就是说 给它提供一定的脉宽 它的输出轴就会保持在一个相对应的角度上 无论外界转矩怎样改变 直到给它
  • JavaScript 中的 SOLID 原则

    什么是 SOLID SOLID 是 Robert C Martin 的前五个面向对象设计原则的首字母缩写词 这些原则的目的是 让你的代码 架构更具可读性 可维护性 灵活性 单一职责原则 Single Responsibility Princ
  • 关于Java中Arrays.sort()的几种用法

    复习了Java数组之后 突然Arrays里面有一个sort是针对数组排序的 然后就看了看它的简单用法 Java的Arrays类中有一个sort 方法 该方法是Arrays类的静态方法 在需要对数组进行排序时 非常的好用 但是sort 的参数
  • mongo在linux下的安装(实践记录)

    mongo在linux下的安装 1 到官方网站下载需要安装的mongo版本 下载mongo对应的版本 官网为 http www mongodb org downloads 本人用的是公司的版本 mongodb linux x86 64 1
  • mysql如何设置自动增长id列

    参考 https blog csdn net WxQ92222 article details 79956403 我使用的是navicat软件来可视化mysql 实际上navicat可以直接设置自动增长的 在设计表时只要添加类型为int或b
  • linux添加新LUN,无需重启

    author skate time 2011 12 12 linux添加新LUN 无需重启 在给存储增加新的Lun时 在linux下一般是 A 重启操作系统 B 重启HBA卡驱动 1 kudzu 添加完新硬盘后 运行命令kudzu重新扫描新
  • TCP/UDP端口对应(转)

    常用端口编号 0 TCP UDP 保留端口 不使用 若发送过程不准备接受回复消息 则可以作为源端口 1 TCP UDP TCPMUX 传输控制协议端口服务多路开关选择器 5 TCP UDP RJE 远程作业登录 7 TCP UDP ECHO
  • Fiddler手机抓包方法及添加代理后连不上网解决

    Fidder手机抓包要保证电脑和手机在同一个局域网内 电脑端使用ipconfig查看ip地址 1 Fiddle给手机添加代理 Tools gt Options 2 手机添加代理 对应wifi点击高级选项 gt 代理 手动 gt 设置代理主机
  • css div layout,CSS布局指南

    特别声明 本文根据 Rachel Andrew的 Getting Started With CSS Layout 一文整理 在过去几年中 CSS布局已经发生了巨大的变化 现在我们开发网站的方式也发生了巨大变化 现在我们有需要可选的CSS布局
  • css3鼠标悬停动画线条边框特效

    鼠标滑过边框动画效果 使用css3结合jquery 此效果和代码是早些年最早刚接触c3动画时写的 当年写出它来别有一番成就感呢 所以记忆尤新 哈哈哈哈 早些年从不感兴趣这些写文章 管理博客之类的 现在拿出来分享给刚接触动画的小盆友们参考 先
  • 解析

    隐私数据密文控制权只能由单一主体掌控 代表控制权的密钥如何才能安全地交由多个互不信任的主体协同使用 如何在技术层面保障多方授权的公平公正性 任一参与协作的主体密钥丢失 如何实现安全可靠的容灾恢复 在业务方案设计中 安全可控地让多个隐私主体参
  • python中的->和@

    gt gt 常常出现在python函数定义的函数名后面 为函数添加元数据 描述函数的返回类型 从而方便开发人员使用 如 def add x y gt int return x y 这里面 元数据表明了函数的返回值为int类型 这样做的好处是
  • 【Qt】QImage使用总结

    图像格式转换 由 RGB 格式转换成 BGR 格式 QImage rgbSwapped 返回一个QImage 其中所有像素的红色和蓝色组件的值被交换 有效地将RGB图像转换为BGR图像 QImage image fileName QImag
  • 阿里巴巴0322晚春招实习笔试算法题解析 --- sort函数的用法与第二题:数组重排

    sort first last 对容器或普通数组中 first last 范围内的元素进行排序 默认进行升序排序 sort 函数是基于快速排序实现的 sort 只对 array vector deque 这 3 个容器提供支持 默认升序排序
  • Sqli-labs Less09-10 延时型sql盲注 - GET

    本文记录 SQL 注入的学习过程 资料为 SQLi SQLi 博客目录 Less 09 GET Blind Time based Single Quotes 测试漏洞 本关我们从标题就可以看到 基于时间 单引号 所以很明显的这关要我们利用延
  • docker下查看删除kafka下topic

    在公司的项目中需要用到kafka和c 进行消息发送 有一天不知道为啥 下端就出现一直读取消息的问题 所以得清空通道内的消息 1 docker ps 获取到当前kafka的容器id 673e6f1401c7 docker ps a 可以查看所
  • 一个DataFrame赋值的诡异报错 A value is trying to be set on a copy of a slice from a DataFrame. Try using .loc

    DataFrame赋值时报错 A value is trying to be set on a copy of a slice from a DataFrame Try using loc row indexer col indexer v
  • vscode提取扩展时出错XHR tiemout:undefinedms,如何解决?

    问题 vscode提取扩展时出错XHR tiemout undefinedms 如何解决 电脑重启了 断网重新连接了 都不行 解答 该错误通常表示 VS Code 扩展商店的连接超时 可能是网络问题导致的 您可以尝试以下几种方法 检查网络连
  • 一维码EAN 13简介及其解码实现(zxing-cpp)

    一维码EAN 13 属于国际标准条码 由13个数字组成 为EAN的标准编码型式 EAN标准码 依结构的不同 EAN条码可区分为 1 EAN 13码 由13个数字组成 为EAN的标准编码型式 EAN标准码 2 EAN 8码 由8个数字组成 属