背景:一个采用BS结构的产品,前端为运行在浏览器中的Siverlight和aspx页面。运行平台包括Windows平台(pc)、iOS平台(iPhone、iPad)、android平台(phone、pad)。业务逻辑中需要通过刷IC卡对用户进行认证。这里大概写一下与刷卡相关的内容。
先说说IC卡。卡片本身没什么可说的,有接触式的和非接触式的,在这个产品中使用的是非接触式IC卡,即RF卡。当然,使用哪种并不关键。使用IC卡必须有刷卡器。刷卡器从接口上分大概有USB和COM两种。但区别并不大。大部分USB刷卡器在连入系统后,仍然被识别成COM设备。一般厂商会提供接口协议和DLL用于访问刷卡器。对于pc平台,可以做代码直接调用DLL实现卡号读写。对于其它平台,比如单片机,需要使用接口协议来读写。
具体到前面提到的产品中,由于业务逻辑中需要通过获取卡号实现认证,因此,核心问题就是Web前端如何获取卡号。但web前端是无法直接获取卡号的(刷卡设备是本地设备)。
第一种情况:windows平台上。使用的是Siverlight前端,问题解决比较简单:直接做一个本地应用轮询刷卡器,获取卡号后,将卡号以击键形式发送给顶层窗口。在发送之前,可以对卡号进行处理,比如加分隔符之类的。使用过程中,当需要刷卡时,用户将光标定位在卡号输入框中,然后刷卡就行了。可以在Silverlight中加入客户端脚本对接收到的内容(卡号)进行处理。
第二种情况:android平台上。前端使用aspx页面(不能用Silverlight了)。由于android phone和pad都是移动设备,所以普通刷卡器不能用,而只能使用带有NFC功能的android phone和pad才行(即phone和pad自带刷卡器)。实现上采用的是输入法的方式。即,实现了一个可以通过NFC设备获取IC卡号的输入法,当用户需要刷卡认证时,先将焦点定位在卡号输入框中,然后激活输入法,并刷卡。输入法获取卡号后,将卡号转换为击键序列发送出去。
第三种情况:iOS平台上,使用aspx前端。但iPad、iPhone,即没有接口安装普通刷卡器也没有NFC设备,因此实现方法复杂一些。首先,要对COM刷卡器进行改装,为其安装COM-WiFi设备。这样,刷卡器就能和iPad进行数据交换了。在iPad上做一个驱动,通过WiFi网络按照刷卡器厂商的协议轮询刷卡器。剩下的事儿,就和前面两种情况差不多了。