• 一EAN-13条形码编码规则

    • 条码构成
    • 条码编码原则
      • 1检验码计算
      • 2左侧字符编码原则
      • 3右侧字符编码原则
  • 二生成条形码
    • 十进制转二进制

      • 1 获取编码方式
      • 2对编码表进行处理转化为三维数组的形式
    • 绘制条形码
      • 1 根据上一步得到的二进制数组0代表黑色1代表白色开始绘制图像
      • 2 对输入的条码编号进行简单验证
  • 三识别条形码
    • 识别方法
    • zxingnet的使用
  • 四源代码
  • 五截图

一、EAN-13条形码编码规则

1.条码构成

EAN13条形码由13位数字构成,其中第一位为前置码,最后一位为校验码。条码格式如下:


图1.1 条形码格式

图1.2 条形码区域划分

2.条码编码原则

(1)检验码计算

从左向右,取奇数位求和乘以1(不包含校验位),偶数位求和乘以3,将以上两步的结果求和再取和的个位数,最后再用10减这个个位数,就是最后一位校验码的值。

例如: 690123456789C(c为校验位)

① 计算奇数位的和:(6+0+2+4+6+8)*1=26;

② 计算偶数位的和:(9+1+3+5+7+9)*3=102;

③ 计算和:sum = 26+102=128;

④ 10-个位数:C=10-8=2。

(2)左侧字符编码原则

从左向右,第2位到第7位(6个数字)为左侧字符。左侧字符采用两种编码方式:A方式或B方式,编码表如下:


图1.3 左侧字符编码

然后根据前置码(第一位)确定这6个字符的编码方式是A还是B。

前置码决定的编码方式如下表:


图1.3 编码方式

例如:6901234567892的前置码为6,查上表,左侧6个数据的编码方式为ABBBAA。

(3)右侧字符编码原则

右侧字符从第8个字符起到最后一位。均按照C方式编码。

二、生成条形码

条形码只由和白区间表示,空白表示0,黑色表示1,所以先将十进制的数字字符根据编码表转化为二进制的形式,然后在绘制图像。

1.十进制转二进制

这里十进制转二进制不是按照运算法则转化,而是根据EAN-13的编码表进行转化。

(1) 获取编码方式

public  byte[] GetCodeChose(int prefix)

输入:prefix:前置码

输出:编码方式数组

该函数用来根据前置码获取编码方式。

(2)对编码表进行处理,转化为三维数组的形式

byte[,][] code = new byte[3,10][];

或者写成定常数组也可以:

byte[,,,] code = new byte[3,10,7];

第一维存放编码方式;第二维存放十进制数字符号;第三维存放相应的二进制编码。

然后利用函数:

public byte[] GetCode(int type,int num)

输入: type:编码方式 ;num:十进制数字

输出:十进制字符的二进制表示。

2 绘制条形码

(1) 根据上一步得到的二进制数组,0代表黑色,1代表白色,开始绘制图像。

EAN-13共113个模块(即113个条纹,包括左右两侧空白区),95个有效字符模块,并且条码的每个模块(即一个条纹)是等宽的。

所以设置绘制函数如下:

 public Image<Gray,byte> DrawCode(string text,string code, int minWidth,int height)

输入:text:前12个字符;code:二进制编码;条纹最小宽度;height:生成图像的高度

输出:条形码图像

其中,为了绘制起始位、分隔位以及终止位的不同长度,将height - margin + height / 15作为起始位、分隔位以及终止位的长度。

注:起始符为101;分隔符为01010;终止符为101。可以在生成二进制编码时加上。

(2) 对输入的条码编号进行简单验证

为了保证输入条码编号的有效性,这里做一个简单的验证。

  • 验证输入长度:输入长度应为12位(校验位自动计算得出,不用输入)
  • 验证输入类型:必须位纯数字,否则抛出异常
  • 验证国家代码:前三位数字代表国家代码,如果不能匹配国家名称,则抛出异常

三、识别条形码

1.识别方法

简单点说就是利用黑白色对光的反射程度不同,黑色吸收了大部分光波,白色返回大部分光波,所以根据返回的光波强就可以判断时扫描到的是黑色还是白色区域,然后再转化为0或者1的数字信号即可。

上述方法是在有硬件条件下的识别方法,对于没有识别器的时候,我们可以借助条码(或者二维码)识别库zbar(日本的)和zxing(美国的)来进行识别。或者直接根据像素点的值判断也可。

本次是利用zxing进行识别。

2.zxing.net的使用

首先在NuGet中下载安装zxing.net,会自动引入zxing.dll。

然后实例化识别器:

BarcodeReader reader = new BarcodeReader();

获取结果集:

Result result = reader.Decode(bitmap)

获取识别文本:

string resText = result.Text;

这样一个简单的识别就完成了。

还可以设置字符编码:

ader.Options.CharacterSet = "UTF-8";

四、源代码

完整项目地址(码云):https://gitee.com/xgpxg/BCGAR

五、截图


图5.1 条码生成截图

图5.2 条码生成截图

【C#】EAN-13条形码生成与识别相关推荐

  1. 条形码识别软件linux,条形码生成和识别库 Aspose.BarCode

    Aspose.BarCode 是一个的条形码生成和识别库.支持29种条形码类型,包括:MSI, QR, OneCode, Australia Post, Aztec, Code128, Code11, ...

  2. 二维码与条形码的生成和识别使用

    应公司leader分配的任务,要求写一个二维码生成器放入系统settings应用中显示其相关配置信息,为方便以后工作,现将其二维码的生成和识别使用方法总结下来. 二维码,我们也称作QRCode,QR表 ...

  3. java条码识别技术_Java 生成、识别条形码

    条形码是由一定的字符,数字及符号组成,用以表达一组信息的图形标识符.它可以标出物品的商品名称.生产日期.图书分类号,邮件起止地点等.因而在商品流通.图书管理.邮政管理等许多领域得以广泛的应用.本文将通 ...

  4. java 一维码架包_Java 生成、识别条形码

    条形码是由一定的字符,数字及符号组成,用以表达一组信息的图形标识符.它可以标出物品的商品名称.生产日期.图书分类号,邮件起止地点等.因而在商品流通.图书管理.邮政管理等许多领域得以广泛的应用.本文将通 ...

  5. java生成、识别条形码和二维码

    一.概述 使用 zxing 开源库 Zxing主要是Google出品的,用于识别一维码和二维码的第三方库 主要类: BitMatrix 位图矩阵 MultiFormatWriter 位图编写器 Mat ...

  6. vue项目中实现H5调取摄像头扫码扫一扫功能+生成可识别的条形码。单纯的h5网页不涉及真机

    vue项目中实现H5调取摄像头扫码扫一扫功能+生成可识别的条形码. 单纯的h5网页不涉及真机 demo链接 前端同学可以加我一起交流一起进步 案例描述:需求是生成条形码并且在vue项目中实现扫一扫功能 ...

  7. iOS原生封装二维码、条形码扫描工具;生成、识别(彩色)二维码、条形码图片

    二维码扫描在App中很常见的功能,之前都是用三方工具Zing.ZBar.后来Apple的AVFoundation也支持二维码扫描.生成,而且效率比三方库还要高.我把它封装成一个工具,这样使用起来十分方 ...

  8. 如何将EAN 13码批量输出成图片

    EAN是标准条形码,目前商店里大多数商品上都打有此码.EAN广泛用于便利店里的POS系统中.由于EAN和美国.加拿大的UPC,日本的JAN兼容,是世界通用的条形码.EAN13码是由前缀码.厂商识别码. ...

  9. Android 二维码 生成和识别(附Demo源码)

    Posted on 2013-08-25 23:15 泡泡糖 阅读( 20424) 评论( 7) 编辑 收藏 今天讲一下目前移动领域很常用的技术--二维码.现在大街小巷.各大网站都有二维码的踪迹,不管 ...

  10. 深度学习 -- TensorFlow(项目)验证码生成与识别(多任务学习)

    目录 基础理论 一.生成验证码数据集 1.生成验证码训练集 1-0.判断文件夹是否为空 1-1.创建字符集(数字.大小写英文字母) 1-2.随机生成验证码(1000个,长度为4) 2.生成验证码测试集 ...

最新文章

  1. python路径拼接os.path.join()函数的用法
  2. 【杂谈】GAN最成功的3个商业化落地领域,你是否了解过?
  3. Nagios—服务和性能监控
  4. 全球及中国冷冻玉米粒行业盈利分析与投资机会评估报告2022-2028年版
  5. 圆锥破碎机常见故障_圆锥破碎机飞车危害大! 7种原因早知道早预防
  6. redminote8自动关机怎么回事_红米Note8Pro手机值得入手吗 红米Note8Pro手机全面评测...
  7. dotNET Core 3.X 请求处理管道和中间件的理解
  8. C语言 | 内存对齐02 - 为什么会有内存对齐?它解决了什么问题
  9. 云计算学习(4-3)虚拟化技术-存储虚拟化
  10. PageAdmin建站系统模板制作教程1:Razor简介
  11. 关于js中的this关键字
  12. 驱动调试(六)利用中断打印
  13. epoch,batch_size,iteration,batch_idx什么意思
  14. vue+axios 拦截器实现统一token
  15. Jmeter登录压力测试
  16. 微信授权流程技术说明
  17. scrapy实战--爬取腾讯的招聘信息
  18. 手机外接usb摄像头软件下载_手机打碟app下载安装_手机打碟软件最新版免费下载...
  19. 基于Qt5图形视图框架的“俄罗斯方块”
  20. 安卓 linux服务器文件夹,Android系统下根目录下文件

热门文章

  1. 电脑连接WiFi,浏览器打不开网页
  2. 叔叔阿姨,我真的不会修电脑
  3. Linux杀毒软件之ClamAV使用详解
  4. 产品读书《B端产品经理必修课:从业务逻辑到产品构建全攻略》
  5. LTE CQI优化提升方法
  6. 百度富文本编辑器上传图片到oss的步骤
  7. LeetCode--宝石与石头
  8. google账号市场登陆
  9. 用maven-replacer插件选择正则表达式替换
  10. 文本预处理:拼写纠错