背景
先说下背景,公司的厂内物流系统,通过自助制卡,获取一张IC卡,该卡关联运输任务信息。然后司机携带这张IC卡去园区内进行装卸货。装卸货系统通过IC卡读取器,读取卡号,然后调用物流系统的接口,获取运输任务信息,如要装什么产品,装多少,再执行装车任务(通过管道灌注液体)。
挑战
以这张卡作为媒介,实现了装卸车系统与物流系统的交互,本来运行流畅,但由于疫情的原因,大货车司机是重点人群,风险较高,为了减少接触,要求装卸货过程中司机不要下车,由工作人员代为刷卡,这样虽然一定程度上降低了风险,但客观上仍然存在接触的环节,即工作人员需要跟司机来传递卡片。
解决思路——二维码
为了降低风险,提出来免接触优化,想出来这么一种解决思路:将IC卡更换为二维码,在装卸车区域,直接通过二维码来传递数据。
该方案看上去很美好,但实际是受限的,即需要现场装车系统,能够识别二维码,不仅仅是涉及到软件的改造,还会涉及到硬件的改造,例如增加二维码读取的硬件设备,开发及部署程序,升级软件等,费用是一方面,最关键的是工期较长(现场有很多套不同年份实施的装车系统,早期设备与系统仅支持IC卡模式,不支持二维码的读取和处理)。
疫情形势严峻,该项目要求1个月内完成改造,而装卸车系统厂家评估改造硬件及升级需要3个月以上,因此二维码方式可作为一个未来的优化方案,近期则需要考虑一个临时过渡方案,即不做硬件系统升级和改造的情况下,如何来实现免接触?
其他解决思路
还有几个解决思路,但都存在一些限制和约束:
1.给现场配备制卡设备和应用,技术上不可行,主要在于物理IC卡卡号是唯一的,无法与进厂时制卡环节一致,需要软件改造进行,实现软关联,并影响到其他环节如门禁、过磅等。
2.装卸车现场配置几张物理卡,通过软件应用,根据车号定位运输任务,选取一张物理卡与之关联,技术上可行,但同样需要软件改造进行,并影响到其他环节如门禁、过磅等,同时,现场多张卡交替使用,容易发生混淆和混乱情况。
新思路——基于NFC技术模拟IC卡
经过讨论,想出来一种新的思路,主要依托NFC技术实现,即给现场装卸车区域的工作人员配置安卓平板,在该平板上部署一个APP应用,通过车牌,查询到运输任务,然后将该平板模拟为一张IC卡,供现场装卸车系统来读取。
探索过程
思路是有了,但技术实现这块遇到了重重问题,主要在于,没有了解NFC技术的人员,因此由我进行技术攻关。
首先了查阅了大量资料,发现大都讲的是如何进行NFC卡片的读写,这块在安卓开发的SDK包已经附带了,并测试可以正常运行,没有权限限制。
然后,如何将安卓平板模拟成一张IC卡,这块遇到了障碍,一方面,确实华为手机可以使用华为钱包的钥匙功能,创建一张空白卡,来复制小区门禁卡、员工卡等;另一方面,找不到API可用来干这件事。这两者看上去是矛盾的。
同时测试中发现,手机可以使用华为钱包的钥匙功能,创建空白卡速度非常慢,大概花费1分钟,会严重影响使用体验,并且同样不支持人为指定卡号。查看NFC的官方SDK,并未发现有创建虚拟卡的API,推测华为要么是覆写了NFC底层处理库,要么是自己又加了一层虚拟化来实现的,我们自己来实现类似功能或操作是不现实的。
通过阅读大量资料,深入了解NFC相关体系和运行机制,发现底层协议自身即约定了模拟卡号随机,未提供设置卡号的API函数,需通过进程注入(类黑客手段)或root操作系统后修改配置文件(影响机器维保)的非正常手段才能实现预期目的,弊端较多,不考虑采用该方案。
调整实现思路
这条路走不通了,需要再调整下思路:
查找拷贝卡的实现方案,测试第三方工具,发现Mifare Classic Tool工具可实现读取A卡卡号、写入B卡卡号功能。其中A卡为当前物流系统使用的M1卡,B卡为支持卡号区域反复可擦写的CUID卡,经测试,可拷贝物流系统的实体卡片卡号至测试卡片,测试通过。
综合限制与约束,最佳临时实现方案如下:
装卸货现场使用安卓平板运行自开发应用,根据车号定位任务,获取到制卡环节的物理卡号,然后调用NFC写卡功能,将卡号写入到CUID卡中,使用该卡刷装卸车系统,即现场使用平板上自开发的app实现制备临时卡的功能,对其他业务环节无影响。
此外,可以在操作上进一步优化,即可以将一张CUID卡粘到平板的NFC区域,对于用户来说,基本等同于我们最开始的设想,即将平板模拟成一张NFC卡来刷装卸车系统。
小知识:什么是IC卡?
IC卡,即集成电路卡,也叫智能卡、芯片卡等。它是将一个微电子芯片嵌入符合ISO 7816标准的卡基中,做成卡片形式。IC卡与读写器之间的通讯方式可以是接触式,也可以是非接触式。根据通讯接口把IC卡分成接触式IC卡、非接触式IC和双界面卡。
IC卡由于其固有的信息安全、便于携带、比较完善的标准化等优点,在身份认证、银行系统、公共交通、车场管理等领域得到了广泛的应用。
接触式IC卡:是通过IC卡芯片上的触点与读写设备的触点相接触进行数据的读写。接触式IC卡的外形与磁卡相似,只是IC卡芯片上布满了许多供外部电路接触的微凸点。它的读写过程相对简单,在使用时,将IC卡插入IC卡读写机的插槽中,通过接口电路与读写系统进行通信。此种方式可以支持相对复杂、安全性要求更高的应用,如金融交易等。
非接触式IC卡:又称射频卡,由IC芯片、感应天线组成,封装在一个标准的PVC卡片内,芯片及天线无任何外露部分。卡片在一定距离范围(通常为5—10mm)靠近读写器表面,通过无线电波的传递来完成数据的读写操作。非接触式IC卡读写方便、快捷,操作简单、通信速度快,支持多卡操作。可用于身份识别、公共交通、消费、门禁等多种应用。
总的来说,IC卡是一种功能强大、使用方便的智能卡,广泛应用于各个领域。