【C#】EAN-13条形码生成与识别
- 一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条形码生成与识别相关推荐
- 条形码识别软件linux,条形码生成和识别库 Aspose.BarCode
Aspose.BarCode 是一个的条形码生成和识别库.支持29种条形码类型,包括:MSI, QR, OneCode, Australia Post, Aztec, Code128, Code11, ...
- 二维码与条形码的生成和识别使用
应公司leader分配的任务,要求写一个二维码生成器放入系统settings应用中显示其相关配置信息,为方便以后工作,现将其二维码的生成和识别使用方法总结下来. 二维码,我们也称作QRCode,QR表 ...
- java条码识别技术_Java 生成、识别条形码
条形码是由一定的字符,数字及符号组成,用以表达一组信息的图形标识符.它可以标出物品的商品名称.生产日期.图书分类号,邮件起止地点等.因而在商品流通.图书管理.邮政管理等许多领域得以广泛的应用.本文将通 ...
- java 一维码架包_Java 生成、识别条形码
条形码是由一定的字符,数字及符号组成,用以表达一组信息的图形标识符.它可以标出物品的商品名称.生产日期.图书分类号,邮件起止地点等.因而在商品流通.图书管理.邮政管理等许多领域得以广泛的应用.本文将通 ...
- java生成、识别条形码和二维码
一.概述 使用 zxing 开源库 Zxing主要是Google出品的,用于识别一维码和二维码的第三方库 主要类: BitMatrix 位图矩阵 MultiFormatWriter 位图编写器 Mat ...
- vue项目中实现H5调取摄像头扫码扫一扫功能+生成可识别的条形码。单纯的h5网页不涉及真机
vue项目中实现H5调取摄像头扫码扫一扫功能+生成可识别的条形码. 单纯的h5网页不涉及真机 demo链接 前端同学可以加我一起交流一起进步 案例描述:需求是生成条形码并且在vue项目中实现扫一扫功能 ...
- iOS原生封装二维码、条形码扫描工具;生成、识别(彩色)二维码、条形码图片
二维码扫描在App中很常见的功能,之前都是用三方工具Zing.ZBar.后来Apple的AVFoundation也支持二维码扫描.生成,而且效率比三方库还要高.我把它封装成一个工具,这样使用起来十分方 ...
- 如何将EAN 13码批量输出成图片
EAN是标准条形码,目前商店里大多数商品上都打有此码.EAN广泛用于便利店里的POS系统中.由于EAN和美国.加拿大的UPC,日本的JAN兼容,是世界通用的条形码.EAN13码是由前缀码.厂商识别码. ...
- Android 二维码 生成和识别(附Demo源码)
Posted on 2013-08-25 23:15 泡泡糖 阅读( 20424) 评论( 7) 编辑 收藏 今天讲一下目前移动领域很常用的技术--二维码.现在大街小巷.各大网站都有二维码的踪迹,不管 ...
- 深度学习 -- TensorFlow(项目)验证码生成与识别(多任务学习)
目录 基础理论 一.生成验证码数据集 1.生成验证码训练集 1-0.判断文件夹是否为空 1-1.创建字符集(数字.大小写英文字母) 1-2.随机生成验证码(1000个,长度为4) 2.生成验证码测试集 ...
最新文章
- python路径拼接os.path.join()函数的用法
- 【杂谈】GAN最成功的3个商业化落地领域,你是否了解过?
- Nagios—服务和性能监控
- 全球及中国冷冻玉米粒行业盈利分析与投资机会评估报告2022-2028年版
- 圆锥破碎机常见故障_圆锥破碎机飞车危害大! 7种原因早知道早预防
- redminote8自动关机怎么回事_红米Note8Pro手机值得入手吗 红米Note8Pro手机全面评测...
- dotNET Core 3.X 请求处理管道和中间件的理解
- C语言 | 内存对齐02 - 为什么会有内存对齐?它解决了什么问题
- 云计算学习(4-3)虚拟化技术-存储虚拟化
- PageAdmin建站系统模板制作教程1:Razor简介
- 关于js中的this关键字
- 驱动调试(六)利用中断打印
- epoch,batch_size,iteration,batch_idx什么意思
- vue+axios 拦截器实现统一token
- Jmeter登录压力测试
- 微信授权流程技术说明
- scrapy实战--爬取腾讯的招聘信息
- 手机外接usb摄像头软件下载_手机打碟app下载安装_手机打碟软件最新版免费下载...
- 基于Qt5图形视图框架的“俄罗斯方块”
- 安卓 linux服务器文件夹,Android系统下根目录下文件