条形码产生和识别程序
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
A
条形码产生和识别程序
作者的话
在信息化社会中人们将传统货物管理方法也进行了数字化的管理,这其中的一个很重要的媒介就是条形码。在各大商场、超市中我们随处可见条形码,但是我们在使用他们的时候是否曾认真地去考虑过其中的原理。 我在这里设计的条形码产生和识别的程序,一方面是为了使自己弄清条形码的产生和识别的原理;另一方面也是为了通过程序的建造来实现一种产生和识别条形码的软件。
本程序将芯片中的硬件版条形码程序表示成纯软件的生成和识别程序,最初的创作想法是由于我对条形码的好奇心,广泛的收集材料,深入的分析和发展了硬件版条形码程序。征逢本次竞赛,将这个小程序发表出来,请各位老师,专家多多指教。
设计工具
本程序使用了Microsoft® Visual Studio ™ 6.0 作为程序的编译工具,并且分别建立的各自的工程,分别为generator.dsw 和recognizor.dsw 。编译完成的可执行文件分别为generator.exe 和recognizor.exe 。
工作原理
不同的商品、物品通过给定一个唯一的编码即可通过这个编码与物品的一一映射来识别和记载商品或物品,这是一个很简单的道理。只要拥有足够的位数既可以记载一定数量范围内的物品,例如,一个标示码的位数为n 位,每一位用一个十进制的数字表示,则它最多可以表示n
10个数码。
1. 编码要求 条形码的国际标准要求编码由13位十进制数字构成(从左至右分别为第0位……第12位)。
并且第12位和前12位要满足如下的关系:
[]
10)_3_(__1211
3110
20÷+⨯=+++=+++=sum even sum odd d d d d sum odd d d d sum even
满足这样的关系的数码既可以作为条形码的编码。
2.条形码规范
一个条形码图案是由113条数线组成,其中包括黑色和白色两种反差很大的线条。如图一所示:
图一 条形码实例
整个图案包括起始部分、第一数据部分、中间部分、第二数据部分和结束部分等五个部分。
⏹ 起始部分:包括12条线。是按照固定的规律排列的,从左至右分别是8条白线,
一条黑线,一条白线和一条黑线,如图二:
图二 条形码起始部分
⏹ 第一数据部分:包括42条线。如图三。他的形成是按照一定的算法形成的,其中
包含了60~d d 这些数字包含的信息。具体的形成算法见后面的文章。
图三 条形码第一数据部分
⏹ 中间部分:包括5条线,如图四。符合固定的规律,从左到右依次是白线,黑线,
白线,黑线,白线。
图四 条形码中间部分
⏹ 第二数据部分:包括42条线。如图五。他的形成是按照一定的算法形成的,其中
包含了117~d d 这些数字包含的信息。具体的形成算法见后面的文章。
图五 条形码第二数据部分
⏹ 结尾部分:包括12条线。是按照固定的规律排列的,从左至右分别是一条黑线,
一条白线和一条黑线,8条白线。如图六:
图六 条形码的结束部分
设计思想:
1. 条形码的生成
条形码的第一数据部分是由60~d d 7个数字形成的,其形成的方法详述如下: ⏹ 首先使用0d 产生和61~d d 匹配的字母码,该字母码有6个字母组成,字母限于A
和B 。产生字母码的列表如下
表一 0d 映射表
⏹ 将61~d d 和0d 产生的字母码按位进行搭配,来产生一个数字-字母匹配对。并通
过查表来得到60~d d 形成的条形码第一数据部分。
将127~d d 和C 进行搭配,并通过查表得到127~d d 形成的条形码的第二数据部分。
该映射表如表二所示:
表二 数字-字母映射表
⏹ 绘制条形码:通过映射表二得到的二进制数码进行绘制,1对应黑线,0对应白线。
2. 条形码的识别:
⏹ 首先,通过条形码的起始部分的一条黑线、一条白线、一条黑线的规律组合识别出,
第一数据部分的起始位置position_start_1。Position_start_1也就是条形码的第13条线。
⏹ 从position_start_1开始识别第一数据部分代表的二进制元信息(meta information ),
即通过从position_start_1开始依次向右扫描42条线(第13条线到第54条线),得到42bit 的二进制元信息码。然后将这个元信息码按照7bit 一组进行分组,得到6个组group1, group2, … , group6。然后将groupi 在表二中进行反向查表,得到数字
-字母匹配对(number-character),即得到了61~d d 。通过得到的6个字母的组合得
到一个字母码,并通过反向查找表一,得到0d 。同时现在的扫描位置为position_middle 。
⏹ 通过从position_middle 开始识别一条黑线、一条白线、一条黑线的规律组合,找到
了第二数据部分的起始位置position_start_2
⏹ 从position_start_2开始识别第二数据部分代表的二进制元信息(meta information ),
即通过从position_start_2开始依次向右扫描42条线(第60条线到第101条线),得到42bit 的二进制元信息码。然后将这个元信息码按照7bit 一组进行分组,得到6个组group1, group2, … , group6。然后将groupi 在表二中进行反向查表,得到数
字-字母匹配对(number-character),舍弃后面必然为C 的字母后即得到了127~d d 。 ⏹ 这样就识别出了整个13位数码,是别过程结束。
运行
本程序可以运行于Microsoft® Windows ™ 98/ME/NT/2000/XP 下。