文家朝 楊輝
摘要:目前,二維碼的應(yīng)用已經(jīng)相當(dāng)廣泛,在移動支付領(lǐng)域、綠色食品溯源領(lǐng)域、在各種設(shè)備管理領(lǐng)域,都可以看到它的身影。對個人而言,在使用二維碼時,往往使用的是二維碼提供商提供的服務(wù),而很少在乎它是如何生成的。該文從二維碼的開源工具ZXing開始入手,研究二維碼的生成。研究結(jié)果表明,使用開源工具生成的二維碼,在可靠性和安全性上面,具有一定的優(yōu)勢。
關(guān)鍵詞:二維碼;QR碼;Zxing;開源庫;二維碼生成
中圖分類號:TP311? ? ? 文獻(xiàn)標(biāo)識碼:A
文章編號:1009-3044(2021)03-0087-03
1 二維碼的由來
二維碼,英語是Quick Response Code,也叫QR碼,直譯是快速響應(yīng)碼,是由日本的DENSO WAVE公司于1994年發(fā)明[1]。由于比條形碼可以存儲更多內(nèi)容等多種原因,二維碼在以后的時間里得到了長足的發(fā)展。在中國,手機(jī)實現(xiàn)的二維碼支付更是讓二維碼得到了廣泛的應(yīng)用,在全世界許多的國家和地區(qū),二維碼也得到了普及。在學(xué)術(shù)研究上面,二維碼應(yīng)用在了綠色食品溯源的研究[2]和醫(yī)療儀器設(shè)備的研究[3]。
2 現(xiàn)階段二維碼如何生成
在了解了二維碼的由來以后,在現(xiàn)實生活中,如何去使用二維碼,特別是如何去生成二維碼,成為許多二維碼應(yīng)用需要解決的問題。
那么,二維碼究竟是如何生成的呢?通過查詢相關(guān)資料后發(fā)現(xiàn),二維碼的生成主要有兩種方式:第一是借助二維碼服務(wù)提供商生成二維碼,第二是通過使用開源庫自己生成二維碼。目前二維碼服務(wù)提供商提供的服務(wù),大多使用服務(wù)器/瀏覽器模式生成二維碼,有些簡單的應(yīng)用可以免費使用,而有些功能齊全,應(yīng)用場景復(fù)雜的,則需要支付一定的費用才可以使用。
這兩種方式各有優(yōu)劣,下面將分別進(jìn)行簡單介紹。
2.1 二維碼服務(wù)提供商生成
服務(wù)提供商生成二維碼有它的優(yōu)點和缺點,下面分別進(jìn)行分析。
目前二維碼的快速發(fā)展,成就了許許多多的二維碼服務(wù)提供商。優(yōu)秀的二維碼提供商可以提供二維碼生成、美化、印制、統(tǒng)計、管理等技術(shù)和行業(yè)解決方案,幫助用戶在不同行業(yè)、不同場景,通過二維碼減少信息溝通成本,提升營銷和管理效率。用戶在使用時,只要按照服務(wù)提供商提供的操作步驟操作,就可以方便地使用二維碼,遇到問題還可以向客服尋求解決的辦法。優(yōu)秀的二維碼服務(wù)提供商,可以提供一整套具體的一條龍報務(wù)。在使用二維碼服務(wù)提供商展開的研究中,也有不少的研究,例如羅雁雁老師關(guān)于新生兒重癥監(jiān)護(hù)室貴重儀器管理中的應(yīng)用中,就使用了著名草料二維碼服務(wù)提供商展開研究[4]。
但是,正是由于二維碼服務(wù)提供商眾多,他們的規(guī)模、水平、服務(wù)質(zhì)量就會有參差不齊,這樣在使用二維碼服務(wù)提供商提供的服務(wù)時,如果選擇不好,就會遇到用戶數(shù)據(jù)安全問題,因為生成的二維碼,是存儲在提供商的服務(wù)器上的,通常來說,用戶需要先在提供商的網(wǎng)站上進(jìn)行注冊才可以使用,而且有些服務(wù)需要付費。
2.2 使用開源庫生成
生成二維碼的開發(fā)語言有許多種,根據(jù)不同的開發(fā)語言,選擇不相同的開源庫,在生成二維碼的研究中,有江蘇財經(jīng)職業(yè)技術(shù)學(xué)院的管小衛(wèi)老師的基于python開發(fā)語言生成二維碼,包括生成普通二維碼、高級二維碼和帶Logo的二維碼[5],桂林電子科技大學(xué)的陳元枝等老師基于Zxing的彩色二維碼生成與識別[6]。
通過前期的調(diào)研以及根據(jù)自己擅長的編程語言種類,本文的研究最終選擇ZXing開源庫來對二維碼的生成進(jìn)行研究。在選擇開源庫上面,使用Zxing開源自己生成二維碼,比使用二維碼服務(wù)提供商提供的二維碼有一個特別大的優(yōu)勢,那就是完全不用擔(dān)心掃碼會有風(fēng)險,所跳轉(zhuǎn)的頁面是自己可以把握的。
ZXing是Java實現(xiàn)的開放源代碼,它提供了可以處理許多格式的條碼圖像處理庫[7]。這里說的“許多格式”,也包括了在生活中常見的條形碼和二維碼,也就是說,可以利用ZXing開源庫來實現(xiàn)對條形碼、二維碼的生成。
本文重點研究使用Zxing生成二維碼,效果圖如圖1所示。研究目標(biāo)大體步驟如下:
1)通過建立一個網(wǎng)站,輸入條件可以分為三種:文本、網(wǎng)址以及上傳文件。
2)當(dāng)輸入條件為文本時,輸出內(nèi)容是一個二維碼圖片,用手機(jī)掃描該二維碼圖片時,顯示出該二維碼包含的文本信息;當(dāng)輸入條件為網(wǎng)址時,輸出內(nèi)容是一個二維碼圖片,用手機(jī)掃描該二維碼圖片時,自動跳轉(zhuǎn)到該網(wǎng)址;當(dāng)輸入條件為上傳文件時,輸出內(nèi)容是一個二維碼圖片,用手機(jī)掃描該二維碼時,根據(jù)上傳文件的類型,如果是音頻文件,則打開該音頻,可以播放,如果是視頻文件,打開該視頻,可以播放視頻,如果是其他不能在線播放的文件,則提示下載文件。
3 技術(shù)路線及問題解決
3.1 網(wǎng)站建立
本系統(tǒng)使用Apache Tomcat作為網(wǎng)站服務(wù)器,集成開發(fā)環(huán)境為Eclipse,在前臺的開發(fā)上面,使用Dreamweaver輔助開發(fā)。
3.2 表單的提交
本系統(tǒng)涉及三個表單的提交,分別對應(yīng)文本、網(wǎng)址和文件上傳。通過三個表單提交到三個對應(yīng)的Servlet。
3.3 用到的ZXing包
ZXing包,包含了許許多多的jar包,在使用網(wǎng)頁版處理Zxing生成二維碼的過程中,本系統(tǒng)只用到了core-3.3.3.jar、core-3.3.3-javadoc.jar和core-3.3.3-sources.jar三個jar包。將這三個包下載后,導(dǎo)入到Elipse中的Build Path中來。
3.4 中文亂碼解決
中文亂碼是許多的開發(fā)中都會遇到的問題,在本系統(tǒng)中,涉及的中文亂碼的解決有三個內(nèi)容,分別是ZXing中文亂碼、Servlet中文亂碼以及jsp頁面中文亂碼。
3.4.1 ZXing中文亂碼
在使用ZXing生成二維碼的過程中,如果使用默認(rèn)的情況,不管是文本二維碼的生成、網(wǎng)址二維碼的生成還是上傳文件的二維碼生成,都不能很好地支持中文,會造成中文亂碼,需要將輸入內(nèi)容中的中文,由“iso8859-1”轉(zhuǎn)換為“utf-8”編碼。例如,當(dāng)輸入文本是“這是一段中文”時,在java代碼中,需要做如下操作。
textString = “這是一段中文”;
textString = new String( textString.getBytes( “iso8859-1”, “utf-8” ));
3.4.2 Servlet中文亂碼
在提交到的Servlet中,也需要對提交的中文進(jìn)行處理。操作如下。
response.setCharacterEncoding(“UTF-8”);
response.setHeader(“content-type”,”text/html;charset=UTF-8”);
request.setCharacterEncoding(“UTF-8”);
3.4.3 jsp頁面中文亂碼
這個是在jsp開發(fā)過程中最常見的,只需要設(shè)置<%@ page language=“java” contentType=“text/html; charset=UTF-8” pageEndcoding=”UTF-8”%>即可。
3.5 ZXing生成二維碼的步驟
使用ZXing生成二維碼,步驟其實不多,粗略的步驟如表1所示。
4 系統(tǒng)測試
系統(tǒng)測試分為文本生成二維碼、網(wǎng)址生成二維碼、文件上傳生成二維碼三種。
4.1 文本生成二維碼
在文生成二維碼的測試時,輸入內(nèi)容為“這是一段中文”,在點擊“生成二維碼”按鈕后,系統(tǒng)跳轉(zhuǎn)到一個展示生成的二維碼圖片的頁面,為了方便檢查,同時在該二維碼圖片的上面顯示該圖片的路徑。最后使用手機(jī)掃碼工具,掃描生成的二維碼,展示出掃碼結(jié)果。如圖2至圖4所示。
4.2 網(wǎng)址生成二維碼
在網(wǎng)址生成二維碼測試時,使用人民網(wǎng)作為測試網(wǎng)址,輸入內(nèi)容為人民網(wǎng)的官網(wǎng)地址,即“http://www.people.com.cn/”,在點擊“提交”按鈕后生成二維碼,使用手機(jī)二維碼掃碼工具掃碼后,跳轉(zhuǎn)到人民網(wǎng)首頁。如圖5至圖7所示。
4.3 文件上傳生成二維碼
在文件上傳生成二維碼測試時,選擇一個文件進(jìn)行上傳操作,在點擊“提交”按鈕后,生成一個二維碼圖片,使用手機(jī)掃這個二維碼時,提示下載該文件。如圖8至圖10所示。
5 創(chuàng)新點及不足
本文主要探討了基于ZXing開源庫的生成二維碼的研究,通過建立一個網(wǎng)站服務(wù)器,本系統(tǒng)使用Apache Tomcat作為網(wǎng)站服務(wù)器,集成開發(fā)環(huán)境為Eclipse。通過三種輸入內(nèi)容,即文本、網(wǎng)址、文件上傳,成功生成了對應(yīng)的三種類別的二維碼,由于是使用本地網(wǎng)絡(luò)進(jìn)行測試,故在使用手機(jī)進(jìn)行掃碼時,需要手機(jī)和本地網(wǎng)站服務(wù)器在同一個局域網(wǎng)內(nèi)才能正常顯示出掃碼結(jié)果,要想在局域網(wǎng)外也可以正常掃出結(jié)果,還需要將網(wǎng)站發(fā)布到因特網(wǎng)去。
本研究的創(chuàng)新點在于,通過建立本地網(wǎng)站服務(wù)器,使用ZXing開源工具成功的生成二維碼,文件和二維碼存儲在自己的本地服務(wù)器上,相對于使用二維碼服務(wù)提供商,存儲內(nèi)容全在提供商的服務(wù)器上的這種方式,在從國家層面到個人層面都非常重視網(wǎng)絡(luò)安全和數(shù)據(jù)安全的今天,它的可靠性和安全性更有保障。在使用ZXing開源庫生成二維碼的研究中,上傳視頻、音頻和其他文件的大小,理論上不受限制。在以后的研究中,可以將本文的研究作為基礎(chǔ),展開更大范圍,更深入的研究。
由于人力及精力,自己開發(fā)生成的二維碼,在應(yīng)用的廣泛程度上,不及目前比較流行的二維碼提供商提供的服務(wù)。
參考文獻(xiàn):
[1] 官網(wǎng)介紹:QR碼的成功之路[EB/OL].[2020-06-09].https://www.qrcode/zh/history.
[2] 施連敏,郭翠珍,蓋之華,等.基于二維碼的綠色食品溯源系統(tǒng)的設(shè)計與實現(xiàn)[J].制造業(yè)自動化,2013,35(16):144-146.
[3] 鄭夢靜,何好好,谷甜甜.基于二維碼技術(shù)的醫(yī)療儀器設(shè)備管理[J].中醫(yī)藥管理雜志,2020,28(14):51-52.
[4] 羅雁雁.草料二維碼在新生兒科重癥監(jiān)護(hù)室貴重儀器管理中的應(yīng)用[J].當(dāng)代護(hù)士(上旬刊),2020(5):174-175.
[5] 管小衛(wèi).基于Python的二維碼生成與識別[J].科學(xué)技術(shù)與創(chuàng)新,2020(25):99-100.
[6] 陳元枝,鄧艷.基于Zxing的彩色QR碼的生成與識別方法[J].桂林電子科技大學(xué)學(xué)報,2016,36(4):333-336.
[7] 官網(wǎng)介紹.ZXing項目[EB/OL].[2020-08-20].https://github.com/zxing.
【通聯(lián)編輯:謝媛媛】