基于java的身份证转换函数的设计与实现_第1页
基于java的身份证转换函数的设计与实现_第2页
基于java的身份证转换函数的设计与实现_第3页
基于java的身份证转换函数的设计与实现_第4页
全文预览已结束

付费下载

下载本文档

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

文档简介

基于java的身份证转换函数的设计与实现

在许多使用数据库管理系统而参与人员数据管理时,大多数会捕获身份验证信息,并将身份验证信息用作表的密钥段(主键、外键、唯一索引等)。近年来,国内正在进行身份证换代工程,号码由15位升为18位,相当多的信息系统都面临一个类似的技术需求,即如何处理这两种身份证号码的唯一性。也就是说,每个15位号码有一个对应的18位号码,虽然在数据库层两个号码不重复,但是在业务上,两个号码是一致的。单纯从技术的角度上看,由于存在号码转换规则,将15位身份证转换为18位身份证并不困难(反之亦然),所以判断两个不同版本的号码是否一致也不困难。但是,如果放到技术实现的角度来考虑,就会暴露许多问题。首先,所有的数据库产品都没有内建的函数(功能)支持两个版本的身份证转换,需要开发者自行开发相关的功能;其次,在目前15位身份证与18位身份证混用的状态下,将一个信息系统中所有相关数据表里的15位身份证利用外部手段(外部程序或手工操作)一次性转为18位在某些业务上是不允许的,比如电子档案系统,需要如实反映纸质档案的原始情况,除非纸质档案发生改变。因此,当业务上需要同时在数据库中保留两种格式的身份证,同时又必须在业务上判断唯一性的时候,技术处理的手段就非常重要了,目前,绝大多数的系统都是采用客户机/服务器模式,因此,很多系统将身份证转换的处理放到了客户机上实现。在客户机上实现这种功能无疑会带来系统的复杂性,以在一个数据表(假设为T1)中判断身份证字段(假设为SFD)是否存在某一个号码id为例,客户机程序首先需要将号码id转为两个版本的身份证号码:id15,id18,然后用以下逻辑判断数据表中是否存在这个号码:另外一种解决思路是利用数据库的自定义函数功能,开发者按照身份证的号码转换规则编写自定义函数实现该功能,使得在数据库一级支持身份证的号码转换,大多数关系型数据库都支持扩展的结构化查询语言(SQL),可利用这些语句创建自定义的函数或存储过程,但是遗憾的是,SQL的语法较为简单,操作数据表效率尚可,用于实现身份证号码转换的逻辑就力不从心,强行要实现,效率也会十分低。大多数关系型数据库都支持外部功能扩展,本文以Oracle为例,介绍一个用Java实现的身份证程序,然后将该程序改造为一个Oracle上的自定义函数。1java正在改变身份验证号1.1结构及别角公式在我国,身份证存在两个版本,早期的15位长,称为第一代身份证,现在使用的是第二代身份证,18位长,根据1999年公布的中华人民共和国国家标准GB11643-1999中有关身份证号码的规定,第二代身份证号码是特征组合码,由17位数字本体码和1位数字校验码组成,两代身份证之间的结构及差别主要反映在出身日期码的长度及数字校验码上,假设一个出生于1982年1月1日,户口所在地在广州市天河区的男性公民,其两代身份证号码的结构可能如图1所示:可以看出,两代身份证的数字本体码区别不大,主要是出生日期的年份长度有别,区别主要在于第二代身份证多了一个校验位,根据GB11643-1999中的规定,身份证的校验位是根据身份证的前17位数字本体码,按照ISO7064:1983.MOD11-2算法计算出来的,其算法逻辑如下:(1)首先计算十七位数字本体码的加权和;S=Sum(Ci×Wi),其中,i—代表由右至左17位数字本体码的位置序号,i=0,…16;Ci—代表第i位置上的身份证号码字符值;Wi—代表第i位置上的权值,其取值为Mod(2(2)计算模M=Mod(S,11)(3)计算校验位Y=Mod(M+11-3,11),如果Y=10,校验位为X,其余为Y值字符。1.2证号码转换android根据上述身份证编号的规则,我们不难设计一个进行身份证号码转换的程序,限于篇幅,本文仅给出Java类的框架,需要完整代码的读者可与作者联系。身份证号码转换Java程序代码框架如图2所示:在上面的程序框架中,我们定义了一个Java类-IDTransfer,它拥有3个静态的方法(Oracle中的Java存储过程要求使用static的方法):(1)15To18:将15位身份证转换为18位身份证;(2)18To15:将18位身份证转换为15位身份证;(3)getVerify:计算17位数字本体码的校验位;完成了这一步,就可以准备在Oracle中利用这个Java程序了。2系统技术方案大多数的Oracle开发者都习惯于利用PL/SQL开发与SQL数据紧密结合的服务器端应用。但是,由Oracle8i开始,Oracle就增加了对Java技术的支持,O-racle可利用Java技术实现更加方便的扩展性和性能。Java技术的一个最大的吸引力在于其跨平台的技术特征以及强大的应用开发能力。Oracle为企业应用开发者创建、部署和管理Java应用程序提供了一个端到端的Java解决方案。该解决方案包括用以支持Java开发的客户端和服务器端可编程接口、管理工具以及集成于Oracle数据库中的虚拟机JVM。所有这些技术都100%兼容Java标准。除了集成于Oracle数据库中的JVM,Oracle中的Java技术还包括:(1)JavaStoredProcedure(Java存储过程)。用Java语言编写的Oracle存储过程(或函数)对象,类似于用PL/SQL编写的存储过程(函数)对象,可以支持用PL/SQL语句操作Java存储过程对象;(2)SQLJ。SQLJ是一个与Java编程语言紧密集成的嵌入式SQL的版本,通过在Java程序中嵌入静态SQL语句,实现对特定数据库对象的访问;(3)JDBCforOracle。JDBCforOracle是Oracle提供的一组符合JavaJDBC规范的数据库访问API,可支持由Java程序中动态地访问各类Oracle对象;(4)管理工具。负责辅助Java类的装载、管理、部署的一组工具(脚本)。上述技术中,客户端方面以JDBC技术最灵活。而服务端方面则以Java存储过程的利用最方便,很多Java程序可以不经修改(或仅经过简单的修改)就可以直接部署成为Oracle上的存储过程(函数)对象,大大扩展了Oracle的功能。下面,我们将把前面的身份证号码转换Java程序转换为Oracle上的Java函数对象。3类文件的部署编写一个Java存储过程(函数)一般包括以下几个步骤:(1)编写实现特定功能的Java源程序(这部分与编写一般的Java程序区别不大,但是要注意的是,需要被部署在Oracle上的方法应申明为static);(2)用Javac编译Java源程序,得到类文件;(3)用Loadjava将编译后的类文件装载到Oracle数据库中;(4)将装载后的Java类中的方法发布为若干个Java存储过程(函数)对象;(5)在PL/SQL中使用Java存储过程(函数)对象。下面,本文简单描述以下将IDTransfer.java程序部署为Java函数的过程:(1)编译程序,获得类文件IDTransfer.calss;(2)将类文件装载至Oracle数据库;执行命令Loadjava-userusername/passwordID-Transfer.class(3)将类中的方法15To18、18To15分别发布为两个Java函数fnID15To18、fnID18To15,PL/SQL命令如下:CreateorReplaceFunctionfnID15To18(id15invarchar2)returnVARCHAR2aslanguagejavanameIDTransfer.15To18(java.lang.String)returnjava.lang.String;CreateorReplaceFunctionfnID18To15(id18invarchar2)returnVARCHAR2aslanguagejavanameIDTransfer.18To15(java.lang.String)returnjava.lang.String;(4)使用Java函数。一旦完成上述定义,则可以像使用Oracle中其它函数对象一样使用Java函数对象,如将15位身份证id15转换为18位,可以使用PL/SQL命令:将18位身份证id18转换为15位,可以使用PL/SQL命令:SelectfnID18To15(id18)fromdual;而像本文最开始的例子中,在一个数据表(假设为T1)中判断身份证字段(假设为SFD)是否存在某一个号码id(假设是18位号码),可以使用PL/SQL命令:4数据库扩展功能Oracle的Java存储过程扩展技术,大大拓展了O-racle的服务端开发能力,很多利用PL/SQL语句很难处理的数据逻辑都可以通过Java的强大编程技巧予以实现,同时,Java开发者也可充分利用其技术积累

温馨提示

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

最新文档

评论

0/150

提交评论