当前位置:文档之家› 二维码制作及识别

二维码制作及识别

课程设计报告质量评价表选题(10%)需求分析(10%)系统设计(30%)编码(40%)测试(10%)总分课程设计答辩记录及评价表学生讲述情况教师主要提问记录学生回答问题情况答辩评分评分项目分值评价参考标准评分总分优良中及格差选题的价值与意义10 9 8 7 6 4 文献综述10 9 8 7 6 4研究水平与设计能力20 19 17 15 13 10课程设计说明书(论文)撰写质量20 19 17 15 13 10学术水平与创新10 9 8 7 6 4 答辩效果30 28 25 22 19 15是否同意论文(设计)通过答辩□同意□不同意答辩小组成员签名答辩小组组长签名:年月日课程设计成绩评定表成绩汇总评分项目评分比例分数课程设计总分平时成绩20%课程设计报告30%答辩小组评分50%软件综合设计课程设计成绩评价表封面成都信息工程学院课程设计题目:二维码制作及识别作者姓名:邓涛班级:网络093班学号:2009121097指导教师:方睿日期:2011年 11月 03日作者签名:二维码制作及识别软件的设计与实现摘要随着计算机网络技术的飞速发展,数据信息越来越需要一种更方便快捷的传输途径,二维码的出现,使得在人们的日常生活中的数据交互变得跟方便易用。

例如当前各种手机的软件下载不需要在手机打开浏览器,输入长而繁琐地址来做下来了,只需要用手机将一个地方提供下载服务方哪里拍下提供给手机用户快速下载的二维码图片;即可快速方便的实现在手机上快速下载软件的目的。

本程序从当前用户需求出发,通过实现输入文字生成二维码QR二维码的编码和识别、解码算法。

为用户实现输入一段字符,可以生成二维码;选取一个二维码图片,可以还原成文字信息。

最后,通过测试与分析,说明该软件运行稳定、可靠,具有一定的实用价值。

关键词:二维码;QRCode目录1 引言 (1)1.1课题背景 (1)1.2国内外现状 (1)1.3本课题研究的迫切性即作用 (2)2程序设计 (2)2.1软件功能需求 (2)2.2开发环境 (2)2.3运行环境 (2)2.4软件结构设计 (3)3软件相关算法 (4)3.1二维码图片生成算法 (4)3.2二维码图片解析算法 (5)4软件界面 (6)4.1软件主界面 (6)4.2制作二维码界面 (7)4.3二维码解析以及解析结果界面 (7)结论 (8)参考资料 (8)1 引言1.1 课题背景二维码是二维条形码的一种,可以将网址、文字、照片等信息通过相应的编码算法编译成为一个方块形条码图案,手机用户可以通过摄像头和解码软件将相关信息重新解码并查看内容。

二维条码/二维码(dimensional bar code)是用某种特定的几何图形按一定规律在平面(二维方向上)分布的黑白相间的图形记录数据符号信息的;在代码编制上巧妙地利用构成计算机内部逻辑基础的“0”、“1”比特流的概念,使用若干个与二进制相对应的几何形体来表示文字数值信息,通过图象输入设备或光电扫描设备自动识读以实现信息自动处理:它具有条码技术的一些共性:每种码制有其特定的字符集;每个字符占有一定的宽度;具有一定的校验功能等。

同时还具有对不同行的信息自动识别功能、及处理图形旋转变化等特点。

在许多种类的二维条码中,常用的码制有:Data Matrix, Maxi Code, Aztec, QR Code, Vericode, PDF417, Ultracode, Code 49, Code 16K 等,QR码是1994年由日本Denso-Wave公司发明。

QR来自英文「Quick Response」的缩写,即快速反应的意思,源自发明者希望QR码可让其内容快速被解码。

QR码最常见于日本、韩国,并为目前日本最流行的二维空间条码。

1.2 国内外现状国内二维码的应用主要出现在电子凭证、防伪溯源、平面杂志以及数字出版等领域,技术服务方面可由易拍酷二维码服务平台提供。

应用案例非常广泛,各大会议活动中不断出现二维码签到,杭州,成都、北京公交站牌上的二维码指引市民方便出行;二维码火车票、飞机票等均属于二维码电子凭证类别。

日本和韩国是手机二维码应用最为普及的国度。

在韩国,二维码有着一个有趣的称谓“Magic Code”(魔码),颇有无处不在无所不能的意味。

而日本的二维码应用更为广泛,名片、户外广告、杂志、产品包装上,到处都印着二维码,人们可以通过二维码获得非常多的应用。

早在2005年,亚马逊(Amazon)就注意到了日本市场的风向,这家电子商务巨头为自己打造的潮流是鼓励用户在购买其网上服装的同时,下载一个标识着该商品的二维码并印贴在衣服上,如果旁人对这身装束感兴趣,可以用手机扫描上网,直达亚马逊的商品页面,而做了中介推销的这位顾客,则可以从亚马逊获得一定的佣金。

1.3 本课题研究的迫切性即作用现在的各种移动终端的不断普及,不管是智能手机还是现在快速发展的平板电脑;这都意味着二维码的应用将会越来越普遍,电影院促销可以采用发送二维码给用户,用户凭借二维码来作为自己获取促销优惠的凭证;二维码的便捷性使得二维码在我们日常生活的使用范围会越来越普遍。

二维码与一维码相比最大的优势就是容量大,携带的信息丰富。

二维码所带的信息是一维码的几十倍,能够将一些信息如生产日期、生产厂家放在条码中,更有利于厂家防伪。

另外,二维码还有纠错能力,二维码撕掉一半或者被污染了,所带的信息还可以还原,而一维码就做不到这一点。

本课题通过对二维码生成和解析算法的研究,制作一个小巧的软件提供给用户使用,使用户能够快速的制作二维码图片以及获取二维码所包含的信息。

2程序设计2.1 软件功能需求软件应该实现用户输入一段字符,可以生成二维码;选取一个二维码图片,可以还原成文字信息。

2.2 开发环境操作系统:Windows 7 旗舰版32位开发工具:Eclipse for RCP and RAP Developers 3.72.3 运行环境windows xp 或以上基于x86的操作系统2.4 软件结构设计二维码制作视图二维码解析视图二维码制作模块二维码解析模块结果视图软件分为了2层视图表示层,以及二维码数据处理层。

视图表示层分:二维码制作视图、二维码解析视图以及结果视图。

1、二维码制作视图:该视图提供给用户一个GUI界面,用户通过在界面中输入需要制作成二维码的字符信息。

用户点击制作二维码后,软件通过调用二维码制作模块,来完成二维码的生成。

2、二维码解析视图:该视图提供给用户GUI界面,用户可以通过界面完成对二维码图片的选取,然后软件通过调用二维码解析模块完成对二维码的解析工作。

3、二维码制作模块:该模块通过调用Google库zxing的MultiFormatWriter来实现将用户输入文本制作成符合二维码规则的二进制矩阵,然后通过MatrixToImageWriter 将二进制矩阵输出到生成的二维码图片中。

4、二维码解析模块:改模块通过使用Google库zxing的MultiFormatReader读取用户选择的文件并解析,获取解析得到的二维码图片原文。

然后返回解析结果给结果视图。

5、结果视图:该视图完成对用户处理结果的显示。

3软件相关算法3.1 二维码图片生成算法涉及的二维码信息编码模块本软件直接采用Google给我们提供的一个通用的二维码信息编码库ZXing-1.7.zip,该库给我们提供了各种二维码的生成以及解析方法。

可以根据编码选项对输入的字符串进行QR Code编码,得到编码后的QR符号,具体调用方法如下:public static boolean encodeQRCode(String text, String savePath,int imageWidth, int errorCorrectionLevel) { Charset charset = Charset.forName("UTF-8");CharsetEncoder encoder = charset.newEncoder();byte[] b = null;try {// Convert a string to UTF-8 bytes in a ByteBufferByteBuffer bbuf = encoder.encode(CharBuffer.wrap(text));b = bbuf.array();} catch (CharacterCodingException e) {System.out.println(e.getMessage());}try {String data = new String(b, "UTF-8");BitMatrix matrix = null;int h = imageWidth;int w = imageWidth;Writer writer = new MultiFormatWriter();try {Hashtable<Object, Object> hints =new Hashtable<Object, Object>();// 指定编码格式hints.put(EncodeHintType.CHARACTER_SET, "UTF-8");// 指定纠错等级hints.put(EncodeHintType.ERROR_CORRECTION,ErrorCorrectionLevel.forBits(errorCorrectionLevel));// 指定编码格式matrix = writer.encode(data,BarcodeFormat.QR_CODE, w, h, hints);} catch (WriterException e) {System.out.println(e.getMessage());}String ext = savePath.substring(stIndexOf(".")+1);File file = new File(savePath);try {MatrixToImageWriter.writeToFile(matrix, ext, file);return true;} catch (IOException e) {return false;}} catch (UnsupportedEncodingException e) {return false;}}参数说明:text是需要生成二维码的文本字符串,savePath为生成的图片保存的位置。

对字符串“01234567”编码后得到返回值为: “021021111111101101101111111100000101010001000001101110100110101011 10110111010110000101110110111010011000101110110000010011000100000111 11111010101011111110000000011000000000001011011100100010010110001010 11010100101100100101111000111110010110100010010110001010000111111001 01001000000000000111001010000111111110100001101011010000010101111100 01011011101001010010000011011101010100100101101011101010110100101001 00000100101101011011111111101001100100010”然后通过MatrixToImageWriter 的writeToFile方法完成将二进制矩阵数据写入到文件最后生成二维码图片。

相关主题