基于ZXing开源库的二维码生成研究
2021-03-15文家朝杨辉
文家朝 杨辉
摘要:目前,二维码的应用已经相当广泛,在移动支付领域、绿色食品溯源领域、在各种设备管理领域,都可以看到它的身影。对个人而言,在使用二维码时,往往使用的是二维码提供商提供的服务,而很少在乎它是如何生成的。该文从二维码的开源工具ZXing开始入手,研究二维码的生成。研究结果表明,使用开源工具生成的二维码,在可靠性和安全性上面,具有一定的优势。
关键词:二维码;QR码;Zxing;开源库;二维码生成
中图分类号:TP311 文献标识码:A
文章编号:1009-3044(2021)03-0087-03
1 二维码的由来
二维码,英语是Quick Response Code,也叫QR码,直译是快速响应码,是由日本的DENSO WAVE公司于1994年发明[1]。由于比条形码可以存储更多内容等多种原因,二维码在以后的时间里得到了长足的发展。在中国,手机实现的二维码支付更是让二维码得到了广泛的应用,在全世界许多的国家和地区,二维码也得到了普及。在学术研究上面,二维码应用在了绿色食品溯源的研究[2]和医疗仪器设备的研究[3]。
2 现阶段二维码如何生成
在了解了二维码的由来以后,在现实生活中,如何去使用二维码,特别是如何去生成二维码,成为许多二维码应用需要解决的问题。
那么,二维码究竟是如何生成的呢?通过查询相关资料后发现,二维码的生成主要有两种方式:第一是借助二维码服务提供商生成二维码,第二是通过使用开源库自己生成二维码。目前二维码服务提供商提供的服务,大多使用服务器/浏览器模式生成二维码,有些简单的应用可以免费使用,而有些功能齐全,应用场景复杂的,则需要支付一定的费用才可以使用。
这两种方式各有优劣,下面将分别进行简单介绍。
2.1 二维码服务提供商生成
服务提供商生成二维码有它的优点和缺点,下面分别进行分析。
目前二维码的快速发展,成就了许许多多的二维码服务提供商。优秀的二维码提供商可以提供二维码生成、美化、印制、统计、管理等技术和行业解决方案,帮助用户在不同行业、不同场景,通过二维码减少信息沟通成本,提升营销和管理效率。用户在使用时,只要按照服务提供商提供的操作步骤操作,就可以方便地使用二维码,遇到问题还可以向客服寻求解决的办法。优秀的二维码服务提供商,可以提供一整套具体的一条龙报务。在使用二维码服务提供商展开的研究中,也有不少的研究,例如罗雁雁老师关于新生儿重症监护室贵重仪器管理中的应用中,就使用了著名草料二维码服务提供商展开研究[4]。
但是,正是由于二维码服务提供商众多,他们的规模、水平、服务质量就会有参差不齐,这样在使用二维码服务提供商提供的服务时,如果选择不好,就会遇到用户数据安全问题,因为生成的二维码,是存储在提供商的服务器上的,通常来说,用户需要先在提供商的网站上进行注册才可以使用,而且有些服务需要付费。
2.2 使用开源库生成
生成二维码的开发语言有许多种,根据不同的开发语言,选择不相同的开源库,在生成二维码的研究中,有江苏财经职业技术学院的管小卫老师的基于python开发语言生成二维码,包括生成普通二维码、高级二维码和带Logo的二维码[5],桂林电子科技大学的陈元枝等老师基于Zxing的彩色二维码生成与识别[6]。
通过前期的调研以及根据自己擅长的编程语言种类,本文的研究最终选择ZXing开源库来对二维码的生成进行研究。在选择开源库上面,使用Zxing开源自己生成二维码,比使用二维码服务提供商提供的二维码有一个特别大的优势,那就是完全不用担心扫码会有风险,所跳转的页面是自己可以把握的。
ZXing是Java實现的开放源代码,它提供了可以处理许多格式的条码图像处理库[7]。这里说的“许多格式”,也包括了在生活中常见的条形码和二维码,也就是说,可以利用ZXing开源库来实现对条形码、二维码的生成。
本文重点研究使用Zxing生成二维码,效果图如图1所示。研究目标大体步骤如下:
1)通过建立一个网站,输入条件可以分为三种:文本、网址以及上传文件。
2)当输入条件为文本时,输出内容是一个二维码图片,用手机扫描该二维码图片时,显示出该二维码包含的文本信息;当输入条件为网址时,输出内容是一个二维码图片,用手机扫描该二维码图片时,自动跳转到该网址;当输入条件为上传文件时,输出内容是一个二维码图片,用手机扫描该二维码时,根据上传文件的类型,如果是音频文件,则打开该音频,可以播放,如果是视频文件,打开该视频,可以播放视频,如果是其他不能在线播放的文件,则提示下载文件。
3 技术路线及问题解决
3.1 网站建立
本系统使用Apache Tomcat作为网站服务器,集成开发环境为Eclipse,在前台的开发上面,使用Dreamweaver辅助开发。
3.2 表单的提交
本系统涉及三个表单的提交,分别对应文本、网址和文件上传。通过三个表单提交到三个对应的Servlet。
3.3 用到的ZXing包
ZXing包,包含了许许多多的jar包,在使用网页版处理Zxing生成二维码的过程中,本系统只用到了core-3.3.3.jar、core-3.3.3-javadoc.jar和core-3.3.3-sources.jar三个jar包。将这三个包下载后,导入到Elipse中的Build Path中来。
3.4 中文乱码解决
中文乱码是许多的开发中都会遇到的问题,在本系统中,涉及的中文乱码的解决有三个内容,分别是ZXing中文乱码、Servlet中文乱码以及jsp页面中文乱码。
3.4.1 ZXing中文亂码
在使用ZXing生成二维码的过程中,如果使用默认的情况,不管是文本二维码的生成、网址二维码的生成还是上传文件的二维码生成,都不能很好地支持中文,会造成中文乱码,需要将输入内容中的中文,由“iso8859-1”转换为“utf-8”编码。例如,当输入文本是“这是一段中文”时,在java代码中,需要做如下操作。
textString = “这是一段中文”;
textString = new String( textString.getBytes( “iso8859-1”, “utf-8” ));
3.4.2 Servlet中文乱码
在提交到的Servlet中,也需要对提交的中文进行处理。操作如下。
response.setCharacterEncoding(“UTF-8”);
response.setHeader(“content-type”,”text/html;charset=UTF-8”);
request.setCharacterEncoding(“UTF-8”);
3.4.3 jsp页面中文乱码
这个是在jsp开发过程中最常见的,只需要设置<%@ page language=“java” contentType=“text/html; charset=UTF-8” pageEndcoding=”UTF-8”%>即可。
3.5 ZXing生成二维码的步骤
使用ZXing生成二维码,步骤其实不多,粗略的步骤如表1所示。
4 系统测试
系统测试分为文本生成二维码、网址生成二维码、文件上传生成二维码三种。
4.1 文本生成二维码
在文生成二维码的测试时,输入内容为“这是一段中文”,在点击“生成二维码”按钮后,系统跳转到一个展示生成的二维码图片的页面,为了方便检查,同时在该二维码图片的上面显示该图片的路径。最后使用手机扫码工具,扫描生成的二维码,展示出扫码结果。如图2至图4所示。
4.2 网址生成二维码
在网址生成二维码测试时,使用人民网作为测试网址,输入内容为人民网的官网地址,即“http://www.people.com.cn/”,在点击“提交”按钮后生成二维码,使用手机二维码扫码工具扫码后,跳转到人民网首页。如图5至图7所示。
4.3 文件上传生成二维码
在文件上传生成二维码测试时,选择一个文件进行上传操作,在点击“提交”按钮后,生成一个二维码图片,使用手机扫这个二维码时,提示下载该文件。如图8至图10所示。
5 创新点及不足
本文主要探讨了基于ZXing开源库的生成二维码的研究,通过建立一个网站服务器,本系统使用Apache Tomcat作为网站服务器,集成开发环境为Eclipse。通过三种输入内容,即文本、网址、文件上传,成功生成了对应的三种类别的二维码,由于是使用本地网络进行测试,故在使用手机进行扫码时,需要手机和本地网站服务器在同一个局域网内才能正常显示出扫码结果,要想在局域网外也可以正常扫出结果,还需要将网站发布到因特网去。
本研究的创新点在于,通过建立本地网站服务器,使用ZXing开源工具成功的生成二维码,文件和二维码存储在自己的本地服务器上,相对于使用二维码服务提供商,存储内容全在提供商的服务器上的这种方式,在从国家层面到个人层面都非常重视网络安全和数据安全的今天,它的可靠性和安全性更有保障。在使用ZXing开源库生成二维码的研究中,上传视频、音频和其他文件的大小,理论上不受限制。在以后的研究中,可以将本文的研究作为基础,展开更大范围,更深入的研究。
由于人力及精力,自己开发生成的二维码,在应用的广泛程度上,不及目前比较流行的二维码提供商提供的服务。
参考文献:
[1] 官网介绍:QR码的成功之路[EB/OL].[2020-06-09].https://www.qrcode/zh/history.
[2] 施连敏,郭翠珍,盖之华,等.基于二维码的绿色食品溯源系统的设计与实现[J].制造业自动化,2013,35(16):144-146.
[3] 郑梦静,何好好,谷甜甜.基于二维码技术的医疗仪器设备管理[J].中医药管理杂志,2020,28(14):51-52.
[4] 罗雁雁.草料二维码在新生儿科重症监护室贵重仪器管理中的应用[J].当代护士(上旬刊),2020(5):174-175.
[5] 管小卫.基于Python的二维码生成与识别[J].科学技术与创新,2020(25):99-100.
[6] 陈元枝,邓艳.基于Zxing的彩色QR码的生成与识别方法[J].桂林电子科技大学学报,2016,36(4):333-336.
[7] 官网介绍.ZXing项目[EB/OL].[2020-08-20].https://github.com/zxing.
【通联编辑:谢媛媛】