java代码实现15位身份证号码升级到18位

转载网址   点击打开链接

转载一份作为记录,真心不错。受教!

18位身份证号码的组成:
公民身份号码是特征组合码,由十七位数字本体码和一位校验码组成。排列顺序从左至右依次为:六位数字地址码,八位数字出生日期码, 三位数字顺序码和一位数字校验码。
六位数字地址码:
1-2位省、自治区、直辖市代码; 
3-4位地级市、盟、自治州代码;
5-6位县、县级市、区代码;
顺序码:
表示在同一地址码所标识的区域范围内,对同年、同月、同日出生的人编定的顺序号,顺序码的奇数分配给男性,偶数分配给女性。
校验码:
S = Ai * Wi, i = 2, ... , 18
Y = mod(S, 11)
i: 表示号码字符从右至左包括校验码字符在内的位置序号
Ai:表示第i位置上的身份证号码字符值
Wi:表示第i位置上的加权因子
i: 18 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2
Wi: 7 9 10 5 8 4 2 1 6 3 7 9 10 5 8 4 2 1
校验码: 1 0 X 9 8 7 6 5 4 3 2

15位身份证号码的组成:
六位数字地址码,和18位一样,但出生日期只有年代,没有带世纪19,三位数字顺序码,没有校验码。
所以在升级时,需要在六位数字地址码后加上世纪19(因为15位身份证都是2000年前的了,之后的身份证都是18位的了),还要生成校验码。

具体代码如下:

[java]  view plain copy
  1. package com.mmq;  
  2.   
  3. /** 
  4.  * @use 15位身份证升级、校验 
  5.  * @ProjectName stuff 
  6.  * @Author <a href="mailto:mhmyqn@qq.com">mumaoqiang</a></br> 
  7.  * @Date 2011-5-13 下午09:53:09 </br> 
  8.  * @FullName com.mmq.VerifyIDCardNumber.java </br> 
  9.  * @JDK 1.6.0 </br> 
  10.  * @Version 1.0 </br> 
  11.  */  
  12. public class VerifyIDCardNumber {  
  13.       
  14.     /** 
  15.      * 根据15位的身份证号码获得18位身份证号码 
  16.      * @param fifteenIDCard 15位的身份证号码 
  17.      * @return 升级后的18位身份证号码 
  18.      * @throws Exception 如果不是15位的身份证号码,则抛出异常 
  19.      */  
  20.     public String getEighteenIDCard(String fifteenIDCard) throws Exception{  
  21.         if(fifteenIDCard != null && fifteenIDCard.length() == 15){  
  22.             StringBuilder sb = new StringBuilder();  
  23.             sb.append(fifteenIDCard.substring(06))  
  24.               .append("19")  
  25.               .append(fifteenIDCard.substring(6));  
  26.             sb.append(getVerifyCode(sb.toString()));  
  27.             return sb.toString();  
  28.         } else {  
  29.             throw new Exception("不是15位的身份证");  
  30.         }  
  31.     }  
  32.       
  33.     /** 
  34.      * 获取校验码 
  35.      * @param idCardNumber 不带校验位的身份证号码(17位) 
  36.      * @return 校验码 
  37.      * @throws Exception 如果身份证没有加上19,则抛出异常 
  38.      */  
  39.     public char getVerifyCode(String idCardNumber) throws Exception{  
  40.         if(idCardNumber == null || idCardNumber.length() < 17) {  
  41.             throw new Exception("不合法的身份证号码");  
  42.         }  
  43.         char[] Ai = idCardNumber.toCharArray();  
  44.         int[] Wi = {7910584216379105842};  
  45.         char[] verifyCode = {'1','0''X''9''8''7''6''5''4''3''2'};  
  46.         int S = 0;  
  47.         int Y;  
  48.         for(int i = 0; i < Wi.length; i++){  
  49.             S += (Ai[i] - '0') * Wi[i];  
  50.         }  
  51.         Y = S % 11;  
  52.         return verifyCode[Y];  
  53.     }  
  54.       
  55.     /** 
  56.      * 校验18位的身份证号码的校验位是否正确 
  57.      * @param idCardNumber 18位的身份证号码 
  58.      * @return  
  59.      * @throws Exception 
  60.      */  
  61.     public static boolean verify(String idCardNumber) throws Exception{  
  62.         if(idCardNumber == null || idCardNumber.length() != 18) {  
  63.             throw new Exception("不是18位的身份证号码");  
  64.         }  
  65.         return getVerifyCode(idCardNumber) == idCardNumber.charAt(idCardNumber.length() - 1);  
  66.     }  
  67. }  

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
SSM体育场地预约使用系统可升级SpringBoot 程序开发环境:myEclipse/Eclipse/Idea都可以 + mysql数据库 前台技术框架: Bootstrap(一个HTML5响应式框架) 后台架构框架: SSM(SpringMVC + Spring + Mybatis) (1)登陆:用户可以通过用户名和密码进行登陆系统。 (2)修改密码:用户可以通过对在个人资料模块进行修改密码。 (3)体育场地查询:用户可以通过系统浏览该体育场地的体育场地信息,也可以根据体育场地性质、价格以及各体育场地类型等特定条件来搜索适合自己的心仪的体育场地。 (4)在线预定:用户在锁定心仪体育场地之后,可以在线进行体育场地申请,设置个人资料,填写姓名、性别、身份证号、联系方式、要求等个人资料,并上传个人。体育场地管理员就可以从后台看到你的申请了。 (5)我的预定:用户可以清楚的看到自己的预定记录; (6)用户管理:体育场地管理员可以根据用户编号或者用户姓名查找用户;添加新的用户(用户);可以编辑用户信息,修改用户的真实姓名、登录名、用户编号、密码、身份以及权限;可以删除已经无效的用户。 (7)体育场地管理:体育场地管理员可以新建体育场地类别;对体育场地性质进行添加种类,根据选择的体育场地类别,可以进行在线编辑和重置;同时,也可以删除无用的体育场地类别。 (8)体育场地信息管理:体育场地管理员可以在线编辑发布体育场地信息,编辑体育场地号,体育场地类型,体育场地图片,价格(每天),楼层,占用状态,体育场地描述等;根据体育场地性质、体育场地信息状态以及体育场地名称查询体育场地信息; (9)体育场地预定审核:体育场地管理员可以实时对自己体育场地的内部信息进行实时的更新,客户预定,可以审核,以及如果客户退房,体育场地管理员也可以实时更新自己体育场地的状态。 实体ER属性: 用户: 用户名,登录密码,姓名,性别,用户照片,出生日期,身份证号,联系电话,邮箱,家庭地址,注册时间 体育场地类型: 类型id,体育场地类型,价格(每天) 体育场地: 体育场地号,体育场地类型,体育场地图片,价格(每天),楼层,占用状态,体育场地描述 体育场地预订: 订单id,预订体育场地,体育场地类型,预订人,入住日期,预订天数,总价,订单备注,订单状态,预订时间 留言: 留言id,留言标题,留言内容,留言人,留言时间,管理回复,回复时间 新闻公告: 公告id,标题,公告内容,点击率,发布时间 -------- 不懂运行,下载完可以私聊问,可远程教学 该资源内项目源码是个人的毕设,代码都测试ok,都是运行成功后才上传资源,答辩评审平均分达到96分,放心下载使用! <项目介绍> 1、该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的,请放心下载使用! 2、本项目适合计算机相关专业(如计科、人工智能、通信工程、自动化、电子信息等)的在校学生、老师或者企业员工下载学习,也适合小白学习进阶,当然也可作为毕设项目、课程设计、作业、项目初期立项演示等。 3、如果基础还行,也可在此代码基础上进行修改,以实现其他功能,也可用于毕设、课设、作业等。 下载后请首先打开README.md文件(如有),仅供学习参考, 切勿用于商业用途。 --------

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值