基于二维码识别技术的电子签到模块设计
2012-05-11李立峰
李立峰
0 引言
签到是由LBS(Location-Based Services)地理位置应用所带来的专有名词,是指用户通过智能的移动终端设备,借助移动运营商的定位技术,精确的获得自己的位置,并通过终端上的应用程序,把自己的位置信息发布出去。
LBS应用最早出现在国外,后来由国内的行业先驱引进国内,并且在过去的一年多时间里如雨后春笋般的在国内生根发芽,并很快就被城市里追逐潮流的年轻族群所追捧。但是另一方面,LBS应用因为其本身技术上的局限性,普遍存在签到地点位置不真实的情况,对商家的销售计划只有非常小的参考价值。为了解决签到地点位置不真实的问题,在会员管理系统中,引入二维码识别技术结合商户门店前端识别模块,对用户手机进行身份认证的模式来解决这个问题。
1 二维码技术及其原理
二维条码(two-dimensional barcode)是用某种特定的几何图形按一定规律,在二维方向上分布的不同色块相间的图形记录数据符号信息的一种技术方式;在技术原理和代码编制上来说,它利用了构成计算机内部逻辑基础的10比特流的概念,使用若干个与二进制相对应的几何形体来表示文字数值信息,通过图象输入设备或光电扫描设备自动识读,以实现信息自动处理,如图1所示:
图1 二维条码示意图
二维条码可以分为堆叠式/行排式二维条码和矩阵式二维条码。堆叠式/行排式二维条码形态上是由多行短截的一维条码堆砌而成;矩阵式二维条码(又称棋盘式二维条码)它是在一个矩形空间通过黑、白像素在矩阵中的不同分布进行编码。在矩阵相应元素位置上,用深色色块的出现表示二进制1,浅色色块的出现表示二进制的0,色块的排列组合确定了矩阵式二维条码所代表的意义。矩阵式二维条码是一种建立在计算机图像处理技术、组合编码原理等基础上的新型图形符号自动识读处理码制。在会员管理系统中使用矩阵式QR二维条码以表示更多信息和保持最大限度的保密性。
二维条码是一种高密度,高信息量的便携式数据文件,是实现实体证件卡片等较大容量信息存储自动保存,并且便于携带可被机器自动识别的一种理想手段。归纳二维条码的主要特点如下:
1)编码解码简单。二维条码符号容易制作,扫描操作也简单方便。
2)高密度编码,信息容量大。可容纳多达1850个大写字母或2710个数字或1108个字节,或500多个汉字,比普通条码信息容量约高几十倍。
3)编码范围广。该条码可以把图片、声音、文字、网址、指纹等各种信息进行数字化编码,然后用条码表示出来;可以表示多种语言文字;甚至可表示图像数据。
4)容错能力强,具有纠错功能。这使得二维条码因穿孔、污损等引起局部损坏时,照样可以正确得到识读,损毁面积达50%仍可恢复信息。在会员管理识读环境中,用户的手机需要展示二维条码,而用户手机的质量参差不齐就成为了一个要考虑的重要问题。二维条码的容错性能可以非常好的应用在会员管理中,手机屏幕质量和手机分辨率对二维条码的影响由于其天生的容错性被减少到最低。
5)译码可靠性高。键盘输入错误误码率为三百分之一,利用光学字符识别技术的误码率为万分之一,普通条码译码错误率百万分之二左右,而二维条码误码率不超过千万分之一。
6)可引入加密措施。保密性、防伪性好。
7)设备所需成本低,易制作,持久耐用。在会员管理系统中,使用了普通200w像素以上级别普通摄像头作为图像输入和采集设备,依然可以控制在识别速度要求内。
8)灵活实用,可配置性强。在实际项目中,二维码识别技术可以和多个其他外设组成一个统一的功能系统,完成更复杂的功能。
2 基于二维码识别技术的会员管理签到系统
会员管理系统是一套基于BS架构的移动互联网模式下的会员管理系统平台,在商户门店中拥有一整套会员交易流程及互动设计。签到功能是会员管理系统中一项重要功能,传统的签到流程如下:
1)消费者在手持设备中打开会员管理应用程序,按照指定的搜索条件或根据商户促销活动,搜索到喜欢的商户门店;
2)消费者点击进入门店查看门店详情;
3)消费者点击签到按钮进行“虚拟”签到,表示消费者已经来到此门店;
4)消费者可以选择分享到微博等多种方式来分发这样的消息。
在传统签到运作流程当中,由于签到地点不真实而会造成消费者可在任意时间任意地点打开应用程序对任意门店进行签到,将带来如下多种诟病:
1)这样的签到由于地点不真实,实际上对商家是没有任何意义的,并没有达到签到所应该拥有的属性:真实。签到作为商户验证消费者的一个过程,还是商家制定后续商业促销计划的重要材料之一,如果签到数据无效,那么商家据此所制定的一系列后续计划都将失效,最终将会造成商户资金的极大浪费,甚至对商户的生存都会造成深远的影响;
2)对消费者而言,可能由此会获得一些消费奖励,但由于会员管理是一个基于移动互联网的会员管理系统,消费者自己会员卡的真实消费记录都会真实保存下来,消费者本可以根据自己平时的消费习惯和真实消费行为,为自己指定合适的财务计划等信息;但由于不真实的签到地点记录,消,费历史记录将会发生扭曲,据此所制定的财务计划也会失效,另外由此产生的交易后服务信息无法得到有效的记录从而无法享受退换货等商家服务,对自己的会员身份也会造成相当的影响;
因此,本文提出使用二维码识别技术来真实记录消费者签到行为,当消费者真正的来到商户二维码识读器附近区域时才可真实签到,此信息将会真实记录进入商户和消费者的消费记录中,从而保证系统完整,商户和消费者双方都满意的效果,如图2所示:
图2 具体流程图
改进过的具体流程如下:
1)消费者进入真实门店,找到明显标示的会员管理签到机;
2)消费者打开移动设备,开启会员管理应用,打开二维码页面;
3)消费者将显示有二维码的手机向签到机识别孔展示,签到机将会自动识别二维码;
4)签到机将识别到的消费者唯一二维码信息向云端服务器请求签到;
5)云端服务器确认签到机标识及位置信息,消费者标识及位置信息,结合服务器时间记录此次签到,并将其数据移交给业务处理模块验证;
6)业务处理模块将会验证此商户已设置的奖励条件是否和此次签到上下文匹配,如匹配将会发放商户奖励。
2.1 二维条码的生成
当用户下载了会员管理应用并注册成为会员之后,此用户会被分配一个唯一标识二维码,此二维码即是此用户的用户ID号转化而来。签到过程仅需要标识二维码即可完成,如图3所示:
图3 二维条码生成示意图
如需更高权限的交易行为(如储值,交易等),由于唯一标识二维码的可复制性较强,将会需要提升二维码安全级别。本文给出一种较高安全级别的解决方案如下:
1)当用户仅需要较低安全等级操作时,仅需使用唯一标识二维码(如卡号66000123);
2)当用户需要较高安全等级操作时,需要点击同一页面上的申请授权码来即时向后端服务器获取可交易的长达1024字节的授权码,该授权码持续有效时间为自产生之时起2小时;
3)当用户在两小时内通过此授权码进行高级操作后,该授权码立即失效;
这种方式可以最大限度保障用户的安全,避免由于唯一标识二维码的泄露而引起的伪交易行为。
这种方式的安全性依赖于加密后的密码强度,对强度的算法如下:后端服务器收到申请授权码请求时,根据消费者的登录令牌,当前服务器时间,当日RSA公开密钥,当日RSA服务器私钥,过期时间等信息构建一串长达1024字节的加密码,作为此次交易的唯一验证码发回给客户端,客户端需要据此产生一个QR阵列码由商户门店识读器识别。门店识读器将会连同交易金额,积分使用额度,储值使用额度等信息一起提交给服务器进行验证。服务器将会首先检测此交易验证码是否仍然有效,如果有效才会提交此交易到数据库,并通知相应的业务模块。
2.2 通过BS架构的网页来识读二维码
如图4所示:
图4 二维码的识读
通过网页方式来识读二维码有很多优势,最重要的就是跨平台性。目前市场上主流的二维码识读器都需要依赖于特定的操作系统,并且需要向操作系统写入不同的驱动才可以正常识读二维码,而且大多数识读器默认会写入系统剪贴板,这就会造成一些其他读写系统剪贴板的应用程序失效或成为某种干扰,对识别率造成不小的影响。本文也介绍了一种通过网页来识读二维码的方法:
出于对速度,可移植性及安全性的考虑,将摄像头模块放入了flash的SWF文件中,flash会自动适配当前操作系统,本身的Camera模块会自动适配当前的主要摄像头设备,并在访问周期内进行严格的句柄控制,可以保证摄像头的访问;
另外将二维码识别模块库ZXing放入flash中,并不断对输入视频流进行处理和解码;
通过flash和网页JavaScript之间的ExternalInterface技术来绑定JS函数并为SWF文件所调用。每当解码结束后,网页代码将得到通知并可以得知是否成功解码。如果解码成功还将返回解码后的字串。
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网页端的核心代码如下:
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);
}
}
});
}
2.3 会员管理系统中签到模块验证
使用这套二维条码生成与识读方案后,会员管理系统的二维码识读速度可以控制在0.3秒以内,加上一个较为稳定的网络环境,网页读取到正确的二维码背后的用户信息速度可以控制在0.5秒左右。这样可以最大限度防止用户滞留在签到机旁,可以在单位时间服务更多用户,还可以显著增加商户的客流量及用户满意度。
另外由于这套系统本身就是建立在网页BS架构基础之上,因此跨平台性也表现得非常好,甚至在装有flash播放器的android和iPad平板电脑上依然有不错的表现。
因为采用了申请验证码的方式处理较高安全等级二维码识别及服务器验证,这套系统的安全等级非常高,而且可以在尽量不影响用户操作和体验的基础上进行高安全等级的交易。
3 结论
二维条码是迄今为止最经济实用的一种自动识别技术,在一维条码基础上发展起来的二维条码,在我国还处于研究和试点阶段,与国外还有相当大的水平差距。二维条码在接下来相当长的一段时间内,都是我国消费交易环节中的一种强有力的验证方案。它的出现大大改变了传统的交易行为模式以及新近出现的签到模式,增加了商业环节中的流通及沟通,扩大了商家的品牌影响和消费者的消费体验,为移动互联网中的现代化商业环境注入了新的活力,二维码技术在签到模式中的应用是签到模式发展的必然过程。
[1]中国物品编码中心.“QR Code二维码技术与应用”[K]2002.1.
[2]中国物品编码中心.“二维码技术与应用”[K]2007.7.
[3]谢金龙,王伟.“条码技术及应用”[K]2009.06
[4]庞明.“物联网条码技术与射频识别技术”[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