一种基于NFC的高速公路ETC卡查询与充值方法与流程

文档序号:17092957发布日期:2019-03-13 23:38阅读:1972来源:国知局
一种基于NFC的高速公路ETC卡查询与充值方法与流程
本发明一种基于nfc的高速公路etc卡查询与充值方法,融合智能手机近场通信技术和高速公路收费系统领域,特别是涉及利用nfc(nearfieldcommunication,近场通信)技术和iso14443通讯规范与高速公路etc卡进行数据交互,实现对高速公路etc卡信息(用户号、姓名、身份证、余额和通行交易记录)查询和预存费用的写入。
背景技术
:近年来,android版智能手机普通配备了nfc芯片,基于nfc的应用雨后春笋般的涌现,可以对非接触卡进行快速读取和写入,应用比较普通的是公交卡、地铁卡、智汇卡等,实现了本地化读取和写入数据业务。支持高速公路不停车缴费的etc卡在高速公路全面推广使用,大大缩短了收费站通行时间,提高了每笔通行的效率,极大程度减小了由于人工收费而排队拥堵现象的发生。然而,高速公路不停车etc卡的读写需要通过专门的obu设备,插入obu设备后方可查询卡内余额,用户无法知道各收费站通行历史记录;当用户etc卡内金额用完,需要驱车去固定营业网点排队充值,造成用户的诸多不便。技术实现要素:本发明的目的是针对上述查询和充值不便之处,提供一种基于nfc的高速公路etc卡查询与充值方法,该方法是一种通过智能手机即可实现对高速公路不停车etc卡的查询和充值的方法,大大提高工作效率,节约用户成本和时间,同时提供基于apdu智能解析响应帧与重组命令帧算法,提高了程序灵活程度,智能判断,并智能地请求下一步数据,避免静态代码的冗余,提高了发送和响应效率,提升了卡片接触手机nfc。本发明是采取以下技术方案实现:一种基于nfc的高速公路etc卡查询与充值方法,包括如下步骤:1)环境配置和参数设置;1-1)配置android环境参数;在androidetcapp程序根目录下的配置文件androidmanifest.xml进行硬件访问权限设置,即许可程序获取nfc硬件的访问权限;1-2)配置对etc卡的过滤;在步骤1-1)所述的配置文件androidmanifest.xml中的activity标签下设置的intent过滤声明;通过设定该配置文件androidmanifest.xml中的tech_discoveredintent信息,过滤忽略其他类型的intent;1-3)配置识别etc卡的过滤器文件在xml目录下的nfc_tech_filter.xml中定义筛选etc卡支持模式,当etc卡靠近手机nfc,程序就可识别该标卡;其中的tech-list标签定义了android.nfc.tech.isodep,说明当接触到符合isodep标准的卡,android程序的主界面就会响应,所述etc卡符合isodep标准。2)通过识别指令进行基于nfc的高速公路etc卡查询;2-1)识别高速公路etc卡,进入主目录;发送识别指令的方式为通过发送select指令,封装dfi_mf(十六进制0x3f00,两字节)或dfn_pse(字符串“1pay.sys.ddf01”)内容;若etc卡返回0x9000,表示识别etc卡,并进入主目录;2-2)读取持卡人基本数据文件所述基本数据文件中包括用户名和身份证号码;当androidetcapp程序发送指令etctag.readbinary(十六进制0x16,一字节),以0x9000结尾,则成功返回etc卡的姓名和身份证号;androidetcapp程序通过nfc向etc卡发送指令etctag.readbinary(十六进制0x15,一字节),读取长三角地域高速公路etc卡片基本数据文件;2-3)选择主应用区mainapplication;androidetcapp程序发送指令mainapplicationid(十六进制0x1001,两字节),etc卡返回字节以0x9000结尾,表示成功进入主应用区,获取得到最主要应用名;2-4)读取卡内余额;androidetcapp程序通过手机的nfc向etc卡发送余额查询指令,即etctag.getbalance()方法,etc卡则返回卡内余额;2-5)读取卡发行基本信息(十六进制0x15,一字节);2-6)读取复合消费专用文件;androidetcapp程序通过nfc向etc卡发送指令etctag.readbinary(十六进制0x19,一字节),返回成功;2-7)进行pin码的权限验证在读取通行记录前,对etc卡进行pinverify指令验证,如果三次不成功则会锁死该etc卡片,变为废卡。2-8)读取高速公路通行与交易记录通过步骤2-7)进行权限验证成功后,继续发送终端交易记录文件指令etctag.readrecord(0x18,1..50),其中0x18为标识号,1~50为记录号;发送记录读取指令后,返回成功码,读取到的数据循环存放,循环覆盖,记录长度为23字节,50条交易记录。tag分发系统(即androidnfc标签分发系统)定义了3种intent,优先级从高到低排列为ndef_discovered、tech_discovered、tag_discovered,步骤1-2)中只配置tech_discoveredintent信息,其他类型的intent就被过滤忽略。步骤2-5)中卡发行基本信息包括发卡方标识、卡片类型、卡片网络编号、卡片内部编号、启用时间、到期时间、车牌号码、用户类型和车牌颜色数据;卡发行基本信息文件格式定义见《长三角etc系统cpu卡、esam结构v4.0》。步骤2-6)中,etc卡内的数据内容格式为:入口收费路网号、入口收费站号、入口收费车道号、入口时间、车型、入出口状态、标识站、收费员工号、入口班次、车牌号码信息。步骤2-8)中,数据解析规则如下:交易序列号为2字节;透支限额为3字节;交易金额为4字节;交易类型标识为1字节;终端机编号为6字节;交易时间为7字节。3)高速公路etc卡充值用户通过智能终端进行实名制登录,交易中心验证该登录请求,合法则成功,否则无法进入终端充值程序,完整的网上充值交易包括余额查询、在线支付、交易记录中心保存、写入卡片四个步骤。3-1)etc卡内余额查询androidetcapp程序通过nfc向etc卡发送指令etctag.getbalance,etc卡则返回卡内余额;3-2)在线支付用户通过智能终端填入相关充值金额,androidetcapp程序检查是否已经绑定第三方支付系统(如绑定银行卡或支付宝等);若未绑定则跳转到绑定界面;若已经绑定则调到支付操作,支付与扣款过程等一系列操作均由第三方支付系统完成,支付成功后继续下一步;3-3)交易记录保存支付成功后,将购买信息与用户信息保存到etc卡交易中心,至此,etc交易管理中心指示终端手机进行写卡;3-4)金额写入到etc卡首先将查询到的余额加上新支付数值得到总金额,以约定的规则转换成十六进制,高位在前、低位在后;通过中心秘钥验证接口在线获得etc写卡pin和权限码,androidetcapp程序使用该pin码进行写操作验证,写入成功后得到成功响应码。上述充值方法把在线支付、交易记录中心保存、写入卡片三个步骤打包成一个事务处理,交易更加安全,每个步骤均有操作记录,任何失败,均能从失败处重新发起。本发明所述的androidetcapp手机应用程序(下文简称“androidetcapp”)是etc卡业务功能的实现应用程序,具有如下基本功能:1)用户注册和登录;2)进行身份识别;3)etc卡信息查询;进行持卡人信息识别;开卡基本信息查询;卡内余额查询;历史通行查询;历史消费查询;4)通行费用充值;5)系统配置。本发明通过具有nfc的智能手机(android4.0以上版本)对非接触式高速公路etc卡读取和写入的一种方法,节省用户采购专门设备读写etc片的费用,节省用户专门去etc充值点的排队等待时间。当非接触式高速公路etc卡接触到智能手机nfc,自动触发识别卡片过滤filter接口,通过app程序发送select指令发送dfi_mf(0x3f,0x00)或dfn_pse(1pay.sys.ddf01)命令,智能识别高速公路etc卡。本发明探索出智能解析iso14443-4、isorep通讯协议,发送指令maid(mainapplicationid,0x1001),进入到主目录,可根据卡片的响应帧,智能重新组织命令与卡片通讯,获取更多正确的数据。本发明通过特有的方法和和流程,以较高的速度和稳定性读取etc卡片主目录下的各类文件,诸与稳定如车牌、身份证、人名和和余额及高速公路通行交易记录,方便用户查询。并结合高速公路etc充值流程,提出通过手机nfc和互联网对高速公路etc进行充值,不再依赖特定充值设备和网点。由此,本发明将智能手机nfc用到高速公路etc卡,提供一种快速实现对高速公路etc卡读写,解决上述不足和不便。附图说明以下将结合附图对本发明作进一步说明:图1是etc卡数据定义目录结构图;图2是本发明的基于nfc的高速公路etc卡内信息查询的流程图;图3为基于apdu智能解析响应帧与重组命令帧逻辑流程图;图4是本发明的基于nfc和互联网向高速公路etc卡充值时序图;图5是本发明中终端交易记录文件存放顺序示意图;图6是本发明基于nfc高速公路androidetcapp查询与充值界面示例图。具体实施方式在结合附图作出说明之前,对本发明中出现的名词作出解释。nfc:近场通信又称近距离无线通信,是一种短距离的高频无线通信技术,允许电子设备之间进行非接触式点对点数据传输,交换数据。这个技术由免接触式射频识别(rfid)演变而来,由飞利浦和索尼共同研制开发,其基础是rfid及互连技术。近场通信是一种短距高频的无线电技术,在13.56mhz频率运行于20厘米距离内。其传输速度有106kbit/秒、212kbit/秒或者424kbit/秒三种。近场通信业务结合了近场通信技术和移动通信技术,实现了电子支付、身份认证、票务、数据交换、防伪、广告等多种功能,是移动通信领域的一种新型业务。近场通信业务改变了用户使用移动电话的方式,使用户的消费行为逐步走向电子化,建立了一种新型的用户消费和业务模式。etc:electronictollcollection(etc)不停车收费系统是目前世界上最先进的路桥收费方式。通过安装在车辆挡风玻璃上的车载电子标签与在收费站etc车道上的微波天线之间的微波专用短程通讯,利用计算机联网技术与银行进行后台结算处理,从而达到车辆通过路桥收费站不需停车而能交纳路桥费的目的。etc卡是高速公路不停车采用的是typeb,高速公路非现金支付卡属于双界面的cpu卡,采用iso14443-4协议通讯。etc用户卡在发行后文件结构定义完成,由专门etc发行中心定制初始化。etc卡数据定义目录结构见图1。高速公路etc卡的信息查询和写入需遵循一定的指令请求顺序,(1)用select指令进入卡的根目录,成功后可获取卡的基本信息,包括持卡用户名和身份证等信息。(2)用select命令进入主要应用区,成功后可读取卡内余额、卡发行基本信息、符合消费文件等。(3)通过pin码验证后,可读取卡内通行信息记录,共50条,循环存放。基于nfc的高速公路etc卡查询与充值方法实现的基础是进行环境配置和参数设置,主要步骤如下:1-1)配置android环境参数;在androidetcapp程序根目录下的配置文件androidmanifest.xml进行硬件访问权限设置,即许可程序获取nfc硬件的访问权限,如下:<uses-permissionandroid:name="android.permission.nfc"/>1-2)配置对etc卡的过滤;在配置文件androidmanifest.xml的在activity标签下设置的intent过滤声明,如下:<intent-filter><actionandroid:name="android.nfc.action.tech_discovered"/><actionandroid:name="android.nfc.action.tag_discovered"/></intent-filter><meta-dataandroid:name="android.nfc.action.tech_discovered"android:resource="@xml/nfc_tech_filter"/>1-3)配置识别etc卡的过滤器文件在xml/nfc_tech_filter.xml中定义筛选etc卡支持模式,当etc卡靠近手机nfc,程序就可识别该标卡,如下:<tech-list><tech>android.nfc.tech.isodep</tech></tech-list>tech-list标签定义了android.nfc.tech.isodep,说明当接触到符合isodep标准的卡,android程序的主界面就会响应,etc卡是符合isodep标准;通过设定该androidmanifest.xml文件中的tech_discoveredintent信息,过滤忽略其他类型的intent;tag分发系统定义了3种intent,优先级从高到低排列为ndef_discovered、tech_discovered、tag_discovered,步骤1-2)中只配置tech_discoveredintent信息,其他类型的intent就被过滤忽略。如图2所示,为本发明进行基于nfc的高速公路etc卡查询信息的流程图。下面结合附图举例说明通过识别指令进行基于nfc的高速公路etc卡查询过程:2-1)识别高速公路etc卡,进入主目录;发送识别指令的方式为通过发送select指令,封装dfi_mf(十六进制0x3f00两个字节)或dfn_pse(字符串“1pay.sys.ddf01”)内容;若etc卡返回0x9000,表示识别etc卡,并进入主目录。dfi_mf指令:0x00a40000023f0000dfn_pse指令:0x6f15840e315041592e5359532e4444463031a5038801019000。2-2)读取持卡人基本数据文件androidetcapp程序发送指令etctag.readbinary(0x16),以0x9000结尾,则成功返回etc卡的姓名和身份证号;androidetcapp程序通过nfc向etc卡发送指令etctag.readbinary(0x15),读取长三角地域高速公路etc卡片基本数据文件,如下:读取基本持卡信息指令:00b0960000返回:0000d6ecc5f4b7c900000000000000000000000000003332313131393139373231323331373031310000000000000000000000000000009000数据对应关系如下表:2-3)选择主应用区mainapplication;androidetcapp程序发送指令mainapplicationid(十六进制0x1001,两字节),etc卡返回字节以0x9000结尾,表示成功进入主应用区,如:指令:0x00a4000002100100返回:0x6f0c840a5041592e4554432e4a539000获取得到最主要应用名:“pay.etc.js”。2-4)读取卡内余额;androidetcapp程序通过nfc向etc卡发送指令etctag.getbalance,etc卡则返回卡内余额;指令的格式为:0x805c000204;指令的格式为:0x0000035e9000;即8.62元。2-5)读取卡发行基本信息(十六进制0x15,一字节);指令:00b0950000返回:bdadcbd5200100011611200117022200000131072017032920270328cbd5413356583038000000000000009000解析如下:发卡方标识:bdadcbd520010001;通过编码转换成中文字符,即:江苏200100001。卡片类型:16;卡片版本号:10;卡片网络编号:2001;卡片内部编号:1303220000005825启用时间:20080101;即,2008年1月1日到期时间:20501231;即,2050年12月31日车牌号码:cbd541585731383100000000,通过编码转换中文字符,即:苏axw181;用户类型:00,级普通用户;车牌颜色:0000(0–蓝色,1–黄色,2–黑色,3–白色,),即蓝牌。2-6)读取复合消费专用文件;androidetcapp程序通过nfc向etc卡发送指令etctag.readbinary(0x19),返回成功,etc卡内的数据内容格式为:入口收费路网号、入口收费站号、入口收费车道号、入口时间、车型、入出口状态、标识站、收费员工号、入口班次、车牌号码信息。2-7)进行pin码的权限验证在读取通行记录前,etc卡需要进行pinverify指令验证;验证方法为,etctag.verify(0x12,0x34,0x56),pin验证码一般为3字节十六进制,返回0x9000表示成功;三次不成功则会锁定卡片。指令:0020000003123456(对应的pin验证码“123456”)。2-8)读取高速公路通行与交易记录通过步骤2-7)进行权限验证成功后,继续发送终端交易记录文件指令etctag.readrecord(0x18,1..50),其中0x18为标识号,1~50为记录号,指令如下:记录读取指令:00b201c400成功返回:00e9000000000000000901320001ad00201809262027119000数据循环存放,循环覆盖,见图5,存储空间为1150bytes,每次存档的记录字节长度为23字节,50条交易记录。数据解析规则如下:交易序列号(2bytes):00c2透支限额(3bytes):000000交易金额(4bytes):00000000交易类型标识(1byte):09(圈存或消费)终端机编号(6bytes):01320003e423交易时间(7bytes):20180919111546,即2018-09-1911:15:46。图4所示为高速公路etc卡的充值时序图。本发明使用户足不出户就能用智能手机中的app实现对etc卡的充值。用户通过智能终端进行实名制登录,交易中心验证该登录请求,合法则成功,否则无法进入终端充值程序,完整的网上充值交易包括余额查询、在线支付、交易记录中心保存、写入卡片三个步骤。3-1)etc卡内余额查询androidetcapp程序通过nfc向etc卡发送指令etctag.getbalance,etc卡则返回卡内余额。3-2)在线支付填入相关充值金额(1000元),程序检查是否已经绑定第三方支付系统(绑定银行卡或支付宝等)。未绑定则跳转到绑定界面,已经绑定则调到支付操作,支付与扣款过程等一系列操作均有第三方支付系统完成,成功支付,成功后继续下一步。3-3)交易记录保存支付成功后,将购买信息与用户信息保存到etc卡交易中心,至此,etc交易管理中心指示终端手机进行写卡过程。3-4)金额写入到etc卡首先将查询到的余额加上新支付数值得到总金额,以一定规则转换成十六进制,高位在前、地位在后,以1001.00元为例,数据格式为0x0003e800。通过中心秘钥验证接口在线获得etc写卡pin和权限码,androidetcapp程序使用该pin码进行写操作验证。androidetcapp程序通过nfc向etc卡写钱包0002标签写入金额,如下:写金额指令:0x00da0200040003e900;响应:0x9000,表示成功。该方法在线支付、交易记录中心保存、写入卡片三个步骤打包成一个事务处理,交易更加安全,每个步骤均有操作记录,任何失败,均能从失败处重新发起。图3所示,为基于apdu智能解析响应帧与重组命令帧逻辑流程图。整个过程如下:请求写卡金额的许可,etc交易管理中心根据请求的数据进行验证,返回带有时间效率并加密过的圈存子密钥dlk,终端软件根据注册时分配的私钥进行解密得到写卡圈存子密钥dlk,通过该圈存子密钥dlk进行认证通过后可对卡片进行充值,返回sw1sw2(9000)状态成功。图6展示了基于nfc高速公路etc云充值界面示意图。下面对涉及的基本的通信协议作出说明。apdu的内容(代码以及对应的名称长度和描述)如下表1所示:表1对应的apdu命令格式如下:(1)情形1:(2)情形2:(3)情形3:(4)情形4:在上述命令格式中,cla表示指令类别;ins表示指令类型的指令码;p1p2表示指令参数;lc表示数据data长度;data表示数据域或应答数据域;le表示要求返回数据长度,其中,le为00表示返回卡中最大数据长度。在命令格式中,返回格式如下表2所示:表2代码名称长度描述数据字段数据变量=lr在响应的数据字段中收到的字节串sw1状态字节11命令处理状态sw2状态字节21命令处理受限字符sw1和sw2的f定义分为两大类,包括处理完成和处理放弃;处理完成分正常处理和报警处理,正常处理以0x9000和0x61xx为结尾标识;报警处理以0x6200和0x6300结尾标识;处理放弃分执行差错和检验差错两大类,执行差错以0x64xx和0x65xx结尾标识,0x67xx~0x6fxx均为检验差错,xx为具体错误信息。本发明与etc卡通行协议采用的iso7816-4通信协议,见上述相关apdu的内容规范,使用的apdu结构为响应apdu,r-apdu(responseapdu)。发送命令和响应命令相对复杂,且灵活多变,以静态硬代码的方式无法遍历所有路径,非常不经济,本发明提供一种根据响应命令中关键字自动解析重置请求命令的方法,不仅提高效率和速度,还能自动穷尽所有可能,并自动将多个响应的数据封装成长数据。其算法逻辑见图3所示。本发明数据区的解析借助ber-tlv数据对象,见《iso/ifc8825规范》定义,一个ber-tlv数据对象包括2-3个连续数据域:(1)标签域(t)包括一个或多个连续字节。它定义一种类别、类型和一个数字。规范规定的数据对象的标签域用一个或二个字节编码。(2)长度域(l)包括一个或多个连续字节。它定义了接下来一个域的长度。规范规定的数据对象的长度用一个、或二个字节编码。(3)值域(v)定义数据对象的值。如果l=‘00’,则值域不存在。tlv数据对象属于以下两类之一:(1)值域包括支付交易交换的数据元的基本数据对象。(2)值域包括一个或多个基本或结构数据对象的结构数据对象。当前第1页12
当前第1页1 2 
网友询问留言 已有1条留言
  • 访客 来自[广西电信] 2020年05月02日 18:41
    一堆屁话
    0
1