李立峰
簽到是由LBS(Location-Based Services)地理位置應(yīng)用所帶來的專有名詞,是指用戶通過智能的移動終端設(shè)備,借助移動運(yùn)營商的定位技術(shù),精確的獲得自己的位置,并通過終端上的應(yīng)用程序,把自己的位置信息發(fā)布出去。
LBS應(yīng)用最早出現(xiàn)在國外,后來由國內(nèi)的行業(yè)先驅(qū)引進(jìn)國內(nèi),并且在過去的一年多時(shí)間里如雨后春筍般的在國內(nèi)生根發(fā)芽,并很快就被城市里追逐潮流的年輕族群所追捧。但是另一方面,LBS應(yīng)用因?yàn)槠浔旧砑夹g(shù)上的局限性,普遍存在簽到地點(diǎn)位置不真實(shí)的情況,對商家的銷售計(jì)劃只有非常小的參考價(jià)值。為了解決簽到地點(diǎn)位置不真實(shí)的問題,在會員管理系統(tǒng)中,引入二維碼識別技術(shù)結(jié)合商戶門店前端識別模塊,對用戶手機(jī)進(jìn)行身份認(rèn)證的模式來解決這個(gè)問題。
二維條碼(two-dimensional barcode)是用某種特定的幾何圖形按一定規(guī)律,在二維方向上分布的不同色塊相間的圖形記錄數(shù)據(jù)符號信息的一種技術(shù)方式;在技術(shù)原理和代碼編制上來說,它利用了構(gòu)成計(jì)算機(jī)內(nèi)部邏輯基礎(chǔ)的10比特流的概念,使用若干個(gè)與二進(jìn)制相對應(yīng)的幾何形體來表示文字?jǐn)?shù)值信息,通過圖象輸入設(shè)備或光電掃描設(shè)備自動識讀,以實(shí)現(xiàn)信息自動處理,如圖1所示:

圖1 二維條碼示意圖
二維條碼可以分為堆疊式/行排式二維條碼和矩陣式二維條碼。堆疊式/行排式二維條碼形態(tài)上是由多行短截的一維條碼堆砌而成;矩陣式二維條碼(又稱棋盤式二維條碼)它是在一個(gè)矩形空間通過黑、白像素在矩陣中的不同分布進(jìn)行編碼。在矩陣相應(yīng)元素位置上,用深色色塊的出現(xiàn)表示二進(jìn)制1,淺色色塊的出現(xiàn)表示二進(jìn)制的0,色塊的排列組合確定了矩陣式二維條碼所代表的意義。矩陣式二維條碼是一種建立在計(jì)算機(jī)圖像處理技術(shù)、組合編碼原理等基礎(chǔ)上的新型圖形符號自動識讀處理碼制。在會員管理系統(tǒng)中使用矩陣式QR二維條碼以表示更多信息和保持最大限度的保密性。
二維條碼是一種高密度,高信息量的便攜式數(shù)據(jù)文件,是實(shí)現(xiàn)實(shí)體證件卡片等較大容量信息存儲自動保存,并且便于攜帶可被機(jī)器自動識別的一種理想手段。歸納二維條碼的主要特點(diǎn)如下:
1)編碼解碼簡單。二維條碼符號容易制作,掃描操作也簡單方便。
2)高密度編碼,信息容量大。可容納多達(dá)1850個(gè)大寫字母或2710個(gè)數(shù)字或1108個(gè)字節(jié),或500多個(gè)漢字,比普通條碼信息容量約高幾十倍。
3)編碼范圍廣。該條碼可以把圖片、聲音、文字、網(wǎng)址、指紋等各種信息進(jìn)行數(shù)字化編碼,然后用條碼表示出來;可以表示多種語言文字;甚至可表示圖像數(shù)據(jù)。
4)容錯(cuò)能力強(qiáng),具有糾錯(cuò)功能。這使得二維條碼因穿孔、污損等引起局部損壞時(shí),照樣可以正確得到識讀,損毀面積達(dá)50%仍可恢復(fù)信息。在會員管理識讀環(huán)境中,用戶的手機(jī)需要展示二維條碼,而用戶手機(jī)的質(zhì)量參差不齊就成為了一個(gè)要考慮的重要問題。二維條碼的容錯(cuò)性能可以非常好的應(yīng)用在會員管理中,手機(jī)屏幕質(zhì)量和手機(jī)分辨率對二維條碼的影響由于其天生的容錯(cuò)性被減少到最低。
5)譯碼可靠性高。鍵盤輸入錯(cuò)誤誤碼率為三百分之一,利用光學(xué)字符識別技術(shù)的誤碼率為萬分之一,普通條碼譯碼錯(cuò)誤率百萬分之二左右,而二維條碼誤碼率不超過千萬分之一。
6)可引入加密措施。保密性、防偽性好。
7)設(shè)備所需成本低,易制作,持久耐用。在會員管理系統(tǒng)中,使用了普通200w像素以上級別普通攝像頭作為圖像輸入和采集設(shè)備,依然可以控制在識別速度要求內(nèi)。
8)靈活實(shí)用,可配置性強(qiáng)。在實(shí)際項(xiàng)目中,二維碼識別技術(shù)可以和多個(gè)其他外設(shè)組成一個(gè)統(tǒng)一的功能系統(tǒng),完成更復(fù)雜的功能。
會員管理系統(tǒng)是一套基于BS架構(gòu)的移動互聯(lián)網(wǎng)模式下的會員管理系統(tǒng)平臺,在商戶門店中擁有一整套會員交易流程及互動設(shè)計(jì)。簽到功能是會員管理系統(tǒng)中一項(xiàng)重要功能,傳統(tǒng)的簽到流程如下:
1)消費(fèi)者在手持設(shè)備中打開會員管理應(yīng)用程序,按照指定的搜索條件或根據(jù)商戶促銷活動,搜索到喜歡的商戶門店;
2)消費(fèi)者點(diǎn)擊進(jìn)入門店查看門店詳情;
3)消費(fèi)者點(diǎn)擊簽到按鈕進(jìn)行“虛擬”簽到,表示消費(fèi)者已經(jīng)來到此門店;
4)消費(fèi)者可以選擇分享到微博等多種方式來分發(fā)這樣的消息。
在傳統(tǒng)簽到運(yùn)作流程當(dāng)中,由于簽到地點(diǎn)不真實(shí)而會造成消費(fèi)者可在任意時(shí)間任意地點(diǎn)打開應(yīng)用程序?qū)θ我忾T店進(jìn)行簽到,將帶來如下多種詬病:
1)這樣的簽到由于地點(diǎn)不真實(shí),實(shí)際上對商家是沒有任何意義的,并沒有達(dá)到簽到所應(yīng)該擁有的屬性:真實(shí)。簽到作為商戶驗(yàn)證消費(fèi)者的一個(gè)過程,還是商家制定后續(xù)商業(yè)促銷計(jì)劃的重要材料之一,如果簽到數(shù)據(jù)無效,那么商家據(jù)此所制定的一系列后續(xù)計(jì)劃都將失效,最終將會造成商戶資金的極大浪費(fèi),甚至對商戶的生存都會造成深遠(yuǎn)的影響;
2)對消費(fèi)者而言,可能由此會獲得一些消費(fèi)獎勵,但由于會員管理是一個(gè)基于移動互聯(lián)網(wǎng)的會員管理系統(tǒng),消費(fèi)者自己會員卡的真實(shí)消費(fèi)記錄都會真實(shí)保存下來,消費(fèi)者本可以根據(jù)自己平時(shí)的消費(fèi)習(xí)慣和真實(shí)消費(fèi)行為,為自己指定合適的財(cái)務(wù)計(jì)劃等信息;但由于不真實(shí)的簽到地點(diǎn)記錄,消,費(fèi)歷史記錄將會發(fā)生扭曲,據(jù)此所制定的財(cái)務(wù)計(jì)劃也會失效,另外由此產(chǎn)生的交易后服務(wù)信息無法得到有效的記錄從而無法享受退換貨等商家服務(wù),對自己的會員身份也會造成相當(dāng)?shù)挠绊懀?/p>
因此,本文提出使用二維碼識別技術(shù)來真實(shí)記錄消費(fèi)者簽到行為,當(dāng)消費(fèi)者真正的來到商戶二維碼識讀器附近區(qū)域時(shí)才可真實(shí)簽到,此信息將會真實(shí)記錄進(jìn)入商戶和消費(fèi)者的消費(fèi)記錄中,從而保證系統(tǒng)完整,商戶和消費(fèi)者雙方都滿意的效果,如圖2所示:

圖2 具體流程圖
改進(jìn)過的具體流程如下:
1)消費(fèi)者進(jìn)入真實(shí)門店,找到明顯標(biāo)示的會員管理簽到機(jī);
2)消費(fèi)者打開移動設(shè)備,開啟會員管理應(yīng)用,打開二維碼頁面;
3)消費(fèi)者將顯示有二維碼的手機(jī)向簽到機(jī)識別孔展示,簽到機(jī)將會自動識別二維碼;
4)簽到機(jī)將識別到的消費(fèi)者唯一二維碼信息向云端服務(wù)器請求簽到;
5)云端服務(wù)器確認(rèn)簽到機(jī)標(biāo)識及位置信息,消費(fèi)者標(biāo)識及位置信息,結(jié)合服務(wù)器時(shí)間記錄此次簽到,并將其數(shù)據(jù)移交給業(yè)務(wù)處理模塊驗(yàn)證;
6)業(yè)務(wù)處理模塊將會驗(yàn)證此商戶已設(shè)置的獎勵條件是否和此次簽到上下文匹配,如匹配將會發(fā)放商戶獎勵。
當(dāng)用戶下載了會員管理應(yīng)用并注冊成為會員之后,此用戶會被分配一個(gè)唯一標(biāo)識二維碼,此二維碼即是此用戶的用戶ID號轉(zhuǎn)化而來。簽到過程僅需要標(biāo)識二維碼即可完成,如圖3所示:

圖3 二維條碼生成示意圖
如需更高權(quán)限的交易行為(如儲值,交易等),由于唯一標(biāo)識二維碼的可復(fù)制性較強(qiáng),將會需要提升二維碼安全級別。本文給出一種較高安全級別的解決方案如下:
1)當(dāng)用戶僅需要較低安全等級操作時(shí),僅需使用唯一標(biāo)識二維碼(如卡號66000123);
2)當(dāng)用戶需要較高安全等級操作時(shí),需要點(diǎn)擊同一頁面上的申請授權(quán)碼來即時(shí)向后端服務(wù)器獲取可交易的長達(dá)1024字節(jié)的授權(quán)碼,該授權(quán)碼持續(xù)有效時(shí)間為自產(chǎn)生之時(shí)起2小時(shí);
3)當(dāng)用戶在兩小時(shí)內(nèi)通過此授權(quán)碼進(jìn)行高級操作后,該授權(quán)碼立即失效;
這種方式可以最大限度保障用戶的安全,避免由于唯一標(biāo)識二維碼的泄露而引起的偽交易行為。
這種方式的安全性依賴于加密后的密碼強(qiáng)度,對強(qiáng)度的算法如下:后端服務(wù)器收到申請授權(quán)碼請求時(shí),根據(jù)消費(fèi)者的登錄令牌,當(dāng)前服務(wù)器時(shí)間,當(dāng)日RSA公開密鑰,當(dāng)日RSA服務(wù)器私鑰,過期時(shí)間等信息構(gòu)建一串長達(dá)1024字節(jié)的加密碼,作為此次交易的唯一驗(yàn)證碼發(fā)回給客戶端,客戶端需要據(jù)此產(chǎn)生一個(gè)QR陣列碼由商戶門店識讀器識別。門店識讀器將會連同交易金額,積分使用額度,儲值使用額度等信息一起提交給服務(wù)器進(jìn)行驗(yàn)證。服務(wù)器將會首先檢測此交易驗(yàn)證碼是否仍然有效,如果有效才會提交此交易到數(shù)據(jù)庫,并通知相應(yīng)的業(yè)務(wù)模塊。
如圖4所示:

圖4 二維碼的識讀
通過網(wǎng)頁方式來識讀二維碼有很多優(yōu)勢,最重要的就是跨平臺性。目前市場上主流的二維碼識讀器都需要依賴于特定的操作系統(tǒng),并且需要向操作系統(tǒng)寫入不同的驅(qū)動才可以正常識讀二維碼,而且大多數(shù)識讀器默認(rèn)會寫入系統(tǒng)剪貼板,這就會造成一些其他讀寫系統(tǒng)剪貼板的應(yīng)用程序失效或成為某種干擾,對識別率造成不小的影響。本文也介紹了一種通過網(wǎng)頁來識讀二維碼的方法:
出于對速度,可移植性及安全性的考慮,將攝像頭模塊放入了flash的SWF文件中,flash會自動適配當(dāng)前操作系統(tǒng),本身的Camera模塊會自動適配當(dāng)前的主要攝像頭設(shè)備,并在訪問周期內(nèi)進(jìn)行嚴(yán)格的句柄控制,可以保證攝像頭的訪問;
另外將二維碼識別模塊庫ZXing放入flash中,并不斷對輸入視頻流進(jìn)行處理和解碼;
通過flash和網(wǎng)頁JavaScript之間的ExternalInterface技術(shù)來綁定JS函數(shù)并為SWF文件所調(diào)用。每當(dāng)解碼結(jié)束后,網(wǎng)頁代碼將得到通知并可以得知是否成功解碼。如果解碼成功還將返回解碼后的字串。
Flash端的核心代碼如下:
public function decodeBitmapData(bmpd:BitmapData,width:int,height:int):void{
var lsource:BufferedImageLuminanceSource=new BufferedImageLuminanceSource(bmpd);
var bitmap:BinaryBitmap=new BinaryBitmap(new GlobalHistogramBinarizer(lsource));
var ht:HashTable=this.getAllHints();
var res:Result=myReader.decode(bitmap,ht);
if(res !=null){
//yes :parse the result
var parsedResult:ParsedResult=ResultParser.parseResult(res);
//get a formatted string and display it in our textarea
ExternalInterface.call("camera_success",parsedResult.getDisplayResult());
return;
}
else
ExternalInterface.call("camera_fail","");
}
o網(wǎng)頁端的核心代碼如下:
function camera_success(result){
if(currentCode=result||currentConsumerCode=result){
return;
}
currentCode=result;
CheckConsumer(result,function(scancode,data){
currentCode=null;
if(scancode=data.code){
CreateSign(data);
}
else//direct trade{
if(!isTrading){
CreateSign(data);
CreateTrade(scancode,data);
}
else if(result!=currentConsumerCode){
updateAuth(scancode);
}
}
});
}
使用這套二維條碼生成與識讀方案后,會員管理系統(tǒng)的二維碼識讀速度可以控制在0.3秒以內(nèi),加上一個(gè)較為穩(wěn)定的網(wǎng)絡(luò)環(huán)境,網(wǎng)頁讀取到正確的二維碼背后的用戶信息速度可以控制在0.5秒左右。這樣可以最大限度防止用戶滯留在簽到機(jī)旁,可以在單位時(shí)間服務(wù)更多用戶,還可以顯著增加商戶的客流量及用戶滿意度。
另外由于這套系統(tǒng)本身就是建立在網(wǎng)頁BS架構(gòu)基礎(chǔ)之上,因此跨平臺性也表現(xiàn)得非常好,甚至在裝有flash播放器的android和iPad平板電腦上依然有不錯(cuò)的表現(xiàn)。
因?yàn)椴捎昧松暾堯?yàn)證碼的方式處理較高安全等級二維碼識別及服務(wù)器驗(yàn)證,這套系統(tǒng)的安全等級非常高,而且可以在盡量不影響用戶操作和體驗(yàn)的基礎(chǔ)上進(jìn)行高安全等級的交易。
二維條碼是迄今為止最經(jīng)濟(jì)實(shí)用的一種自動識別技術(shù),在一維條碼基礎(chǔ)上發(fā)展起來的二維條碼,在我國還處于研究和試點(diǎn)階段,與國外還有相當(dāng)大的水平差距。二維條碼在接下來相當(dāng)長的一段時(shí)間內(nèi),都是我國消費(fèi)交易環(huán)節(jié)中的一種強(qiáng)有力的驗(yàn)證方案。它的出現(xiàn)大大改變了傳統(tǒng)的交易行為模式以及新近出現(xiàn)的簽到模式,增加了商業(yè)環(huán)節(jié)中的流通及溝通,擴(kuò)大了商家的品牌影響和消費(fèi)者的消費(fèi)體驗(yàn),為移動互聯(lián)網(wǎng)中的現(xiàn)代化商業(yè)環(huán)境注入了新的活力,二維碼技術(shù)在簽到模式中的應(yīng)用是簽到模式發(fā)展的必然過程。
[1]中國物品編碼中心.“QR Code二維碼技術(shù)與應(yīng)用”[K]2002.1.
[2]中國物品編碼中心.“二維碼技術(shù)與應(yīng)用”[K]2007.7.
[3]謝金龍,王偉.“條碼技術(shù)及應(yīng)用”[K]2009.06
[4]龐明.“物聯(lián)網(wǎng)條碼技術(shù)與射頻識別技術(shù)”[K]2011.05
[5]Denso-Wave.“QR Code features”2011.10
[6]Denso-Wave.“QR Code—About 2D Code”2011.10
[7]QR Code.com.“QR Code Standardization”2009.04
[8]zxing–A rough guide to standard encoding of information in barcodes.[M]“Barcode Contents”2009.02
[9]QR Droid.“Encrypted QR Codes”2011.09