EAN13条码实验报告.doc_第1页
EAN13条码实验报告.doc_第2页
EAN13条码实验报告.doc_第3页
EAN13条码实验报告.doc_第4页
EAN13条码实验报告.doc_第5页
已阅读5页,还剩10页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

实 验:EAN13条形码一、实验目的复习并巩固C语言,熟练的运用C语言进行编程。通过使用Visual C+6.0程序编译软件编写源程序,能够实现ENA13条形码的生成。二、实验要求1、利用C语言编程实现ENA13条形码2、代码实现的主要功能有:基本的输入输出功能、条形码的读取、条形码的生成三、实验原理1、EAN-13条形码的字符格式 国际物品条形码有两个版本,一个是标准版,另一个是缩短版。标准版即我们通常所说的ERIN- 13。标准版规定十三位数字的条形码符号形式,如图1.所示。开始三位数字(用FI-F3表示)代表商品制造商所属的国家或地区,也称为前缀号。例如日本为49#,澳大利亚为93#,我国为690。这里的“#”表示0-9的任意数字。接下来的四位数字(M1-M4表示)为商品制造商的代码,是由该国编码管理局审查批准并登记注册的。在接下来的五位数字(I1-I5表示)是由所在国编码管理局注册的生产企业所给的商品编码,由企业自己编制。最后一位是校验位(C),用来检查条形码阅读器的结果是否正确。 图1 .EAN条码的格式2、EAN-13条形码的构成 通用商品条码从左侧空白区开始,依次向右为左侧空白区、起始符、左侧数据符、中间分隔符、右侧数据符、校验符、终止符,到右侧空白区为止。左、右侧空白: 没有任何印刷符号的空白区域,它通常是白的,位于条码符号的两侧。用以提示阅读器准备扫描条形码符号,共有十八个模块组成(其中左侧空白不得少于9个模块宽度),一般左侧11个模块,右侧7个模块。起始符: 条形码符号的第一位字符是起始符,它特殊的条空结构用于识别条形码符号的开始,由3个模块组成。左侧数据符: 位于中间分隔符的左侧,表示一定信息的条码字符,由42个模块组成。中间分隔符: 位于条码中间位置的若干条与空,用于区分左右侧数据,有5个模块构成。右侧数据符: 位于中间分隔符右侧,表示一定信息的条码字符,由35个模块组成。条码校验符: 表示校验码的条码字符,用以校验条码符号的正确与否,由7个模块组成。终止符: 条形码符号的最后一位字符是终止符,它的特殊的条空结构用于识别条形码符号的结束,由3个模块组成。可见起始符、终止符的编码是相同的,都是用等宽的两个黑线条加一个白线条组成,分别是黑-白-黑。如规定一个模块宽度的黑条对应1,白条对应0,则起始符和终止符的编码为101,中间分隔符的编码为01010。这三种符号的条空排列是固定不变的,比其他条空的长度略长。 图2.标准EAN-13条形码的构成3、EAN-13条形码的编码原则 所谓编码原则就是针对商品项目代码而言的。我们所研究的一维条码是我国主要采用的EAN代码,编码时应遵循如下原则:a、唯一性 所谓唯一性是指商品项目与其标识代码一一对应,即一个商品项目只有一个代码,一个代码只标识同一商品项目。商品项目代码一旦确定,永不改变,即使该商品停止生产,停止供应了,在一段时间以内(一些国家规定为3年)也不得将该代码分配给其他商品项目。在商品系统中商品及商品价格的差异是靠不同的代码识别的。唯一的商品项目代码与厂商代码和国别(地区)组配在一起就可以保证商品的代码标识在一个国家(地区)乃至全世界范围内都是唯一的。唯一性是商品编码最重要的一条原则,也是传统条码的局限所在。b、无含义 无含义是指代码数字本身及其位置不表示商品的任何特定信息。平常说的“流水号”就是一种无含义代码。在EAN及UPC系统中,商品编码仅仅是一种识别商品的手段,而不是商品分类的手段。无含义使商品编码具有简单、灵活、可靠、充分利用代码容量大、生命力强等特点,所以传统条码需要借助数据库的存在。 c、全数字型代码 在EAN及UPC系统中,商品编码全部采用阿拉伯字母。4、ENA13条形码的特性1、只能储存数字。2、可以双向扫描处理。3、必须有一检查码,用以防止读取资料的错误情形发生,位于ENA码中的最右边处。4、具有左护线,中线以及右护线,以分隔条码上的不同部分。5、条码长度一定,较缺乏弹性,但经由适当的管道,可以使其通用于全世界。四、实验过程1、下载一个Easyx解压包并新建一个ENA13文件夹。2、解压并安装Easyx软件。3、在Visual C+6.0程序编译软件中建立ENA13工程。4、编写程序并运行调试到没有错误。5、编译并运行结果五、实验总结通过本次实验,我对EAN13条码的编码方法和编码原理及规则有了更深层次的了解,而且对EAN13条形码的结构也更加清楚,虽然实验过程并不是很顺利,但最后通过查找资料及询问同学,实验做成功了,该实验不仅让我巩固了大一时所学的C语言知识,能够更加熟练的运用了Visual C+6.0环境中编写程序的基本方法,而且加深了我对条形码的了解,并且对信息自动识别技术的学习有很大帮助。六、附录:实验源代码如下:#include #include #include #include int startX, startY, height;/划线,注意这里设置的是一条线的宽度占两个像素void DrawLine(int h)setcolor(BLACK);line(startX, startY, startX, startY + height + h);line(startX + 1, startY, startX + 1, startY + height + h);startX += 2;/左侧空白处理void LeftBlank()clearcliprgn();/清空画图setcolor(BLACK);/ 设置绘图色为红色rectangle(startX, startY - 10, startX + 226, startY + 120); / 画矩形startX = startX + 9 * 2;/留出9个模块的空白/起始符处理void StartPattern()DrawLine(10);startX += 2;DrawLine(10);/左侧数据处理void LeftDataPattern(char * leftdata)int i;for(i = 0; i 42; i +)if(leftdatai = 1)DrawLine(0);elsestartX += 2;/中间分隔符处理void CenterDivisionPattern()int i;int center5 = 0, 1, 0, 1, 0 ;for(i = 0; i 5; i +)if(centeri = 1)DrawLine(10);elsestartX += 2;/右侧数据处理void RightDataPattern(char *rightdata)int i;for(i = 0; i 42; i +)if(rightdatai = 1)DrawLine(0);elsestartX += 2;/结束符处理void EndPattern()DrawLine(10);startX += 2;DrawLine(10);/数据检查处理bool DataCheck(char * strdata)int i;if(strlen(strdata) != 12)printf(您输入的数据长度不正确,n);return false;for(i = 0; i 12; i +)if(strdatai 9)printf(您输入的不是数字,n);return false;return true;/输入数据并检查数据的格式void input(int *data)char strdata13;int i;printf(请输入12位的数据:n);gets(strdata);while(!DataCheck(strdata)printf(请重新输入:n);scanf(%s,strdata);for(i = 0; i 12; i +)datai = strdatai - 0;/获取校验位int GetCheckBit(int *data)int i, sum = 0, n;for(i = 0; i 12; i +)n = (i + 1) % 2 ? datai : datai * 3;sum += n;sum %= 10;return (10 - sum) % 10;char *ASubset(int number)char *strdata;switch(number)case 0: strdata = 0001101;break;case 1: strdata = 0011001;break;case 2: strdata = 0010011;break;case 3: strdata = 0111101;break;case 4: strdata = 0100011;break;case 5: strdata = 0110001;break;case 6: strdata = 0101111;break;case 7: strdata = 0111011;break;case 8: strdata = 0110111;break;case 9: strdata = 0001011;break;return strdata;char *BSubset(int number)char *strdata;switch(number)case 0: strdata = 0100111;break;case 1: strdata = 0110011;break;case 2: strdata = 0011011;break;case 3: strdata = 0100001;break;case 4: strdata = 0011101;break;case 5: strdata = 0111001;break;case 6: strdata = 0000101;break;case 7: strdata = 0010001;break;case 8: strdata = 0001001;break;case 9: strdata = 0010111;break;return strdata;char *CSubset(int number)char *strdata;switch(number)case 0: strdata = 1110010;break;case 1: strdata = 1100110;break;case 2: strdata = 1101100;break;case 3: strdata = 1000010;break;case 4: strdata = 1011100;break;case 5: strdata = 1001110;break;case 6: strdata = 1010000;break;case 7: strdata = 1000100;break;case 8: strdata = 1001000;break;case 9: strdata = 1110100;break;return strdata;char *LeftDataSelectRole(int number)char *strdata;switch(number)case 0: strdata = AAAAAA;break;case 1: strdata = AABABB;break;case 2: strdata = AABBAB;break;case 3: strdata = AABBBA;break;case 4: strdata = ABAABB;break;case 5: strdata = ABBAAB;break;case 6: strdata = ABBBAA;break;case 7: strdata = ABABAB;break;case 8: strdata = ABABBA;break;case 9: strdata = ABBABA;break;return strdata;/获取左侧数据处理void GetLeftData(int *data, int begin, int end, char *leftdata)int i;char *str;str = LeftDataSelectRole(data0);for(i = begin; i = end; i +)if( stri -1 = A)strcat(leftdata, ASubset(datai);if(stri - 1 = B)strcat(leftdata, BSubset(datai);/获取左侧数据处理void GetRightData(int *data, int begin, int end, char *rightdata)int i;for(i = begin; i = end; i +)strcat(rightdata, CSubset(datai);/获取数据void GetData(char *leftdata, char *rightdata)int data13 = 0;input(data); /输入数据data12 = GetCheckBit(data);/计算校验位/printf(%dn, data12);/输出校验位的值GetLeftData(data, 1, 6, leftdata); /获取左侧数据GetRightData(data, 7, 12, rightdata);/获取右侧数据/画EAN13条码的主体函数void DrawEAN13()/int leftdata42 = 0,0,0,1,0,1,1,0,1,0,0,1,1,1,0,1,1,0,0,1,1,0,

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

最新文档

评论

0/150

提交评论