一维码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

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

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

    一维码EAN 8:属于国际标准条码,由8个数字组成,属EAN的简易编码形式(EAN缩短码).当包装面积小于120平方公分以下无法使用标准码时,可以申请使用缩短码. 依结构的不同,EAN条码可区分为: ...

  2. (zxing.net)一维码EAN 13的简介、实现与解码

    一维码EAN 13:属于国际标准条码, 由13个数字组成,为EAN的标准编码型式(EAN标准码). 依结构的不同,EAN条码可区分为: EAN 13码: 由13个数字组成,为EAN的标准编码型式(EA ...

  3. 一维码Code 128简介及其解码实现(zxing-cpp)

    一维码Code 128:1981年推出,是一种长度可变.连续性的字母数字条码.与其他一维条码比较起来,相对较为复杂,支持的字元也相对较多,又有不同的编码方式可供交互运用,因此其应用弹性也较大. Cod ...

  4. 一维码UPC E简介及其解码实现(zxing-cpp)

    UPC(Universal Product Code)码是最早大规模应用的条码,其特性是一种长度固定.连续性的条  码,目前主要在美国和加拿大使用,由于其应用范围广泛,故又被称万用条码. UPC码仅可 ...

  5. 一维码UPC A简介及其解码实现(zxing-cpp)

    UPC(Universal Product Code)码是最早大规模应用的条码,其特性是一种长度固定.连续性的条  码,目前主要在美国和加拿大使用,由于其应用范围广泛,故又被称万用条码. UPC码仅可 ...

  6. 一维码ITF 25简介及其解码实现(zxing-cpp)

    一维码ITF 25又称交插25条码,常用在序号,外箱编号等应用.交插25码是一种条和空都表示信息的条码,交插25码有两种单元宽度,每一个条码字符由五个单元组成,其中二个宽单元,三个窄单元.在一个交插2 ...

  7. 一维码Code 93简介及其解码实现(zxing-cpp)

    一维码Code 93: Code 93码与Code 39码的字符集相同,但93码的密度要比39码高,因而在面积不足的情况下,可以用93码代替39码.它没有自校验功能,为了确保数据安全性,采用了双校验字 ...

  8. 一维码Code 39简介及其解码实现(zxing-cpp)

    一维码Code 39:由于编制简单.能够对任意长度的数据进行编码.支持设备广泛等特性而被广泛采用. Code 39码特点: 1. 能够对任意长度的数据进行编码,其局限在于印刷品的长度和条码阅读器的识别 ...

  9. (zxing.net)一维码EAN 8的简介、实现与解码

    一.简介 一维码EAN 8:属于国际标准条码,由8个数字组成,属EAN的简易编码形式(EAN缩短码).当包装面积小于120平方公分以下无法使用标准码时,可以申请使用缩短码. 依结构的不同,EAN条码可 ...

随机推荐

  1. C#关于微信昵称中存在的表情图标乱码解决

    //在获取微信用户信息时加密保存到数据库 System.Web.HttpUtility.UrlEncode("需要加密的字段") //前端在展示是解码 <script typ ...

  2. 从一个简单的 JPA 示例开始

    本文主要讲述 Spring Data JPA,但是为了不至于给 JPA 和 Spring 的初学者造成较大的学习曲线,我们首先从 JPA 开始,简单介绍一个 JPA 示例:接着重构该示例,并引入 Sp ...

  3. GBK与UTF-8编码错误转换后,无法再正确恢复

    字符集错误转换导致的问题 UTF-8格式编码的字节流,按GBK字符集转换为字符串,会出现乱码,这很正常.但将其重新转为字节流,再用UTF-8字符集转为字符串,还是乱码.这就让我产生了疑惑,虽然使用错误 ...

  4. 有效集 matlab代码

    %有效集 function activeset H=[2 -1; -1 4]; c=[-1 -10]'; Ae=[ ]; be=[ ]; Ai=[-3 -2; 1 0; 0 1]; bi=[-6 0 ...

  5. iptables简单规则记录

    先来一句:好记性不如烂笔头! 1.iptables简介 iptables是基于包过滤的防火墙,它主要工作在osi模型的2,,4层,也可以工作在7层(iptables + squid) 2.原理 防火墙 ...

  6. linux之安装nali本地解析IP归属

    参考博文:http://www.dwhd.org/20150802_014526.html 1.安装nali wget http://www.dwhd.org/wp-content/uploads/2 ...

  7. Hadoop HBase概念学习系列之概念视图(又名为逻辑模型)(八)

    其实啊,我们把HBase想象成一个大的映射关系,再者,本来,HBase存储的数据可以理解为一种key和value的映射关系,但有不是简简单单的映射关系那种,因为比如有各个时间戳版本啊. 通过行键.行键 ...

  8. Js 运算符(加减乘除)

    1.加法 + +NaN //NaN,有一个为NaN就为NaN var box=Infinity+Infinity //Infinity var box=-Infinity + -Infinity // ...

  9. setnx redis

    使用锁 1)setnx(lockkey, 当前时间+过期超时时间) ,如果返回1,则获取锁成功:如果返回0则没有获取到锁,转向2.2.)get(lockkey)获取值oldExpireTime ,并将 ...

  10. Cloudera Manager 4.6 安装部署hadoop CDH集群

    Cloudera Manager 4.6 安装详解 1. Cloudera Manager介绍 1.1. 功能介绍 Cloudera Manager是一个针对hadoop集群的管理工具,功能包括:cd ...