中邮储IC卡系统改造工程数据准备子系统_第1页
中邮储IC卡系统改造工程数据准备子系统_第2页
中邮储IC卡系统改造工程数据准备子系统_第3页
中邮储IC卡系统改造工程数据准备子系统_第4页
中邮储IC卡系统改造工程数据准备子系统_第5页
已阅读5页,还剩53页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

PAGEPAGE6中邮储IC卡系统改造工程数据准备子系统摘要金融IC卡应用工程是防范银行卡风险,推动产业升级,提升金融服务,促进政府管理,惠及人民群众的一项重大社会工程。在2023年3月中国人民银行发布了《中国金融集成电路(IC)卡规范》(PBOC2.0),并在北京、上海、天津、青岛、福州等地开始试点工作。2023年,央行又进一步完善了我国银行IC卡发展规划,鼓励商业银行发行基于电子钱包功能的IC卡。本文首先分析了国内外银行IC卡的发展现状和存在的问题,然后介绍了一种现在国内外正在研究开发的基于IC、磁条合一的卡产品——金融IC卡。在此基础上,设计了这套金融IC卡系统。设计内容主要包括IC卡前置子系统、数据准备子系统、IC卡管理子系统、渠道接入子系统、后台接入子系统、监控子系统、数据清理子系统及IC卡安全子系统。本论文主要讨论的是数据准备子系统。该子系统利用了某公司TopSmartTeller开发工具,具有灵活、方便、易于维护的特点。主体设计部分基于Linux平台,采用C语言、ProC和Oracle数据库,主要实现数据的接收、数据的处理和生成制卡文件三大核心需求。本论文主要解决以下问题:1.对从第三方(安全中心)发来的证书文件的解密及生成制卡文件后的加密。2.定义发卡模板及套用发卡模板进行业务参数的填充。3.转换后生成IC卡制卡文件。关键词:IC卡,数据处理,制卡文件China'sPostalSavingsBankICCardSystemRenovationDataPreparationSubsystemAbstractFinancialICcardapplicationbankcardprojectisanimportantsocialprojectwhichcanpreventrisks,promoteindustrialupgrading,enhancefinancialservices,promotegovernanceandbenefitpeople.People'sBankofChinapromulgatedthe"Chinafinancialintegratedcircuit(IC)CardSpecification"(PBOC2.0)inMarch2023andbegantomakeexperimentsinBeijing,Shanghai,Tianjin,QingdaoandFuzhou.ThecentralbankimproveddevelopmentprogramofICcardinBankofChinaandencouragedcommercialbankstopublishICCardbasedonelectronicpursefunctions.ThisarticleanalyzesthedevelopmentofdomesticandforeignbanksICcardstatusandexistingproblems,andthenintroducedthefinancialICcardbasedonICandmagneticstripewhichisresearchedanddevelopedathomeandabroad.AfinancialICcardsystemisdesignedonthisbasis.Thisdesignincludespre-subsystem,datapreparationsubsystem,ICcardmanagementsubsystem,thechannelaccesssubsystem,backstageaccesssubsystem,controlsubsystem,datacleaningsubsystemandsecuritysubsystem.Thisessayfocusesonthedatapreparationsubsystem.DatapreparationsubsystemisdevelopedbyTopSmartTellerwhichisflexible,convenientandmaintainable.Thekeypartofthisdesign,whichisbasedonLinux,Clanguage,ProCandOracleDatabase,realizesdatareception,dataprocessingandcard-creatingfilesgenerating.Theproblemssettledinthisthesisareasfollowing:Decryptcertificatefromthethirdpart(Security2.Definecardtemplatesanddoparametersfillingaccordingtothiscardtemplates.3.Generatecard-creatingfilesafterconversion.Keywords:ICcard,DataProcessing,CardFileSystem目录1绪论 PAGEREFToc294890993\h41.1项目来源 PAGEREFToc294890994\h41.2项目背景 PAGEREFToc294890995\h41.3国内外在该方向的研究现状及分析 PAGEREFToc294890996\h51.4使用的开发平台 PAGEREFToc294890997\h52基础知识 PAGEREFToc294890998\h72.1数据加密算法 PAGEREFToc294890999\h72.2认证中心 PAGEREFToc294891000\h72.3数据完整性 PAGEREFToc294891001\h73系统的分析与设计 PAGEREFToc294891002\h83.1系统边界设计 PAGEREFToc294891003\h83.1.1本系统定位 PAGEREFToc294891004\h83.1.2系统关联试图 PAGEREFToc294891005\h93.2网络拓扑图 PAGEREFToc294891006\h93.3系统数据流图 PAGEREFToc294891007\h103.4应用架构设计 PAGEREFToc294891008\h113.4.1应用架构设计概述 PAGEREFToc294891009\h113.4.2逻辑架构 PAGEREFToc294891010\h113.4.3功能需求与系统模块对应关系 PAGEREFToc294891011\h123.5IC卡数据准备子系统的功能模块设计 PAGEREFToc294891012\h123.5.1逻辑结构 PAGEREFToc294891013\h123.5.2处理流程 PAGEREFToc294891014\h133.5.3运行设计 PAGEREFToc294891015\h173.5.4数据结构设计 PAGEREFToc294891016\h193.6模块采用的技术原理及与其余模块间的组织架构 PAGEREFToc294891017\h263.7制卡文件生成模块的具体设计 PAGEREFToc294891018\h273.7.1个人化文件格式接口的定义 PAGEREFToc294891019\h273.7.2主要代码编写流程 PAGEREFToc294891020\h313.7.3数据存储传输安全 PAGEREFToc294891021\h313.7.4对数据库的操作 PAGEREFToc294891022\h32结论 PAGEREFToc294891023\h34参考文献 PAGEREFToc294891024\h36附录1 PAGEREFToc294891025\h371绪论随着国内外金融IC卡业务的改革和发展,新型智能的IC卡技术越来越受到人们的关注。形成一套安全、便捷、可靠、实用的金融IC卡系统也越来越受到人们的重视。本文设计了一套基于IC、磁条合一的卡产品,该软件系统将实现IC卡的发卡功能及基于小额支付账户的业务功能,从而有效的应对各种金融客户的各种需求,并在安全性方面做出了强有力的保证。可见,开发一套完善的金融IC卡系统具有重要的现实意义。1.1项目来源该项目为商业项目。1.2项目背景金融IC卡应用工程是防范银行卡风险,推动产业升级,提升金融服务,促进政府管理,惠及人民群众的一项重大社会工程。在2023年3月中国人民银行发布了《中国金融集成电路(IC)卡规范》(PBOC2.0),并在北京、上海、天津、青岛、福州等地开始试点工作。2023年,央行又进一步完善了我国银行IC卡发展规划,鼓励商业银行发行基于电子钱包功能的IC卡。按照人民银行关于IC卡迁移的整体策略,中国工商银行、中国农业银行、中国建设银行等部分商业银行和中国银联已经率先启动并正在逐步完成受理系统的改造,今年将逐步开展IC卡受理终端的布放工作。中国银联按照人民银行的部署和要求,完成了跨行交换系统兼容PBOC2.0标准的技术改造。按照人民银行关于IC卡迁移的整体策略,要求金融IC卡应用工程的阶段目标是:2023年底,国有商业银行均发行金融IC卡,发卡量达到一定规模,主要城市一定数量商户能够受理金融IC卡,并完成30%的终端机具改造。2023年底,全国主要商业银行均发行金融IC卡,发卡量在原有基础上明显增加,主要城市多数商户能够受理金融IC卡,并完成50%的终端机具改造,能在社保、交通、教育等领域广泛应用。根据金融IC卡工程行业拓展进度,争取开始在卫生、文化、旅游等领域使用。2023年,全国所有城市的商户和公共应用领域均能受理金融IC卡,大多数商业银行具备发行金融IC卡的能力,已发金融IC卡实现全国联网通用,初步形成金融IC卡的应用规模和社会效益。因而,为拓展某商业银行卡业务功能,提高风险防范能力,积极参与人民银行组织的金融IC卡业务应用推广,经某集团公司金融信息化工作组批准,启动某商业银行IC卡应用工程。1.3国内外在该方向的研究现状及分析银行IC卡最早于1985年出现在法国。1995年前后,IC卡在金融领域得到较普遍的应用,当时主要以电子钱包等小额支付为主,除了在少数国家获得局部成功外,在绝大部分地区的发展状况不佳。2023年,国际卡组织调整了IC卡的发展重点,开始大力推广借记/贷记卡的IC化,也就是所谓的EMV迁移。在我国,早在1994年就提出了“磁条卡与智能卡并用,逐步向智能卡过渡”的指导思想。2023年底,中国人民银行在EMVv3.1.1规范的基础上组织制定了《中国金融集成电路(IC)卡规范》(又称PBOC1.0标准)。根据我国银行卡芯片化计划要求,人民银行和中国银联2023年正式颁发了PBOC2.0,该规范补充完善电子钱包/存折应用,增加了与EMV标准兼容的借/贷记应用,增加非接触式IC卡物理特性标准,增加电子钱包扩展应用指南、借/贷记应用个人化指南等内容。1.4使用的开发平台系统环境搭建:Linux,开发工具某公司TopSmartTeller开发工具、语言Linux平台下的C和ProC编程、数据库Oracle11g。如表1-1所示。表1.1软件环境平台说明操作系统Linux稳定操作系统平台支撑中间件Tuxedo10提供成熟完备的消息管理机制以及服务进程管理数据库Oracle11g包括数据库存储、安全、备份文件系统XFS或JSF+LVM采用安全稳定的文件系统是所有平台的基础开发工具TopSmartTeller编写TOPSmartTeller脚本,脚本的格式,STScript的语法,变量,系统函数;配置文件的内容;客户化函数库等其他软件工具,如表1-2所示。表1.2其他软件工具各环境版本信息中间件名称生产环境版本开发环境版本测试环境版本GCC操作系统默认版本操作系统默认版本操作系统默认版本VI操作系统默认版本操作系统默认版本操作系统默认版本JDK1.51.51.5ANSIC操作系统默认版本操作系统默认版本操作系统默认版本2基础知识2.1数据加密算法数据加密算法(DataEncryptionAlgorithm,DEA)是一种对称加密算法,很可能是使用最广泛的密钥系统,特别是在保护金融数据的安全中,最初开发的DEA是嵌入硬件中的。通常,自动取款机(AutomatedTellerMachine,ATM)都使用DEA。它出自IBM的研究工作,IBM也曾对它拥有几年的专利权,但是在1983年已到期后,处于公有范围中,允许在特定条件下可以免除专利使用费而使用。1977年被美国政府正式采纳。数据加密标准DES:DES的原始思想可以参照二战德国的恩格玛机,其基本思想大致相同。传统的密码加密都是由古代的循环移位思想而来,恩格玛机在这个基础之上进行了扩散模糊。但是本质原理都是一样的。现代DES在二进制级别做着同样的事:替代模糊,增加分析的难度。加密原理:DES使用一个56位的密钥以及附加的8位奇偶校验位,产生最大64位的分组大小。这是一个迭代的分组密码,使用称为Feistel的技术,其中将加密的文本块分成两半。使用子密钥对其中一半应用循环功能,然后将输出与另一半进行“异或”运算;接着交换这两半,这一过程会继续下去,但最后一个循环不交换。DES使用16个循环,使用异或,置换,代换,移位操作四种基本运算。2.2认证中心证明公钥和其它相关信息同其拥有者相关联的可信的第三方机构。2.3数据完整性数据不受未经许可的方法变更或破坏的属性。3系统的分析与设计本章的编写目的是遵循应用软件设计的基本原则并选择合适的设计方法,对某银行IC卡系统的总体框架进行描述,包括系统的划分、各子系统及其组成模块的功能、属性及其相互间的接口关系,以及在进一步细化时所要考虑的性能、运行环境和安全性等诸方面的约束,同时对系统所包括的各子系统的逻辑架构、模块组成、模块之间的关系、物理设计、内部/外部数据结构等进行深入展开,为后续各子系统的详细设计提供设计基础和依据。3.1系统边界设计系统的边界设计包括以下几个内容。3.1.1本系统定位IC卡系统是一个基于某商业银行核心储蓄系统的外挂系统,借助某商业银行储蓄系统已有的账户管理服务、会计核算服务、资金清算服务、公共管理服务实现IC卡的发卡及IC卡相关业务的受理。基于以上系统定位,在系统建设中遵循以下原则:(1)IC卡系统不建设单独的受理渠道,利用某商业银行现有渠道开展业务;(2)IC卡前置系统不单独建立机构信息、不进行机构的权限管理;某商业银行储蓄系统每日日终将机构的全量信息同步给IC卡前置系统;(3)IC卡前置系统与某商业银行储蓄省中心采用总对分的连接方式,即IC卡前置系统直接与31个储蓄省中心连接;并根据终端所在省将交易发往对应的储蓄受理省中心,对于跨省交易,受理某商业银行储蓄省中心通过储蓄全国中心将交易发往相应的省中心进行处理;(4)IC卡前置系统与包括储蓄网点前置在内的各渠道前置直连;(5)对于涉及小额支付账户的联机交易,由渠道前置将交易发往IC卡前置系统,由IC卡前置系统调用受理省储蓄省中心的相应接口进行处理,涉及跨省交易的由受理省省中心发给储蓄全国中心,参照现有行内跨省异地转账交易流程处理;对于传统借记交易,渠道前置先发交易请求到IC卡前置系统进行验证,IC卡前置返回验证结果,若验证通过,渠道前置将交易发往储蓄省中心进行处理;(6)IC卡系统不建立单独的凭证管理和尾箱管理,凭证管理及尾箱管理利用储蓄系统现有的方式完成,IC卡系统调用储蓄系统提供的相应接口完成业务处理。3.1.2系统关联试图IC卡系统关联试图如图3.1所示。图3.1IC卡系统关联试图上图描述了IC卡系统的组成及与关联系统的关系,其中绿色为需要新建或改造的系统。IC卡系统由后台接入子系统、监控子系统、安全管理子系统、IC卡前置子系统、数据准备子系统、安全管理中心、数据清理子系统、渠道接入子系统、管理子系统、个人化发卡系统组成;其中安全管理中心及个人化发卡系统由其它厂商建设。3.2网络拓扑图网络拓扑图如图3.2所示。全国中心系统:包括IC卡交换前置、IC卡应用系统、数据准备系统、管理终端服务器和安全管理中心。图3.2网络拓扑图3.3系统数据流图系统数据流图如图3.3所示。图3.3系统数据流图上图描述的是在交易过程中各个子系统之间及与外系统之间的数据流向,其中蓝色箭头显示的是制卡的数据流向,绿色箭头显示是联机交易的数据流向,流程说明如下:制卡数据流向:(1)业务管理人员通过控制台进行卡片管理,添加新的卡品种、卡类别及制卡模版;(2)储蓄系统生成卡的磁条信息并一文件的方式发送给后台接入子系统;(3)后台接入子系统将磁条信息文件转发给数据准备子系统,并登记相应的批处理任务;(4)数据准备子系统访问安全管理中心获取密钥及证书等信息,生成制卡文件;(5)数据准备子系统通过渠道接入子系统将制卡文件发往个人化发卡系统;(6)个人化发卡系统收到制卡文件后进行相应处理并完成制卡。3.4应用架构设计应用架构设计包括以下几个内容。3.4.1应用架构设计概述在软件逻辑结构设计中,针对IC卡系统所需要实现的业务、技术和管理方面的功能按照架构层次进行了归纳,在系统划分上需要遵循如下原则:(1)系统层次清晰,重用部分和扩展部分隔离,底层系统向上层系统提供服务;(2)系统逻辑独立,兼顾物理独立,保证系统能够灵活部署;(3)兼顾近期目标和远期规划,在符合整体系统规划和趋势的前提下,实现系统功能。3.4.2逻辑架构按照系统所实现的业务功能、支撑业务功能而提供的技术功能以及管理上的要求,IC卡系统逻辑上可以分为:IC卡前置子系统、IC卡数据准备子系统、IC卡管理子系统、渠道接入子系统、后台接入子系统、监控子系统、数据清理子系统、IC卡安全子系统。其中,IC卡数据准备子系统主要负责在保证数据安全和私密性的前提下,对PBOC2.0借记IC卡个人化所需要的各种数据进行生成,转换,替换和组合等操作,最终形成可以为个人化系统识别的个人化文件。包括数据域管理、模版管理、DGI(DataGroupInterface)数据分组管理、制卡文件生成四部分。3.4.3功能需求与系统模块对应关系功能需求与系统模块对应关系如表3.1所示。模块名称子模块功能点编号功能点对应设计功能模块业务管理卡片管理IC-MNG-11制卡流程概述卡片管理IC-MNG-12卡产品定义IC-MNG-13个人化格式配置管理IC-MNG-14IC卡模板管理IC-MNG-15IC卡数据域管理IC-MNG-16DGI数据分组管理IC-MNG-17数据准备处理阶段查询IC-MNG-18数据准备文件补发表3.1功能需求与系统模块对应关系表3.5IC卡数据准备子系统的功能模块设计IC卡数据准备子系统的功能模块设计包括以下几个方面。3.5.1逻辑结构IC卡数据准备子系统逻辑结构,如图3.4所示。图3.4IC卡数据准备子系统逻辑结构IC卡模板管理模块由控制台发起,包括模板信息维护以及模板TLV(TagLengthValue)配置,负责数据准备相关模板的维护以及模板与TLV数据域的关联维护,生成制卡文件的过程中将使用此模块中配置好的模板生成数据。IC卡数据域管理模块由控制台发起,负责维护与卡模板关联的TLV数据域,包括数据域的增删改查,TLV数据域根据银联规范配置,发卡行也可自行定制数据域,与客户信息相关的数据域数据(磁条信息,姓名,卡号等)由储蓄系统提供,与安全相关的数据域数据(公钥等)由安全中心提供,与应用相关数据域数据(AID等)由数据准备子系统提供。DGI数据分组管理模块由控制台发起,包括个人化格式配置信息维护以及个人化格式DGI配置维护,生成制卡文件的过程中将使用此分组数据将模板数据进行数据分组产生给个人化厂商的个人化文件。制卡文件生成模块由后台进程发起,负责根据储蓄制卡文件,以上配置的数据准备模板以及向安全中心请求的证书生成个人化文件给个人化厂商。以上四个模块均访问数据准备数据库,制卡文件生成模块使用其他三个模块配置的信息生成文件。3.5.2处理流程处理流程包括IC卡模板管理模块、IC卡数据域管理模块、DGI数据分组管理模块、制卡文件生成模块。1)IC卡模板管理模块模板信息维护流程,如图3.5所示。图3.5IC卡模板管理模块维护流程图流程说明:(1)接收页面发来的请求;(2)检查操作员是否有执行模板信息维护的权限,如没有,返回错误信息至页面并显示;(3)更新IC卡模板表(增加删除修改);(4)记录交易流水表;(5)返回成功信息至页面。模板TLV配置流程,如图3.6所示。图3.6模板TLV配置流程图流程说明:(1)接收页面发来的请求;(2)检查操作员是否有执行模板TLV配置的权限,如没有,返回错误信息至页面并显示;(3)更新IC卡模板配置表(增加删除修改);(4)记录交易流水表;(5)返回成功信息至页面。2)IC卡数据域管理模块IC卡数据域管理模块如图3.7所示。图3.7IC卡数据域管理模块流程图流程说明:(1)接收页面发来的请求;(2)检查操作员是否有执行IC卡基础域配置的权限,如没有,返回错误信息至页面并显示;(3)更新IC卡基础域配置表(增加删除修改);(4)记录交易流水表;(5)返回成功信息至页面。3)DGI数据分组管理模块个人化格式配置信息维护流程,如图3.8所示。图3.8个人化格式配置信息维护流程图流程说明:(1)接收页面发来的请求;(2)检查操作员是否有执行个人化格式配置信息维护的权限,如没有,返回错误信息至页面并显示;(3)更新个人化格式配置表(增加删除修改);(4)记录交易流水表;(5)返回成功信息至页面。个人化格式DGI配置维护流程,如图3.9所示。图3.9个人化格式DGI配置维护流程图流程说明:(1)接收页面发来的请求;(2)检查操作员是否有执行个人化格式DGI配置维护的权限,如没有,返回错误信息至页面并显示;(3)更新个人化格式DGI配置表(增加删除修改);(4)记录交易流水表;(5)返回成功信息至页面。4)制卡文件生成模块制卡文件生成模块如图3.10所示。图3.10制卡文件生成模块流程图流程说明:(1)扫描通知表,检查是否有新文件;(2)如有新文件,取储蓄制卡文件;(3)对储蓄制卡文件使用KEK(储蓄与数据准备同步密钥)解密入库;(4)向安全中心申请证书文件(申请证书文件明文,安全中心返回证书用KEK加密);(5)调用安全子系统将KEK加密的证书文件转为TK加密证书;(6)调用安全子系统用磁道加密密钥对磁道信息进行加密;(7)使用TK加密证书文件、储蓄制卡文件解密后入库的数据、根据模板生成的数据准备数据生成个人化文件;(8)调用安全子系统对文件哈希并用哈希加密密钥对哈希值加密添加至文件尾;(9)传输个人化文件至个人化系统,并返回扫描通知表。3.5.3运行设计IC卡数据准备子系统运行设计图如图3.11所示。图3.11IC卡数据准备子系统运行设计图数据准备运行分为两部分,控制台配置部分与IC卡系统后台部分:控制台配置部分:(1)IC卡数据域维护应用增加IC卡数据域(根据银联规范);(2)IC卡模板维护应用增加应用模板;(3)IC卡模板维护应用配置模板与IC卡数据域的关联关系;(4)IC卡数据分组维护应用增加DGI数据分组信息;(5)IC卡数据分组维护应用增加DGI数据分组与IC卡数据域的关联关系;IC卡系统后台部分:(1)轮询线程扫描通知表;(2)取储蓄制卡文件至IC卡系统后台;(3)解密入库并调用生成个人化文件API;(4)生成个人化文件API向安全中心请求证书,安全中心返回证书文件;(5)调用安全子系统将KEK加密证书转为TK加密证书(6)根据证书文件,WEB服务器应用中的应用配置以及入库的储蓄制卡文件生成给个人化系统的个人化文件;(7)将个人化文件传输至个人化系统。3.5.4数据结构设计数据机构设计包括数据关系视图与定义的各种表结构。表结构包括:1)模板信息表TBLINFTEMPLATEID2)模板配置表TBLINFTEMPLATECHG3)个人化格式配置表TBLICFORMATCFG4)个人化格式DGI配置表TBLICDGICFG5)IC卡基础域配置表TBLINFFLDID6)数据准备预处理表TBLDATCARDPROC7)BUF模板映射表TBLINFBUFTEMPLATEMAP8)BUF配置表TBLINFBUFCHG9)BUF字段表TBLINFBUFFLD10)BUF信息表TBLINFBUFID(1)数据关系视图数据关系视图如图3.12所示。图3.12IC卡数据准备子系统数据关系视图(2)数据结构1.模板信息表TBLINFTEMPLATEID,如表3.2所示。主键:TEMPLATEID2表3.2模板信息表字段名称类型长度说明备注缺省值可空TEMPLATEID2VARCHAR27应用模板编号NTEMPLATENAMEVARCHAR220模板名称NTEMPLATEFLAGVARCHAR220模板属性NRECUPDUSRIDCHAR10修改的用户标识NRECUPDTSCHAR14修改时间NRECCRTTSCHAR14创建时间NRESERVEVARCHAR230保留NRESERVE1VARCHAR230保留1NRESERVE2VARCHAR260保留2NRESERVE3VARCHAR2100保留3N2.模板配置表TBLINFTEMPLATECHG,如表3.3所示。主键:TEMPLATEID2,FLDID表3.3模板配置表字段名称类型长度说明备注缺省值可空TEMPLATEID2VARCHAR27应用模板编号NFLDIDCHAR4模板字段编号NFLDENCFLAGCHAR1加密标志0:不加密1:加密NFLDDFLVALFLAGCHAR1使用缺省值标志0:不使用1:使用NDFLVALVARCHAR2256缺省值NFLDNESTFLAGCHAR1嵌套域标志0:非嵌套1:嵌套NFLDUPFLAGCHAR1上级字段标志NUPFLDIDCHAR4上级字段编号NRECUPDUSRIDCHAR10修改的用户标识NRECUPDTSCHAR14修改时间NRESERVEVARCHAR230保留NRESERVE1VARCHAR230保留1NRESERVE2VARCHAR260保留2NRESERVE3VARCHAR2100保留3N3.个人化格式配置表TBLICFORMATCFG,如表3.4所示。主键:PERFORMATID表3.4个人化格式配置表字段名称类型长度说明备注缺省值可空PERFORMATIDCHAR4个人格式编号NPERFORMATNMVARCHAR264名称NRESERVE1VARCHAR230保留1NRESERVE2VARCHAR260保留2NRESERVE3VARCHAR2100保留3NRECUPDUSRIDCHAR10修改的用户标识NRECCRTTSCHAR14创建时间NRECUPDTSCHAR14修改时间N4.个人化格式DGI配置表TBLICDGICFG,如表3.5所示。主键:PERFORMATID,PERDGISEQ表3.5个人化格式DGI配置表字段名称类型长度说明备注缺省值可空PERFORMATIDCHAR4个人格式编号NPERDGISEQINTEGERDGI顺序号NDGITLVSEQINTEGERDGITLV序列号NFLDID3INTEGER字段IDNDGIFLDFLAGVARCHAR2100DGITLV字段标志NRESERVE1VARCHAR230保留1NRESERVE2VARCHAR260保留2NRESERVE3VARCHAR2100保留3NRECUPDUSRIDCHAR10修改的用户标识NRECCRTTSCHAR14创建时间NRECUPDTSCHAR14修改时间N5.IC卡基础域配置表TBLINFFLDID,如表3.6所示。主键:FLDID2表3.6IC卡基础域配置表字段名称类型长度说明备注缺省值可空FLDID2CHAR4字段编号NFLDTAGCHAR4字段TagNFLDMAXLENNUMBER字段最大长度NFLDLENCHANGFLAGCHAR1长度可变标志0:不可变1:可变NFLDFORMNUMBER字段格式0:n(数字)1:cn(压缩数字)2:b(二进制)3:an(字母数字)4:ans(特殊字母数字)5:var.(可变)NRECUPDUSRIDCHAR10修改的用户标识NRECUPDTSCHAR14修改时间NRECCRTTSCHAR14创建时间NRESERVEVARCHAR230保留NRESERVE2VARCHAR260保留2NRESERVE3VARCHAR2100保留3N6.数据准备预处理表TBLDATCARDPROC,如表3.7所示。主键:CARDNO表3.7数据准备预处理表字段名称类型长度说明备注可空CARDNOCHAR19卡号NCARDPROCFLAGNUMBER处理标志NCARDPRODUCTIDCHAR8卡产品代码NCARDPRODIDCHAR4卡商编号NCARDISSSTYLECHAR1发卡方式NCUSTIDTYPECHAR2客户证件类型01:身份证02:户口簿03:军人身份证件04:武装警察身份证件05:港澳居民往来内地通行证06:台湾回乡证07:本国护照08:外国护照09:临时身份证10:军人士兵证11:军人文职干部证12:武警士兵证13:其他等。NCUSTIDCHAR30客户证件号NCUSTNAMEVARCHAR264客户姓名NCUSTADDRVARCHAR2128客户地址NCUSTTELNOCHAR30客户联系NAPPLYDATECHAR8申请日期NENDDATECHAR8失效日期NSENDNUMNUMBER发卡次数NSERVIDCHAR3服务代码NCARDCVVCHAR3CVVNCARDCVV2CHAR3CVV2NSECONDTRACKDATAVARCHAR240二磁道数据NSENDBRBRHCHAR8发卡网点NCARDPROCSTATCHAR2制卡状态NRESERVEVARCHAR230保留NRESERVE1VARCHAR230保留1NRESERVE2VARCHAR260保留2NRESERVE3VARCHAR2100保留3N7.BUF模板映射表TBLINFBUFTEMPLATEMAP,如表3.8所示。主键:BUFID3,TEMPLATEID表3.8BUF模板映射表字段名称类型长度说明备注缺省值可空BUFID3NUMBERBUF编号NTEMPLATEIDNUMBER应用模板编号NBUFFLDIDNUMBERBUF字段编号NFLDIDCHAR4模板字段编号NRECUPDUSRIDCHAR10修改的用户标识NRECUPDTSCHAR14修改时间NRECCRTTSCHAR14创建时间NRESERVEVARCHAR214保留NRESERVE1VARCHAR230保留1NRESERVE2VARCHAR260保留2NRESERVE3VARCHAR2100保留3N8.BUF配置表TBLINFBUFCHG,如表3.9所示。主键:BUFID2表3.9BUF配置表字段名称类型长度说明备注缺省值可空BUFID2NUMBERBUF编号NBUFFLDSEQNUMBERBUF字段序号NBUFFLDIDNUMBERBUF字段编号NRECUPDUSRIDCHAR10修改的用户标识NRECUPDTSCHAR14修改时间NRECCRTTSCHAR14创建时间NRESERVECHAR30保留NRESERVE1VARCHAR230保留1NRESERVE2VARCHAR260保留2NRESERVE3VARCHAR2100保留3N9.BUF字段表TBLINFBUFFLD,如表3.10所示。主键:BUFFLDID表3.10BUF字段表字段名称类型长度说明备注缺省值可空BUFFLDIDNUMBERBUF字段编号NBUFFLDNMVARCHAR2256BUF字段名称NBUFFLDTYPENUMBERBUF字段类型NBUFFLDLENNUMBERBUF字段长度NRECUPDUSRIDCHAR10修改的用户标识NRECUPDTSCHAR14修改时间NRECCRTTSCHAR14创建时间NRESERVEVARCHAR230保留NRESERVE1VARCHAR230保留1NRESERVE2VARCHAR260保留2NRESERVE3VARCHAR2100保留310.BUF信息表TBLINFBUFID,如表3.11所示。主键:BUFID表3.11BUF信息表字段名称类型长度说明备注缺省值可空BUFIDNUMBERBUF编号NBUFNAMEVARCHAR2256BUF名称NRECUPDUSRIDCHAR10修改的用户标识NRECUPDTSCHAR14修改时间NRECCRTTSCHAR14创建时间NRESERVEVARCHAR230保留NRESERVE1VARCHAR230保留1NRESERVE2VARCHAR260保留2NRESERVE3VARCHAR2100保留3N3.6模块采用的技术原理及与其余模块间的组织架构IC卡模板管理模块由控制台发起,包括模板信息维护以及模板TLV配置,负责数据准备相关模板的维护以及模板与TLV数据域的关联维护,生成制卡文件的过程中将使用此模块中配置好的模板生成数据。IC卡数据域管理模块由控制台发起,负责维护与卡模板关联的TLV数据域,包括数据域的增删改查,TLV数据域根据银联规范配置,发卡行也可自行定制数据域,与客户信息相关的数据域数据(磁条信息,姓名,卡号等)由储蓄系统提供,与安全相关的数据域数据(公钥等)由安全中心提供,与应用相关数据域数据(AID等)由数据准备子系统提供。DGI数据分组管理模块由控制台发起,包括个人化格式配置信息维护以及个人化格式DGI配置维护,生成制卡文件的过程中将使用此分组数据将模板数据进行数据分组产生给个人化厂商的个人化文件。制卡文件生成模块由后台进程发起,负责根据储蓄制卡文件,以上配置的数据准备模板以及向安全中心请求的证书生成个人化文件给个人化厂商。以上四个模块均访问数据准备数据库,制卡文件生成模块使用其他三个模块配置的信息生成文件。3.7制卡文件生成模块的具体设计制卡文件生成模块就是使用TK加密证书文件、储蓄制卡文件解密后入库的数据、根据模板生成的数据准备数据来生成个人化文件。其中最关键的技术就是个人化文件格式接口的定义、数据库的操作和与数据安全性相关的加密算法的应用,它们直接关系到生成个人化文件的准确性、效率与安全性。3.7.1个人化文件格式接口的定义个人化文件格式接口规范如下。(1)文件格式:文件采用二进制数据方式,一批卡数据一个文件。(2)文件名规范:日期+卡种(8位)+机构代码(9位)+批次号。(3)文件构成:如图3.13所示。图3.13文件构成(4)文件具体格式说明1)一个文件包含一批卡数据2)每张卡数据包含3大部分数据:卡面数据、磁条数据、IC卡数据3)IC卡数据必须支持多应用4)每个应用数据包含3大部分数据:DGI分组数据、加密的DGI清单、日志DGI清单5)每一张卡数据必须带MAC,MAC的计算方法为:将整张IC卡数据按照8字节分组,不足8字节的后补0,从第一个组开始,对下一个组进行异或,异或的结果再和下一个分组异或,直到和最后一个分组异或得到的值使用KEK进行ECB加密得到8个字节作为MAC值6)卡面数据、磁条数据、IC卡数据分别以“MIC+LEN+数据内容”格式进行表示,MIC的定义为定长6个字节字符:(1)MIC=“xxxPRN”表示卡面数据(2)MIC=“xxxMAG”表示磁条数据(3)MIC=“xxxEMV”表示IC数据例如,在对模板数据初始化得过程中,对卡数据的3大部分数据的初始化为:/*填充卡面数据*/fprintf(fp,"%s","000PRN");cardlen+=6;miclenpos=ftell(fp);miclen=0;fwrite((char*)&miclen,sizeof(int),1,fp);cardlen+=4;rc=dpprngenerate(pDpManager,fp);if(rc<0){OlBatLog(OLBATTRACEERROR,"dpprngenerateerror%d\n",rc);return-1;}cardlen+=rc;miclen=dpintconv(rc);curpos=ftell(fp);fseek(fp,miclenpos,SEEKSET);//定位读写位置fwrite((char*)&miclen,sizeof(int),1,fp);fseek(fp,curpos,SEEKSET);/*填充磁条数据*/fprintf(fp,"%s","000MAG");cardlen+=6;miclenpos=ftell(fp);miclen=0;fwrite((char*)&miclen,sizeof(int),1,fp);cardlen+=4;rc=dpmaggenerate(pDpManager,fp);if(rc<0){OlBatLog(OLBATTRACEERROR,"dpmaggenerateerror%d\n",rc);return-1;}cardlen+=rc;miclen=dpintconv(rc);curpos=ftell(fp);fseek(fp,miclenpos,SEEKSET);//定位读写位置fwrite((char*)&miclen,sizeof(int),1,fp);fseek(fp,curpos,SEEKSET);/*填充IC数据*/fprintf(fp,"%s","000EMV");cardlen+=6;miclenpos=ftell(fp);miclen=0;fwrite((char*)&miclen,sizeof(int),1,fp);cardlen+=4;rc=dpicgenerate(pDpManager,kicid,fp);if(rc<0){OlBatLog(OLBATTRACEERROR,"dpicgenerateerror%d\n",rc);return-1;}cardlen+=rc;miclen=dpintconv(rc);curpos=ftell(fp);fseek(fp,miclenpos,SEEKSET);//定位读写位置fwrite((char*)&miclen,sizeof(int),1,fp);fseek(fp,curpos,SEEKSET);//定位读写位置fpend=ftell(fp);OlBatLog(OLBATTRACEERROR,"fpcardseq=[%d]end=[%d]",cardseqint,fpend);3.7.2主要代码编写流程生成个人化格式文件的代码编写流程:变量初始化、获取批量信息参数、获取批次详细信息、生成个人化格式文件、更新制卡批次信息表、插入制卡批次信息表、插入批量请求信息表。其中最重要的是生成个人化格式文件这部分的代码编写。该部分独立为一个函数,名为genPerFile()。该函数的编写流程是:变量初始化、获取批量信息参数、内存初始化、加载默认值、打开文件、取卡总数、写文件头、函数注册、取卡余额上限、电子现金余额上限、取卡号、取卡的数据域。3.7.3数据存储传输安全(1)传输交易信息时采用MAC认证来保证数据传输的完整性和鉴别消息来源,以保证数据传输的可靠性。采用美国国家标准局公布的信息鉴别码(MAC)算法(ANSIX9.9)。在传输交易信息时交易的发起方根据交易信息生成信息鉴别码MAC并随交易信息发送到交易接受方,交易接受方对信息鉴别码进行验证,以保证信息传输的可靠性和完整性,并确认消息的正确来源,消息在各级的传送过程中,每到一个节点都要鉴别MAC,然后重新计算MAC,放入待发送的消息。换言之,每一段通信线路上传送的消息都将受到真伪的鉴别。传输文件时采用MAC认证来保证数据传输的完整性。采用美国国家标准局公布的信息鉴别码(MAC)算法(ANSIX9.9)。在传输文件时文件的发送方根据文件信息生成信息鉴别码MAC并随文件通知发送到接收方,接收方对信息鉴别码进行验证,以保证文件传输的可靠性和完整性。因此,对模板数据进行个人化时,在卡数据后都添加了MAC:/*在卡数据后添加MAC*/fprintf(fp,"%s","FFFFFFFF");cardlen+=8;cardlen=dpintconv(cardlen);curpos=ftell(fp);fseek(fp,cardlenpos,SEEKSET);//定位读写位置fwrite((char*)&cardlen,sizeof(int),1,fp);fseek(fp,curpos,SEEKSET);//定位读写位置(2)数据准备系统对个人化文件哈希并使用文件哈希密钥HK1生成密文,并添加至文件末尾:/*补写Hash值*/rc=fflush(fp);OlBatLog(OLBATTRACEERROR,"fpfflushrc=[%d]",rc);memset(buf,0,sizeof(buf));fseek(fp,fpstart,SEEKSET);//定位读写位置OlBatLog(OLBATTRACEERROR,"fpcardseq=[%d]ftell=[%d]",cardseqint,ftell(fp));rc=fread(buf,1,fpend-fpstart,fp);OlBatLog(OLBATTRACEERROR,"fpcardseq=[%d]diff=[%d],rc=[%d]",cardseqint,fpend-fpstart,rc);SHAHash(buf,sShaBuf,fpend-fpstart);//对文件进行哈希的函数Trace(9,FILE,LINE,sShaBuf,20);//记录日志的函数OlBatLog(OLBATTRACEERROR,"fpcardseq=[%d]hash=[%s]",cardseqint,sShaBuf);fseek(fp,fpend,SEEKSET);//定位读写位置fwrite(sShaBuf,sizeof(char),8,fp);3.7.4对数据库的操作本系统对数据库的操作都是利用在Pro*C程序中嵌入SQL语句,利用这些SQL语句完成动态的建立、修改和删除数据库中的表,查询、插入、修改、删除数据库表中的行,实现事务的提交和回滚。例如,对表tblolbatreqdtl的操作。打开表:OpenCursorTBLOLBATREQDTL(){};提取表:FetchCursorTBLOLBATREQDTL(){};关闭表:CloseCursorTBLOLBATREQDTL(){};对表数据的操作:DbsTBLOLBATREQDTL(intifunc,tblolbatreqdtldef*pTBLOLBATREQDTL){……switch(ifunc){caseDBSINIT:……//初始化caseDBSSELECT:……//查询caseDBSLOCK:……//锁定caseDBSUPDATE:……//更新caseDBSDELETE:……//删除caseDBSINSERT:……//插入default:return(543);}结论本论文分析了当前国内外金融IC卡的发展现状和研发智能IC卡的必要性,以及传统磁条IC卡技术的局限性。为了突破这一不足,引入了智能IC卡这一先进技术,设计了符合PBOC2.0标准的金融IC卡系统。该系统利用Linux平台下的C语言编程及Proc编程,以Oracle为数据库,以Tuxedo为中间件而设计开发的新产品。本系统具有以下优点:1.标准性:系统建设符合《中国金融集成电路(IC)卡规范》、《中国银联银行卡联网联合技术规范》等规范的规定。实现报文格式接口、模块交互接口、代码信息的标准化,使交易的装配更加容易,便于系统易维护,可移植,能扩展。2.先进性:系统采用符合信息技术发展趋势的先进技术。软件系统的选择与开发在满足业务需求的基础上具有易改造、易升级、易操作、易维护等特点。3.可扩展性:在软件设计方面考虑了未来业务发展和管理的需要,方便新业务和新需求的扩展和支持,满足未来IC卡业务发展的需要。4.稳定性:IC卡业务系统能确保系统平稳运行,满足高峰交易处理的需要。能适应日终批处理、瞬间浪涌业务、报表集中生成等特殊情况。IC卡应用工程的改造工作能充分考虑现有系统的稳定性,对原生产系统的改造应减少到最低限度。5.安全性:系统是建立在成熟稳定的硬件环境和应用软件基础上的,通过完善的备份恢复策略、安全控制机制、可靠的运行管理监控和故障处理手段来保障系统的运行稳定、安全。6.可维护性:系统的可维护性将决定系统的运行成本。在设计中应充分考虑系统的运行监控,提供方便灵活的管理手段和工具。存在以下局限性:1.该金融IC卡仍是基于IC、磁条二合一的卡产品,并非真正意义上的智能IC卡。在今后的研发方向上,要设计开发出纯芯片控制的金融IC卡,使IC卡更加智能化,简单化。2.生成个人化文件部分需要进一步完善和改进,特别是对卡片内部风险管理数据的检查需要优化,模式匹配过程需要进一步提高实时性和准确性。3.在文件交互过程中,对数据的保密性上应进一步改进和完善。应探索出更加安全、稳健的数据或文件加密算法来保证文件和数据在交互过程中的保密性。参考文献[1]徐阳EMV迁移对中国银行卡发展的影响及应对策略[J].经济纵横2023(5),91-94.[2]陈勇金融IC卡的专业应用[J].中国信用卡2023,(6),64-67.[3]王金红走进金融IC卡[J].西部金融2023,(5),82-82.[4]侯江涛建设银行长沙地区金融IC卡方案[J].中国信用卡2023,(7),49-52.[5]唐剑冰,陈海斌推进广西金融IC卡发展的思考[J].区域金融研究2023,(5),54-56.[6]陈勇金融IC卡的密钥管理,中国信用卡[J]2023,(10),64-67.[7]郑洁我国金融IC卡发展现状探究[J],中国信用卡[J]2023,(18).54-58[8]张妙银联发力金融IC卡推广[J].华南金融电脑2023,(7),13-15[9]李晓枫中国金融IC卡战略的若干思考[J].中国防伪报道2023,(11).55-58[10]Sanchez-Reillo,R.AchievingSecurityInIntegratedCircuitCardApplicationsRealityOrDesire[J].SecurityTechnology2023,(35),197-201附录1外文资料翻译译文:你的首个MFC应用程序现在来建立你的首个MFC应用程序。还有什么能比用一个显示“你好,MFC”的窗体更适合作为开端呢?基于克尼汉·布莱恩和里奇·丹尼斯的《C程序设计语言》中的经典不变的“Hello,World”项目,我称这种极小的项目为“Hello”,包含了使用MFC编写的应用程序窗体,展示了基本原则。除此之外,你将亲自见证MFC的CWinApp类和CFrameWnd类是如何获得并插入到这个程序中的。你也将学到非常重要的CPaintDC类,在窗体中它充当着文本和图形回应WMPAINT消息的管道。最后,你将为它引入MFC消息影射机制,用以关联准备办理应用程序和成员函数的那些消息。图1-3列出了Hello的源代码。Hello.h包含了两个派生类的说明。Hello.cpp包含了那些类的具体实现方案。对于C++程序员而言,一般把类的定义写在.h文件和.cpp文件中。在这本书里我们将贯彻这个优良传统。对于大型应用程序,它可能包含数以十计或者可能数以百计的类,这样也有利于从源代码上分离类的声明和实现。虽然在本书的前几章中这样是夸张的,但是以后当我们开始处理文档和视图时,我们将为每一个类写一个特定的.h文件和.cpp文件。在书后面的CD中,你将在Chap01文件夹中找到Hello.h和Hello.cpp的复制品,还有一个文件夹包含了一个可执行文件Hello.exe的副本。图1-3TheHelloapplication.Hello.h:classCMyApp:publicCWinApp{public:virtualBOOLInitInstance();};classCMainWindow:publicCFrameWnd{public:CMainWindow();protected:afxmsgvoidOnPaint();DECLAREMESSAGEMAP()};Hello.cpp:#include<afxwin.h>#include"Hello.h"CMyAppmyApp;///////////////////////////////////////////////////////////////////////////CMyAppmemberfunctionsBOOLCMyApp::InitInstance(){mpMainWnd=newCMainWindow; mpMainWnd->ShowWindow(mnCmdShow);mpMainWnd->UpdateWindow();returnTRUE;}///////////////////////////////////////////////////////////////////////////CMainWindowmessagemapandmemberfunctionsBEGINMESSAGEMAP(CMainWindow,CFrameWnd)ONWMPAINT()ENDMESSAGEMAP()CMainWindow::CMainWindow(){Create(NULL,T("TheHelloApplication"));}voidCMainWindow::OnPaint(){CPaintDCdc(this);CRectrect;GetClientRect(&rect);dc.DrawText(T("Hello,MFC"),-1,&rect,DTSINGLELINE¦DTCENTER¦DTVCENTER);}图1-4显示了Hello的输出。当你运行这个应用程序时,注意这个窗体的功能完整性;你可以移动它,调整它的大小,最小化,最大化,关闭。当你调整它的大小时,“Hello,MFC”将重新出现在屏幕中心。大部分Hello的功能来自窗体。窗体,比如说,窗体的绘制外表,或者非工作区域:标题栏,标题栏的按钮,窗体边框。你有责任建立窗体并且处理指定的WMPAINT消息,全部或者部分的窗体内置和工作区需要重置。让我们通过查看源代码来看看Hello是怎样运转的。图1-4TheHellowindow.应用程序对象MFC应用程序的核心基于CWinApp类。CWinApp类提供消息循环机制,检索消息并发送到应用程序窗口。它也包括关键的虚拟函数,可以被用户重写到应用程序行为中。当你引入头文件Afxwin.h,CWinApp以及其他MFC类使你的应用程序进入状态。一个MFC应用程序有且仅有一个应用程序对象,它必须全局声明,所以它将在应用程序开端实例化。Hello应用程序对象被命名为CMyApp.通过这个声明,它在Hello.cpp中实例化。CMyAppmyApp;CMyApp出现在Hello.h中的类声明:classCMyApp:publicCWinApp{public:virtualBOOLInitInstance();};CmyApp类不声明数据成员,仅重写一个从CWinApp类继承的函数。初始化实例于应用程序使用初期被请求,就在应用程序开始运转之后,先于建立窗口。实际上,若不是初始化实例建立一个窗口,应用程序就不会显示窗口。这也就是为什么再小的MFC应用程序都要从CWinApp类开始,并重写CWinApp::InitInstance.初始化实例函数CWinApp::InitInstance是一个默认为仅包括一个语句声明的虚拟函数:returnTRUE;初始化实例的目的是为了提供一个初始化应用程序本身的机会。初始化实例的返回值决定下一步执行什么业务流程。初始化实例返回错误信息则关闭应用程序。如果按计划赋初值,初始化实例应当返回真值以便允许程序运行。初始化实例是最佳的方式来执行赋初值操作,这是因为每次程序启动都要这样做。至少,这意味着建立将在屏幕上描绘应用程序的窗口。CMyApp类的初始化实力的实现,例如出现在Hello.cpp中的,通过举例说明Hello的CMainWindow类建立Hello窗口。这个声明mpMainWnd=newCMainWindow;建立了一个CMainWindow对象并把它的地址复制到应用程序对象的mpMainWnd数据成员。窗口建好之后,初始化实例显示——记住,一个窗口最初不是可见的,除非它通过一个WSVISIBLE属性建立——通过CMainWindow指针调用ShowWindow和UpdateWindow:mpMainWnd->ShowWindow(mnCmdShow);mpMainWnd->UpdateWindow();ShowWindow和UpdateWindow是共享于所有窗口对象的CWnd成员函数,包括拥有派生的CMainWindow的CFrameWnd类的对象。这些函数完全少于同名的API函数封装器。从一个MFC程序调用一个合格的窗体API函数,一般惯例是用全局作用域解析运算符::作为函数名开端,例如:::UpdateWindow(hwnd);通过这个符号,即便API函数调用拥有同名成员函数的对象,也可以确保无误。本书其余部分中,窗口API函数将用::字符从MFC成员函数中区分出来.ShowWindow仅接受一个参数:一个整形数据用来指定是否最初窗口最小化、最大化或者既非最小化也非最大化。依照窗口程序设计协议,Hello传递存储了mnCmdShow变量的应用程序对象ShowWindow,它负责把保留thenCmdShow参数传到WinMain。mnCmdShow的数据通常是SWSHOWNORMAL,表明展示窗口的方式应该声明为标准的未最大化的和未最小化的。无论如何,取决于用户启动应用程序,窗口偶尔就会悄悄地变成例如SWSHOWMAXIMIZED或SWSHOWMINIMIZED。除非有特定条件,否则初始化实例总是传递mnCmdShow变量,而不是把SW的值写入ShowWindow。UpdateWindow完成强制刷新ShowWindow的使命。等它完成,初始化实例返回真值由此来允许应用程序运行。其他的重写CWinApp类初始化实例仅仅是你可重写的少数几个虚拟CWinApp类中的自定义应用程序对象行为的成员函数中的一个。在你的MFC文件材料中查阅CWinApp重写类,你将发现不少于一打的一串其他例如名为WinHelp和ProcessWndProcException的。这些函数多为很少用来重写的,但是他们至少是触手可及的。例如说,当你结束一个应用程序时你可以用ExitInstance来清理数据。你可以用InitInstance来分配内存或者其他资源,ExitInstance最适合释放那些资源。ExitInstance的默认执行一些琐碎的日常清理,它需要通过业务框架,如果你重写了ExitInstance,你无疑要调用基础类。最后,ExitInstance的返回值是被WinMain送回来的退出代码。其他值得关注的CWinApp重写类有OnIdle,Run,和PreTranslateMessage。OnIdle适合除了琐碎的后台处理,比如,碎片帐集。由于OnIdle是在应用程序空转时调用的——就是说,当没有消息等待处理时——它提供一个极好的低优先级后台任务执行机制,它不需要大量单独执行。OnIdle在第十四章最后讨论了。你可以重写Run来自主重定义消息循环。如果你仅想执行一些某些消息发送前的专门的预处理,你可以重写PreTranslateMessage,并且是你免受写一个全新的消息循环的麻烦。原文:YourFirstMFCApplicationIt'stimetobuildyourfirstMFCapplication.Andwhatbetterplacetostartthanwithonethatdisplays"Hello,MFC"inawindow?Basedontheclassic"Hello,world"programimmortalizedinBrianKernighanandDennisRitchie'sTheCProgrammingLanguage(1988,Prentice-Hall),thisveryminimalprogram,whichI'llcallHello,demonstratesthefundamentalprinciplesinvolvedinusingMFCtowriteaWindowsapplication.Amongotherthings,you'llgetaclose-uplookatMFC'sCWinAppandCFrameWndclassesandseefirsthandhowclassesarederivedfromthemandpluggedintotheapplication.You'llalsolearnabouttheall-importantCPaintDCclass,whichservesastheconduitthroughwhichtextandgraphicsaredrawninawindowinresponsetoWMPAINTmessages.Finally,you'llbeintroducedtomessagemapping,themechanismMFCusestocorrelatethemessagesyourapplicationreceiveswiththememberfunctionsyouprovidetohandlethosemessages.Figure1-3liststhesourcecodeforHello.Hello.hcontainsthedeclarationsfortwoderivedclasses.Hello.cppcontainstheimplementationsofthoseclasses.AmongC++programmers,it'straditionaltoputclassdefinitionsin.hfilesandsourcecodein.cppfiles.We'llhonorthattraditionhereandthroughouttherestofthisbook.Forlargeapplicationscontainingtensorperhapshundredsofclasses,it'salsobeneficialtoputclassdeclarationsandimplementationsinseparatesourcecodefiles.That'soverkillfortheprogramsinthefirstfewchaptersofthisbook,butlateron,whenwebeginworkingwithdocumentsandviews,we'llgiveeachclassitsown.hand.cppfiles.OntheCDinthebackofthebook,inthefoldernamedChap01,you

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论