- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
基于java的身份证转换函数的设计与实现
在许多使用数据库管理系统而参与人员数据管理时,大多数会捕获身份验证信息,并将身份验证信息用作表的密钥段(主键、外键、唯一索引等)。近年来,国内正在进行身份证换代工程,号码由15位升为18位,相当多的信息系统都面临一个类似的技术需求,即如何处理这两种身份证号码的唯一性。也就是说,每个15位号码有一个对应的18位号码,虽然在数据库层两个号码不重复,但是在业务上,两个号码是一致的。
单纯从技术的角度上看,由于存在号码转换规则,将15位身份证转换为18位身份证并不困难(反之亦然),所以判断两个不同版本的号码是否一致也不困难。但是,如果放到技术实现的角度来考虑,就会暴露许多问题。首先,所有的数据库产品都没有内建的函数(功能)支持两个版本的身份证转换,需要开发者自行开发相关的功能;其次,在目前15位身份证与18位身份证混用的状态下,将一个信息系统中所有相关数据表里的15位身份证利用外部手段(外部程序或手工操作)一次性转为18位在某些业务上是不允许的,比如电子档案系统,需要如实反映纸质档案的原始情况,除非纸质档案发生改变。因此,当业务上需要同时在数据库中保留两种格式的身份证,同时又必须在业务上判断唯一性的时候,技术处理的手段就非常重要了,目前,绝大多数的系统都是采用客户机/服务器模式,因此,很多系统将身份证转换的处理放到了客户机上实现。
在客户机上实现这种功能无疑会带来系统的复杂性,以在一个数据表(假设为T1)中判断身份证字段(假设为SFD)是否存在某一个号码id为例,客户机程序首先需要将号码id转为两个版本的身份证号码:id15, id18,然后用以下逻辑判断数据表中是否存在这个号码:
另外一种解决思路是利用数据库的自定义函数功能,开发者按照身份证的号码转换规则编写自定义函数实现该功能,使得在数据库一级支持身份证的号码转换,大多数关系型数据库都支持扩展的结构化查询语言(SQL),可利用这些语句创建自定义的函数或存储过程,但是遗憾的是,SQL的语法较为简单,操作数据表效率尚可,用于实现身份证号码转换的逻辑就力不从心,强行要实现,效率也会十分低。
大多数关系型数据库都支持外部功能扩展,本文以Oracle为例,介绍一个用Java实现的身份证程序,然后将该程序改造为一个Oracle上的自定义函数。
1 java正在改变身份验证号
1.1 结构及别角公式
在我国,身份证存在两个版本,早期的15位长,称为第一代身份证,现在使用的是第二代身份证,18位长,根据1999年公布的中华人民共和国国家标准GB11643-1999中有关身份证号码的规定,第二代身份证号码是特征组合码,由17位数字本体码和1位数字校验码组成,两代身份证之间的结构及差别主要反映在出身日期码的长度及数字校验码上,假设一个出生于1982年1月1日,户口所在地在广州市天河区的男性公民,其两代身份证号码的结构可能如图1所示:
可以看出,两代身份证的数字本体码区别不大,主要是出生日期的年份长度有别,区别主要在于第二代身份证多了一个校验位,根据GB11643-1999中的规定,身份证的校验位是根据身份证的前17位数字本体码,按照ISO 7064:1983.MOD 11-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) get Verify:计算17位数字本体码的校验位;完成了这一步,就可以准备在Oracle中利用这个Java程序了。
2 系统技术方案
大多数的Oracle开发者都习惯于利用PL/SQL开发与SQL数据紧密结合的服务器端应用。但是,由Oracle8i开始,Oracle就增加了对Java技术的支持,O-racle可利用Java技术实现更加方便的扩展性和性能。Java技术的一个最大的吸引力在于其
您可能关注的文档
- 15mw直驱风力机多体系统动力学分析.docx
- 21世纪海上丝绸之路视域下海域的海洋环境特征研究.docx
- 1000kv双回路特高压输电塔等效静力风荷载研究.docx
- 北京市高年级小学生电子产品使用时间现况及影响因素.docx
- 病人身份识别系统常见错误的识别.docx
- 不同冲击荷载下花岗岩力学特性试验研究.docx
- 测控电路课程设置与教学实践.docx
- 常用血液净化方法对维持性血液透析患者血清甲状旁腺素清除效果的比较.docx
- 超滤反渗透法与电吸附法在钢铁企业总排废水深度处理回用工程上的应用比较.docx
- 超滤膜技术在水处理中的应用.docx
- 2023年克拉玛依市直遴选笔试真题汇编带答案解析.docx
- 2023年太原市直属机关遴选公务员笔试真题汇编带答案解析.docx
- 2025海南海口市秀英区招聘卫健系统事业编制人员(第六号)备考题库带答案解析.docx
- 2026中国建设银行青海省分行校园招聘130人备考题库含答案详解(突破训练).docx
- 2026中国建设银行辽宁省分行校园招聘280人备考题库附答案详解(巩固).docx
- 2023年商洛市直属机关遴选公务员笔试真题汇编附答案解析(夺冠).docx
- 2026中国建设银行贵金属及大宗商品业务部校园招聘3人备考题库带答案详解.docx
- 2026中国建设银行重庆市分行校园招聘370人备考题库及答案详解(历年真题).docx
- 2025四川省生态环境厅直属事业单位四川省生态环境科学研究院考核招聘专业技术人员13人考试参考题库含.docx
- 2026中国民生银行秋季校园招聘备考题库附答案详解(轻巧夺冠).docx
原创力文档


文档评论(0)