基于移动终端NFC的打卡程序设计与实现
2020-10-09李思辰张仕霞李子尧岳翔
李思辰 张仕霞 李子尧 岳翔
摘要:针对打卡可能出现作弊和缺陷以及移动终端NFC应用面较狭窄的问题,提出使用移动终端NFC模块来解决这些问题。普通的LBS定位打卡时,通过移动运营商的无线电通讯网络或者外部定位方式获取移动设备用户的位置信息,非常容易作弊,如虚拟定位、替人打卡等.因此,文章提出使用易安卓集成开发环境,通过调用手机的NFC模块,获取磁卡的数据,经RSA算法进行加解密后进行打卡。此方法的便携性、防作弊效果高于普通的打卡模式,可有效避免怠工、怠学等消极现象。
关键词:NFC;磁卡;易安卓;打卡
中图分类号:TP399
文献标识码:A
文章编号:1006-8228(2020)09-76-05
Design and implementation of attendance checking program using mobile terminal NFC module
Li Sichen1, Zhang Shixia1, Li 2iyao2, Yue Xiang3
(1. Tianfu college of SWUFE, Chengdu ,Sichuan 610041,China;2.Sichuan University;3. Chengdu Unirersity of Technology)
Abstract: Aiming at the problems of possible cheating and defects in attendance checking and fewer applications of NFC inmobile terminal, this paper proposes to use NFC module of mobile terminal to solve these problems. When use ordinary LBS(Location Based Services) attendance checking, which obtains the location information of mobile device users through the wirelesscommunication network of' mobile operators or external positioning methods, it is very easy to cheat, such as virtual positioningand/or checking in for someone else. etc. Therefore, this paper proposes that use E4A Integrated Development Environment, bycalling the NFC module of mobile phone to obtain the data of magnetic card. and then to make attendance checking afterencryption and decryption by RSA algorithm. The portability and anti cheating effect of this method are higher than that of theordinary attendance checking mode, which can effectively avoid the negative phenomena such as slow work and learning.
Key words: NFC; magnetic card; E4A; attendance checking
0引言
随着科技的发展,智能手机几乎都带有了NFC模块,但目前市面上的APP针对该模块提供的服务大多局限于门禁,公交卡模拟上。本次创新的目标设计实现通过移动终端NFC模块感应磁卡来进行打卡的APP,以解决目前打卡环境中容易出现的作弊问题,并填补应用市场中关于NFC模块APP的空缺。
1集成開发环境(IDE)介绍
本文采用易安卓(E4A)开发,易安卓整体采用中文界面、中文代码的编程模式,但其核心是JavaSE[2],此外还使用了由谷歌公司发行的安卓打包工具AAPT(Android Asset Packaging Tool).
采用易安卓开发出的程序在安卓平台运行,所打包的程序均为*.apk格式,在其他系统的手机或无模拟器的PC电脑上将无法运行。
2磁卡
磁卡(Magnetic card)可以用来存储一些代表个人身份的信息,磁卡可以被NFC模块所感应从而从磁卡标签中提取到所需要的相关信息。
本文中的程序实例共需要读取磁卡中两个信息,第一个为磁卡的ID信息,第二个是人为写入的信息。其中,ID在一般情况下是不允许修改的,第二个信息则要根据卡的种类来决定是否可被破解复制,磁卡的种类也直接影响了NFC打卡的反作弊的效率。
目前共有三种磁卡分别是Ml卡、ID卡、CPU卡。①M1卡即原卡,如日常生活中小区物业发放的门禁卡,其0扇区不可以被修改,但其他的扇区则允许被修改,安全性适中,性价比偏高,卡内只有一套算法,有被破解复制的风险,但也可作为NFC功能打卡的备选卡之一。②ID卡只存储ID,没有算法,安全性极低,非常容易被不法分子复制,不推荐使用。③CPU卡有自己的操作系统,卡内有两套算法用来保护数据安全,几乎无法被复制,安全性非常高,常用于银行卡中,但相对的这种卡成本较高。CPU卡是作为NFC功能打卡功能的首选卡。
3 NFC技术
NFC (Near Field Communication)即近场通讯技术[2],也可称为近距离通讯技术,该技术可以使得设备能够识别读取和模拟磁卡信息,现在常用于小区门禁卡、公交卡等生活用卡。
物联网IoT(The Internet of Things)技术最早于1995年比尔·盖茨在书《The Road Ahead》中提及。现在普遍接受的定义是:利用各种传感器和网络设备,实现将各种设备、物品接入互联网以获得实时的数据m-。
本文程序实例将会使用NFC技术里读卡器模式中的读卡和写卡两个功能,且是本程序的核心功能。该功能需要磁卡配合使用。目前,该技术在移动终端中仅能在安卓平台使用,苹果(IOS)系统由于系统限制,不开放NFC的接口以供调用。
NFC读卡器模式,可以读取两个磁卡信息,第一个信息为磁卡的ID,这个ID是磁卡出厂时,厂家设定好的一串数值,该数值通常不可篡改。另一个是磁卡带有扇区内所存放的数据,该数据可以被读取出来。本文程序实例提供了两个模式思路:一个是直接读取唯一的ID,获取相关用户信息,该方法的优点是快捷方便,产生的内存占用和对数据库的压力相对较小;另一个是不读取ID,转而读取磁卡内的数据,再将读取出来的信息进行解密,加密方法联网保存,防止本地篡改,解密后再从数据库渎取信息并返回,这样能够最大可能的避免因为磁卡量产而可能造成的ID重复的问题。
4适用范围
本文提出的NFC打卡方式推荐在以下环境使用:经常举办活动且需要对人员进行清点的环境、办公上班/开会打卡、其他人员相对较多但地点不固定的活动。
目前市场上存在和NFC打卡功能相似的打卡机[4],但是这些打卡机都需要安装在固定位置且需要长时间连接电源,且设备显得十分笨重,不适用于签到。本程序运行在安卓系统上,只要手机有电有网络即可打卡,便携性大幅度提高了。
同时目前还发现了市场上有效果同样或相似的二维码打卡[5],其优点是成本低廉,但是二维码打卡容易被篡改,安全性偏低,生成二维码需依托服务器来获取较多数值,会增加服务器压力。NFC所发放的磁卡是实物,篡改难度大,在一些活动中使用磁卡具有纪念意义。所以一般认为使用NFC打卡更优于二维码打卡。
该磁卡的使用仅需一名管理员配备一台带有NFC功能的安卓手机。如果参与人员多,可以多配备几名管理员,这样的配置无论是从现实人员管理还是服务器维护上都是成本低廉的配置。有效减少大量用户涌入服务器打卡而造成的服务器拥堵。
5设计思路
5.1功能需求分析
本文程序将以线下活动打卡为实例,为了简洁不冗杂,程序共有两个基础功能:打卡功能,二次确认。八个管理员功能:录入成员数据、修改绑定卡、将所有签到置为未签到、无卡签到、无卡二次确认签到、录入无磁卡数据、查询签到情况,补录照片,以及防挂机机制。
5.2磁卡感应流程
本文程序实例根据磁卡内数据而采取不同的读取方式。当读取磁卡标签时,如果存在写入的文本则均采用加密存储数据方式来对磁卡数据进行解析,否则采用直接获取磁卡ID的方式查询数据库对应数据。如图1所示。
采用加密存储数据方式中,所有解密均在服务器完成,不把相关解密密钥传回本地,尽可能的避免被
5.3加密方式
录入磁卡的数据均为数字,故可采用RSA算法对数据进行加密或解密处理。
RSA算法主要有以下几个步骤。
(1)选择p、q两个超级大的质数,初步选择1024位。
(2)令n=p*q。取φ(n)=(p-1)*(q-1)。计算与n互质的整数的个数。
(3)取e∈1
(4)令ed mod φ(n)=l,计算d,(n,d)作为私钥对。可用扩展欧几里的算法进行计算。
(5)销毁p、q。密文=明文^e mod n,明文=密文^dmod n。利用蒙哥马利方法进行计算,也叫反复平方法。
5.4打卡流程
如图2所示为本文程序实例的打卡流程,其中需要人工的只有刷卡和最后的人工确认。人工确认环节(校验活动参与者信息与照片)由活动管理员完成。需要注意的是,所提到的所谓黑卡,即复制卡,是不法分子通过非法手段制造出來的。程序通过数据库查验磁卡本身算法来判断是否黑卡,同时管理员也可人工核实身份,判断其是否违规参与,如果违规参与可将其拉黑处理,被拉黑的卡同样属于黑卡,会被程序拒绝打卡。
5.5权限设计
本文程序实例共有五种权限,权限不同使用功能会受到不同程度的限制,分别如下。
普通用户卡:一般普通的磁卡都是这个权限,允许打卡和二次确认打卡。
管理员卡,管理员卡能够使用除将所有签到置为未签到外所有的管理功能,权限较高,一般由活动管理员持有。
超级管理员卡,能够使用全部功能,权限最高,一般由活动最高管理员持有。
无卡用户:此权限提供给设备不具有NFC功能的用户使用,能够不需要刷卡就能录入成员数据。 拉黑卡:指因为非法操作被系统或管理员拉黑的的卡,所有功能禁止使用。
6程序实现
6.1界面设计
界面设计力求简洁,程序启动后主界面共有三个按钮,两个编辑框,以及一些用于美化或显示状态的组件。三个按钮组件中默认状态下只有两个可以操作,用以区分是首次打卡还是二次确认打卡。并附带了一个提供给管理员的按钮,普通用户权限下无法使用,需要活动管理员刷卡确认后才可使用。在两个编辑框组件中,第一个编辑框用于显示磁卡的ID,第二个编辑框用于显示渎卡后从数据库中获取到的数据(如参与人姓名,年龄等个人信息),另外程序界面还附加了增加程序整体美观的轮播图,并使用了安卓API中提供的沉浸模式(setSystemUiVisibility)使得程序整体的UI和手机操作系统的UI更加贴切。
6.2功能实现
6.2.1权限获取
安卓6.0之后版本,所有的安卓程序在执行一些敏感操作时都需要向系统申请权限,只有用户许可后才能继续,故所有安卓程序最好在启动前就将所需要的权限全部申请完毕,避免中途申请权限而影响打卡进度。在易安卓中,创建权限组件后,通过调用:权限操作I.申请全部权限(),即可申请本文程序实例中所需要的所有权限(存储、电话、相机),其中因为存储权限是必须的(用于保存打卡用户照片,更新APP等操作),所以必须确保程序拥有存储权限才能进入APP,故需再调用:权限操作I.检查权限(”android. permlssion.WRITE_EXTERNAL_STORAGE”)来判断是否拥有存储权限,如果没有则拒绝进入程序。
6.2.2 NFC功能
易安卓中,创建NFC组件对象后,通过调用NFCl.初始化(),并根据返回值来进行下一步操作:①设备不支持NFC功能;②设备未开启NFC功能;③初始化成功。如果返回值为l,则提示用户更换设备,如果返回值为2则提示用户打开NFC,如果返回值为3则提示NFC初始化成功。
初始化后,默认NFC组件对象就已经处于了读取模式,此时不能调用命令:NFCl.置读取模式(),如果强行调用会发生无法被捕获的异常导致程序崩溃。
NFC组件共提供了两个事件,分别是:NFCl.读取到信息,NFCl.读取到卡号。如果渎取到信息为空,则代表用户的未写卡使用的直接获取ID的方式来进行打卡。如果有内容,则将内容合并到SQL语句中执行查询,数据库进行解密核对操作,再根据数据库返回的记录集来判断是否打卡成功。
NFCl.置写入模式(“文本”),这个方法可以将当前NFC组件对象的模式改为写入模式,并将括号内的文本内容写入之后与手机NFC感应的磁卡内,当管理员录入数据时,需要调用此方法来进行写卡操作。
6.2.3录入功能
此功能由管理员操作。如图4所示,展示了渎取磁卡数据模式下录入功能的流程图,如果在直接读取唯一ID模式下,则不需要返回加密数据以及再次刷卡将数据写入磁卡内这两个步骤,判断重复ID则是基于磁卡的ID,若在读取磁卡数据模式下,则会基于磁卡内数据来进行判定。
6.2.4修改数据
本文程序实例一共提供了三项数据修改类功能,分别为:修改绑定卡、将所有签到置为未签到,补录照片。
(1)修改绑定卡:此功能在磁卡丢失、损坏等情况下,需要更换新磁卡,通过输入个人信息查询,成功查询到从数据库返回加密数据,再进行刷卡,将此加密信息写入磁卡内即可。
(2)将所有签到置为未签到:这项影响级别较高,仅权限为超级管理员使用,将数据库内已有的所有人的签到情况全部置为未签到,每次活动结束统计完数据后均可执行该操作重置。
(3)补录照片:在录入数据时,考虑到个人隐私问题,照片录入设定为可选项,即不录入照片也能使用打卡所有功能。若后期又需要录入照片可以使用该功能录入,同时此功能也可以修改照片。实现此功能需要使用上传组件。如图5。
6.2.5无卡功能
这个功能提供给设备不具有NFC功能的用户使用或者给没有带磁卡的用户打卡,能够不需要刷卡就能录入成员数据。若没有管理员磁卡则需要特殊的方法打开此功能和权限,具体方法可以根据实际情况自行设计。所有无卡功能均在打卡或登记时跳过了刷卡环节改为输入用户个人信息,此方法打卡速度比较缓慢不太推荐使用。此外通过本功能打卡的账号将会额外记录一项例外打卡,如图5右图信息框所示,该项数值可以成为考核的一项指标,过多次数进行无卡打卡可以将其拉黑处理。
6.2.6查询签到情况
该功能用于查询磁卡用户是否打卡,易安卓下执行SQL语句代码:MySQL直连1.查询记录(”users”,"name,sign","uid='"&uid&""').
6.2.7防挂机机制
此功能用于长时间不操作程序,程序会自行将界面锁定无法操作,并等待指纹校验,校验成功后才会解锁。在代码中仅需设置一个时钟和指纹组件,并在每个按钮前都增加一个刷新时钟周期的代码即可完成。
7结束语
本文提出了基于NFC技術的新式打卡理念并以程序实现,很大程度上解决了打卡时出现的冒领、虚拟定位等作弊现象。提出使用实体磁卡打卡的方式,其在纪念意义、实用性、便携性等方面会高于同为竞品的打卡机或二维码打卡。
在本文程序实例中所使用的连接数据库方法是易安卓提供的Mysql直连组件,通过该组件连接数据库会将数据库账号密码直接写入代码内,容易被反编译破解,存在安全隐患,在实际代码中,可考虑将账号密码存放在服务器内作为PHP中间件调用,能够在很大程度上降低数据库的安全隐患。
参考文献(References):
[1]刘班,基于LBS的学生课堂签到系统开发[J].信息通信,2019.10:96-98
[2]张峰,赵卫东,郑永果,仇丽青,结合MOOC和翻转课堂的JavaSE接口教学研究[J].计算机教育,2018.9:69-72
[3]龚娇,物联网在智慧城市的应用研究[J].现代交际,2019.22:63-64
[4]李展.会议签到方式的实践与创新[J].秘书之友,2016.5:21-23
[5]曾青青.基于微信小程序的二维码定位签到平台建设[J].现代信息科技,2019.3(11):17-18,21
[6]岳靖文,臧晓冬.基于NFC与蓝牙技术结合的研究及应用[A].《内蒙古通信》编辑部.《内蒙古通信》2012年第1-4期[C].内蒙古通信学会,2012:4
[7]韦雨轩,陈祥苗,尹浩翔,贾兴东,吴静.基于NFC的智能购物车设计[J].软件工程,2020.23(4):48-50
[8] Eva Brumercikova, BibianaBukova. Proposals for Usingthe NFC Technology in Regional Passenger Transportin the Slovak Republic,2020.10(1):238-244
[9]赵春鸿,张雷,智能卡与安全[J].信息安全与通信保密,2002.5:59-64
[10]曹智,基于SSM框架的企业人事管理考勤系统的设计与实现[D].电子科技大学,2019.
[11]韩晟,王锦伟,孟国强,贺建军,王正洪,基于磁卡的医院触摸屏查询系统的实现[J].中国医疗设备,2008.7:27-29
[12] Reza Fotohi, SomaWehFirooziBari. MehdiYusefi. SecuringWireless Sensor Networks Against Denial-of-SleepAttacks Using RSA Cryptography Algorithm and In-terlock Protocol[J]. International Journal of Communi-cation Systems,2020.33(4).
收稿日期:2020-05-08
作者简介:李思辰(2000-),男,四川内江人,本科在读,主要研究方向:软件开发。
通讯作者:张仕霞(1993-),女,四川眉山人,硕士研究生,教师,主要研究方向:机器学习、数字图像处理。