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

Code 128特性:

1、具有A、B、C三种不同的编码类型,可提供标准ASCII中128个字元的编码使用;

2、允许双向扫描;

3、可自行决定是否加上检验位;

4、条码长度可调,但包括开始位和结束位在内,不可超过232个字元;

5、同一个128码,可以由A、B、C三种不同编码规则互换,既可扩大字元选择的范围,也可缩短编码的长度。

Code 128各编码方式的编码范围:

1、Code 128 A:标准数字和字母,控制符,特殊字符;

2、Code 128 B:标准数字和字母,小写字母,特殊字符;

3、Code 128 C/EAN 128:[00]-[99]的数字对集合,共100个,即只能表示偶数位长度的数字。

Code 128编码规则:开始位+[FNC1(为EAN 128码时加)] + 数据位 + 检验位 + 结束位。

Code128检验位计算:(开始位对应的ID值 + 每位数据在整个数据中的位置 * 每位数据对应的ID值) % 103。

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

#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 <opencv2/opencv.hpp>#include "zxing/MatSource.h"int test_Code128_decode(){ std::string image_name = "E:/GitCode/BarCode_Test/test_images/Code128.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::Code128Reader); 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::CODE_128_HINT))); std::string txt = "E:/GitCode/BarCode_Test/test_images/Code128.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;}

测试图像如下:

测试结果如下:

GitHub:https://github.com/fengbingchun/Barcode_Test

再分享一下我老师大神的人工智能教程吧。零基础!通俗易懂!风趣幽默!还带黄段子!希望你也加入到我们人工智能的队伍中来!https://blog.csdn.net/jiangjunshow

一维码Code 128简介及其解码实现 zxing-cpp相关推荐

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

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

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

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

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

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

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

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

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

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

  6. iOS上二维码和一维码识别系列一

    这段时间在做iOS上二维码和一维码的识别 其间遇到问题无数, 特此总结下来, 希望能给后来的同学供参考 在iOS上, 做二维码识别, 首先在网上查找资料, 查找到ZBar和ZXing这两个开源的识别程 ...

  7. halcon一维码识别

    halcon一维码识别 1.创建模板 create_bar_code_model (GenParamName, GenParamValue, BarCodeHandle) GenParamName 可 ...

  8. C# 生成一维码(条形码)和二维码

    前言 在使用C#语言进行客户端软件开发时很多时候我们会有需要生成二维码和一维码的需求,在智能工厂和一些商品扫码之类的软件中应用居多,此文章简单记录了一维码和二维码的编码格式和使用ZXing库生成二维码 ...

  9. 一维码Codabar简介及其解码实现(zxing-cpp)

    一维码Codabar:由4条黑色线条,3条白色线条,合计7条线条所组成,每一个字元与字元之间有一间隙Gap做区隔. 条形码Codabar包含21个字元: (1).10个数字0~9; (2)." ...

  10. STM32F407获取OV7670摄像头图像及上位机解码(一维码二维码)

    STM32F407获取OV7670摄像头图像及上位机解码(一维码&二维码) 1. 目的 针对静止拍摄图像场景,实现STM32F407对30万像素OV7670摄像头进行图像捕获,并通过串口将数据 ...

最新文章

  1. mysql 5.7 full_MySQL5.7默认打开ONLY_FULL_GROUP_BY 解决方案
  2. 开发日记-20190424 关键词 阶段性开发心得和小结
  3. leetcode:44. 通配符匹配
  4. 微信回调接口java返回true_java 微信支付异步回调接口
  5. python不同模块间传递数据_Python模块-数据传送模块
  6. Jackson 学习
  7. wordpress插件-really-simple-ssl插件解决网站开启ssl证书后,图片不能正常显示
  8. 数据结构之堆与优先队列
  9. linux jboss 多实例,在单个JBoss实例上设置多个端口?
  10. learn go ifelse
  11. 阿姆达尔定律(Amdahl's law)
  12. 织梦内容模型管理(人才招聘)
  13. 资源工具分享(第1期):后端架构师技术图谱
  14. 易班 华南理工大学 新生入学教育在线考试 题库共503题
  15. Linux的WIFI架构,Linux Wireless架构总结
  16. 基于Matlab的hdb3编译码设计,基于MATLAB的HDB3编译码实现
  17. 台式电脑网络连接配置异常_电脑上不了网,360断网急救箱显示网络连接配置和网络存在問題,点击修复。网络连接配置修复了,网络存......
  18. 计算机课说话检查200字,上课说话检讨书200字(精选10篇)
  19. RACV2022观点集锦 | 视觉基础模型
  20. movidius 神经计算棒 ncsdk windows 平台 支持 配置 教程

热门文章

  1. 常用符号大全 特殊符号
  2. 西门子g120变频器接线图_【直播】S71200与SINAMICS G120变频器的profinet通信
  3. matlab数据取整方法小结
  4. 多源信息融合中的一些名词及知识点
  5. 使用AD13设计PCB的技巧总结
  6. 基于STM32设计的车库监控报警系统
  7. 腾讯云短信服务申请+测试
  8. android 支付宝第三方支付
  9. Windows 各平台远程桌面客户端
  10. android5.0 输入法提取,搜狗手机输入法5.0 Android新版使用体验