華北電力大學(xué)控制與計(jì)算機(jī)工程學(xué)院 尹婷婷
多應(yīng)用消費(fèi)卡發(fā)卡充值系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)
華北電力大學(xué)控制與計(jì)算機(jī)工程學(xué)院 尹婷婷
本文選用智能CPU卡為消費(fèi)應(yīng)用載體,針對(duì)區(qū)域內(nèi)一卡多用的需求在其上建立多重消費(fèi)應(yīng)用文件,同時(shí)具有金額消費(fèi)和計(jì)次消費(fèi)的功能;并采用C#編程語(yǔ)言在PC機(jī)終端開(kāi)發(fā)出適用兩種消費(fèi)功能的發(fā)卡充值系統(tǒng)軟件,以滿足持卡消費(fèi)的需要。
CPU卡;消費(fèi);C#
隨著IC卡在日常生活中的廣泛應(yīng)用,人們對(duì)各種優(yōu)惠卡、充值消費(fèi)卡的繁冗越來(lái)越感到不方便,因此,針對(duì)居民在學(xué)校、廠區(qū)等集中生活區(qū)將超市消費(fèi)、停車計(jì)費(fèi)、計(jì)次消費(fèi)、優(yōu)惠卡等多種應(yīng)用統(tǒng)一到單一智能CPU卡上,以刷卡消費(fèi)為支付手段,完成多重功能的IC卡應(yīng)用的綜合。本系統(tǒng)將通過(guò)應(yīng)用面向?qū)ο笳Z(yǔ)言C#設(shè)計(jì)實(shí)現(xiàn)智能CPU卡的發(fā)卡和充值功能。
為滿足不同場(chǎng)合下持卡消費(fèi)應(yīng)用的整合需要,本系統(tǒng)首先對(duì)卡片文件結(jié)構(gòu)進(jìn)行規(guī)劃:在同一張CPU卡中建立相互獨(dú)立且具有良好安全性的應(yīng)用文件、錢包文件及密鑰文件,從而保證了多種應(yīng)用金額各自獨(dú)立的持卡消費(fèi)應(yīng)用。
其次,對(duì)發(fā)卡充值系統(tǒng)軟件的需求分析,得到系統(tǒng)的具體功能包括如下:為消費(fèi)用戶提供CPU卡的發(fā)放、建檔管理;保證日常正常使用CPU卡必須的充值繳費(fèi);以及特殊情況下CPU卡掛失、持卡賬戶的注銷等。
另外,為加強(qiáng)系統(tǒng)的安全,防止惡意操作及刪改數(shù)據(jù),保證數(shù)據(jù)安全;軟件自身管理功能還需要包括操作員權(quán)限管理及系統(tǒng)數(shù)據(jù)庫(kù)維護(hù)。
首先利用C#編程語(yǔ)言面向用戶的優(yōu)勢(shì)設(shè)計(jì)友好的人機(jī)交互界面,根據(jù)系統(tǒng)軟件的功能需求規(guī)劃功能窗口,并進(jìn)行具體的發(fā)卡、充值、充值記錄查詢、已經(jīng)系統(tǒng)管理功能的實(shí)現(xiàn)。
表1 個(gè)人信息文件數(shù)據(jù)內(nèi)容
表2 DF1-DF3下應(yīng)用交易文件數(shù)據(jù)內(nèi)容
表3 計(jì)次文件數(shù)據(jù)內(nèi)容
其次針對(duì)多應(yīng)用的特點(diǎn)設(shè)計(jì)功能完善的充值界面,以滿足對(duì)其中某一應(yīng)用充費(fèi)、充次的正確操作,同時(shí)建立完整詳細(xì)的數(shù)據(jù)存儲(chǔ)功能,以滿足對(duì)同一用戶的統(tǒng)一充值信息存儲(chǔ)、對(duì)不同用戶的同一應(yīng)用的充值信息存儲(chǔ)。
再次是對(duì)CPU卡讀卡器、數(shù)據(jù)庫(kù)服務(wù)器的硬件連接及調(diào)用功能的開(kāi)發(fā):采用串口輪詢的方式獲得讀卡器的連接,并通過(guò)讀卡器接口函數(shù)進(jìn)行功能應(yīng)用開(kāi)發(fā);在數(shù)據(jù)庫(kù)服務(wù)器中建立本系統(tǒng)需要的各個(gè)數(shù)據(jù)表,并規(guī)劃數(shù)據(jù)關(guān)聯(lián)性。
最后是軟件程序的功能模塊封裝,將讀卡器應(yīng)用、數(shù)據(jù)庫(kù)應(yīng)用、系統(tǒng)管理應(yīng)用作為獨(dú)立的模塊進(jìn)行程序封裝,以便在窗口程序中直接進(jìn)行調(diào)用。
不同于現(xiàn)在應(yīng)用廣泛的邏輯加密卡通過(guò)內(nèi)部集成電路對(duì)EEPROM的讀、擦、寫(xiě)操作提供密碼保護(hù),CPU卡帶有微處理器(CPU),其ROM中封裝有芯片操作系統(tǒng)(COS),為數(shù)據(jù)加密、解密提供快速的數(shù)學(xué)運(yùn)算。
較之普通的邏輯加密卡,CPU卡能夠在片內(nèi)操作系統(tǒng)(COS)的保護(hù)下自行建立需要的多級(jí)應(yīng)用文件結(jié)構(gòu),并可以在各級(jí)應(yīng)用文件中添加錢包文件存儲(chǔ)消費(fèi)金額,添加密鑰文件保障消費(fèi)安全;因此本系統(tǒng)選用CPU卡作為實(shí)現(xiàn)多應(yīng)用持卡消費(fèi)的媒介。
CPU卡的金融安全性由其卡中的微處理機(jī)和COS保障,每次消費(fèi)應(yīng)用在用戶和COS中需要進(jìn)行多次的相互密碼驗(yàn)證[1],可防止卡片的偽造威脅。CPU卡的應(yīng)用安全性其文件系統(tǒng)在各級(jí)分劃以及每一級(jí)應(yīng)用文件的相互區(qū)別成為本系統(tǒng)CPU卡文件結(jié)構(gòu)的獨(dú)特性,從而在一定程度上保障了卡片的使用安全。
此處以兩種金融消費(fèi)和一種計(jì)次消費(fèi)為例,設(shè)計(jì)了多應(yīng)用的CPU卡的文件系統(tǒng)結(jié)構(gòu):
圖1 文件結(jié)構(gòu)
圖2 系統(tǒng)數(shù)據(jù)E-R圖
CPU卡的文件類型包括MF根目錄、DF子目錄、EF基本文件,EF包括交易文件、記錄文件和安全文件,見(jiàn)圖1。
在定義了卡片的文件結(jié)構(gòu)之后,需要對(duì)文件的存儲(chǔ)內(nèi)容做約定,根據(jù)對(duì)應(yīng)消費(fèi)應(yīng)用的需要,規(guī)定各個(gè)文件的數(shù)據(jù)內(nèi)容、數(shù)據(jù)長(zhǎng)度和其他相關(guān)信息;在進(jìn)行消費(fèi)應(yīng)用時(shí),終端能夠按照約定的文件格式讀取消費(fèi)者信息并進(jìn)行消費(fèi)操作。下面以個(gè)人信息文件、典型應(yīng)用交易文件和計(jì)次文件為例,對(duì)其數(shù)據(jù)內(nèi)容和長(zhǎng)度作出概要性定義,如表1、表2、表3所示。
由于實(shí)際應(yīng)用中的CPU卡的文件結(jié)構(gòu)和文件數(shù)據(jù)內(nèi)容涉及金融安全,本文中對(duì)CPU卡的規(guī)劃作出了簡(jiǎn)化,僅作說(shuō)明性介紹。
Visual C#是微軟針對(duì).NET平臺(tái)設(shè)計(jì)的新的開(kāi)發(fā)語(yǔ)言,從C和C++派生而來(lái),其特點(diǎn)是簡(jiǎn)單、現(xiàn)代、面向?qū)ο蠛皖愋?;能夠高效完成桌面?yīng)用系統(tǒng)的開(kāi)發(fā)。VS2008是一套完整的開(kāi)發(fā)工具集,
在開(kāi)發(fā)讀卡器應(yīng)用時(shí),選用的CPU卡讀卡器因廠家為方便開(kāi)發(fā),已經(jīng)封裝了接口函數(shù)庫(kù),在應(yīng)用c#語(yǔ)言開(kāi)發(fā)時(shí),需要調(diào)用以C++編程語(yǔ)言編寫(xiě)的動(dòng)態(tài)鏈接庫(kù)(DLL,“Dynamic Link Library”)。
由于是非托管動(dòng)態(tài)鏈接庫(kù),調(diào)用時(shí)需要使用DllImport屬性,調(diào)用時(shí)以非托管動(dòng)態(tài)鏈接庫(kù)作為靜態(tài)入口點(diǎn)公開(kāi),并提供對(duì)從非托管DLL導(dǎo)出的函數(shù)進(jìn)行調(diào)用必需的信息。具體使用方法示例:
在調(diào)用CPU_init函數(shù)時(shí),應(yīng)用程序鏈接到R_Cpu.dll找到其中定義了的函數(shù)接口“cpu_init”,從而實(shí)現(xiàn)調(diào)用讀卡器封裝函數(shù)的功能。
4.3.1 讀卡器連接模塊
本系統(tǒng)選用的CPU卡讀卡器通過(guò)串口連接傳輸數(shù)據(jù),在發(fā)卡充值系統(tǒng)界面進(jìn)入時(shí)需要提供串口選擇和波特率設(shè)置功能。
基于對(duì)動(dòng)態(tài)鏈接庫(kù)的統(tǒng)一調(diào)用,也為方便管理程序,本系統(tǒng)將涉及到讀卡器連接、CPU卡數(shù)據(jù)讀取及操作的函數(shù)統(tǒng)一到自定義公共類庫(kù)中,并將常用功能程序封裝起來(lái),在窗口界面開(kāi)發(fā)時(shí)直接進(jìn)行調(diào)用。
需要封裝建立讀卡器的串口連接函數(shù),關(guān)閉串口連接函數(shù),CPU卡復(fù)位函數(shù)以及CPU卡數(shù)據(jù)讀取和存儲(chǔ)函數(shù);其中數(shù)據(jù)讀取和存儲(chǔ)的函數(shù)設(shè)置參數(shù),傳遞讀取返回的數(shù)據(jù)、需要存儲(chǔ)的數(shù)據(jù)以及發(fā)生錯(cuò)誤時(shí)的錯(cuò)誤代碼。
4.3.2 充值模塊
本模塊在系統(tǒng)窗口界面中進(jìn)行開(kāi)發(fā),涉及到CPU卡賬戶的開(kāi)戶、個(gè)人信息錄入及存儲(chǔ)到數(shù)據(jù)庫(kù)、CPU卡充值操作及充值記錄的數(shù)據(jù)庫(kù)存儲(chǔ),另外還包括輔助功能如卡片掛失和個(gè)人信息變更等。
數(shù)據(jù)庫(kù)是本系統(tǒng)數(shù)據(jù)存儲(chǔ)的容器,是保證系統(tǒng)業(yè)務(wù)流程的根本;合理的數(shù)據(jù)庫(kù)結(jié)構(gòu)設(shè)計(jì)可以提高數(shù)據(jù)存儲(chǔ)的效率,保證數(shù)據(jù)完整一致,也利于程序的實(shí)現(xiàn)。[2]
首先,在對(duì)數(shù)據(jù)信息的存儲(chǔ)時(shí)為精確的統(tǒng)計(jì)存檔用戶個(gè)人信息及充值記錄,本系統(tǒng)采用SQLServer2005數(shù)據(jù)庫(kù)管理系統(tǒng)作為開(kāi)發(fā)工具,以實(shí)現(xiàn)IC卡管理、充值記錄查詢、檔案維護(hù)等功能。
其次,在系統(tǒng)功能分析之后,將系統(tǒng)的實(shí)際需求轉(zhuǎn)化為獨(dú)立的邏輯實(shí)體,并繪制出數(shù)據(jù)E-R圖以確定程序和數(shù)據(jù)表的實(shí)現(xiàn),如圖2所示。
為精簡(jiǎn)主體程序,在軟件開(kāi)發(fā)中一般習(xí)慣將數(shù)據(jù)庫(kù)連接和數(shù)據(jù)存儲(chǔ)的程序封裝統(tǒng)一到獨(dú)立的公共類中,定義新的命名空間,需要調(diào)用數(shù)據(jù)庫(kù)時(shí)直接引用該命名空間下的函數(shù)。公共類中封裝的函數(shù)包括建立數(shù)據(jù)庫(kù)連接、執(zhí)行SqlCommand命令、讀取指定數(shù)據(jù)表中的信息、創(chuàng)建DataSet對(duì)象、關(guān)閉數(shù)據(jù)庫(kù)連接等函數(shù)。
對(duì)本系統(tǒng)的整體測(cè)試可以通過(guò)各單一模塊的性能來(lái)衡量,測(cè)試環(huán)境需要搭建軟件運(yùn)行所需的PC機(jī)終端、連接PC機(jī)的CPU卡讀卡器以及數(shù)據(jù)庫(kù)服務(wù)器。
運(yùn)行軟件后將自動(dòng)檢測(cè)CPU卡讀卡器連接和數(shù)據(jù)庫(kù)服務(wù)器的連接,檢測(cè)連接正常后進(jìn)入登錄界面。
以預(yù)設(shè)的超級(jí)管理員身份登錄進(jìn)入軟件,開(kāi)始對(duì)系統(tǒng)功能的測(cè)試:
首先是系統(tǒng)軟件管理功能:超級(jí)管理員需要添加普通管理員,設(shè)置其操作權(quán)限——發(fā)卡權(quán)限、充值權(quán)限、卡片掛失權(quán)限、更改個(gè)人信息權(quán)限、賬戶注銷權(quán)限以及管理員密碼修改權(quán)限。在一般應(yīng)用中普通管理員的登錄即可滿足系統(tǒng)的應(yīng)用功能。
其次是系統(tǒng)發(fā)卡充值功能:對(duì)于未發(fā)行的CPU卡,系統(tǒng)在開(kāi)戶、發(fā)卡過(guò)程中完成對(duì)卡片的初始化工作,并寫(xiě)入用戶個(gè)人信息;系統(tǒng)讀卡時(shí)能夠辨識(shí)無(wú)效卡并警告管理員卡片不可用。測(cè)試充值功能主要在于測(cè)試寫(xiě)入卡片金額(次數(shù))的正確性,保證在需要的應(yīng)用文件下的數(shù)據(jù)寫(xiě)入,保證充值記錄信息在對(duì)應(yīng)應(yīng)用賬戶下的數(shù)據(jù)刷新;以及同時(shí)完成對(duì)數(shù)據(jù)庫(kù)充值記錄刷新的信息完整性:當(dāng)遇到意外,卡片金額寫(xiě)入異常時(shí),充值記錄不再更新,并保存異常報(bào)告。
最后是對(duì)數(shù)據(jù)庫(kù)存儲(chǔ)充值記錄的調(diào)取測(cè)試:多次充值后查詢各次充值記錄均能夠完整無(wú)誤的顯示;數(shù)據(jù)庫(kù)對(duì)于意外關(guān)閉等情況均能良好應(yīng)對(duì)。
經(jīng)過(guò)多次測(cè)試,本系統(tǒng)軟件的各功能均可正常使用。
本文針對(duì)集中小區(qū)持卡消費(fèi)的特點(diǎn),結(jié)合CPU卡可進(jìn)行多應(yīng)用開(kāi)發(fā)的功能概括了一卡多用的CPU卡文件系統(tǒng)設(shè)計(jì)思路,并規(guī)劃了發(fā)卡充值系統(tǒng)的軟件實(shí)現(xiàn),通過(guò)測(cè)試證實(shí)軟件的可用性,并具備友好人機(jī)交互界面、易操作的優(yōu)點(diǎn)。
[1]顧赟.CPU智能卡記次消費(fèi)系統(tǒng)設(shè)計(jì)與實(shí)現(xiàn)[D].蘇州大學(xué),2008.
[2]賈瀛.塘沽區(qū)地?zé)嵩囼?yàn)研究中心基于IC卡熱水使用管理信息系統(tǒng)建設(shè)的設(shè)計(jì)與實(shí)現(xiàn)[D].天津大學(xué),2008.
[3]王建偉,尹婷婷,林永君,朱振軍.應(yīng)用CPU卡實(shí)現(xiàn)充電樁計(jì)費(fèi)的研究[J].電子世界,2012(6):51-53.
尹婷婷(1986—),女,華北電力大學(xué)控制與計(jì)算機(jī)工程學(xué)院研究生在讀,研究方向:嵌入式在工業(yè)控制中的應(yīng)用。