本站首页    管理页面    写新日志    退出


«September 2025»
123456
78910111213
14151617181920
21222324252627
282930


公告
 本博客在此声明所有文章均为转摘,只做资料收集使用。

我的分类(专题)

日志更新

最新评论

留言板

链接

Blog信息
blog名称:
日志总数:1304
评论数量:2242
留言数量:5
访问次数:7616234
建立时间:2006年5月29日




[Java代码]身份证号码校验与信息提取 - Java 代码
软件技术

lhwork 发表于 2006/10/16 11:08:24

import java.util.regex.*;   /**  *<p>Title:验证18/15位中国公民身份证号码,并分析有效的数据</p>  *<p>Description:</p>  *<p>Copyright:Copyright(c)2004</p>  *<p>Company:Labile</p>  *@authornotattributable  *@version1.0  */ publicclass Verifier {    privatestaticfinal String verify18PatternStr = "(\\d{6})" + "(\\d{8})" + "(\\d{3})" + "([\\d[xX]]{1})";  privatestaticfinal Pattern verify18Pattern = Pattern.compile(verify18PatternStr);  privatestaticfinal String verify15PatternStr = "(\\d{6})" + "(\\d{6})" + "(\\d{3})";  privatestaticfinal Pattern verify15Pattern = Pattern.compile(verify15PatternStr);      /**    *从第18到第1位的权    */  privatestaticfinalintverify18Rights[] = {7,9,10,5,8,4,2,1,6,3,7,9,10,5,8,4,2,1};  /**    *检验码校对表    */  privatestaticfinal String verify18CheckDigit[] = {"1","0","X","9","8","7","6","5","4","3","2"};      /**    *地区码    */  private String areaNum;  /**    *出生时间    */  private String birthdayNum;  /**    *顺序号    */  private String seqNum;  /**    *校验码    */  private String check_digit;    privateintlength;    publicboolean isMan() {     int num = Integer.parseInt(seqNum);     if(num%2==1) {       returntrue;     }     else       returnfalse;  }    /**    *得到生日的日期,格式:yyyy-mm-dd    *@returnString    */  public String getBirthday() {     String FullBirthdayNum = null;     if(length==15)//在生日号码前加“19”       FullBirthdayNum = "19" + birthdayNum;     else       FullBirthdayNum = birthdayNum;       String year = FullBirthdayNum.substring(0, 4);     String month = FullBirthdayNum.substring(4, 6);     String date = FullBirthdayNum.substring(6, 8);     return year + "-" + month + "-" + date;  }    public Verifier(String IDCardNO) throws LengthIllegalException, CheckDigitInvalidException, NumberInvalidException {     if(IDCardNO == null)       thrownew NumberInvalidException();     length = IDCardNO.length();     switch(length) {       case 15:         Verifier15(IDCardNO);         break;       case 18:         Verifier18(IDCardNO);         break;       default:         thrownew LengthIllegalException();     }    }    privatevoid Verifier15(String IDCardNO) throws NumberInvalidException {       Matcher m = verify15Pattern.matcher(IDCardNO);     if(m.matches()==false) {       thrownew NumberInvalidException();     }     areaNum = m.group(1);     birthdayNum = m.group(2);     seqNum = m.group(3);  }    privatevoid Verifier18(String IDCardNO) throws CheckDigitInvalidException, NumberInvalidException {       Matcher m = verify18Pattern.matcher(IDCardNO);     if(m.matches()==false) {       thrownew NumberInvalidException();     }     areaNum = m.group(1);     birthdayNum = m.group(2);     seqNum = m.group(3);     check_digit = m.group(4);         //预期的校验位:     String expect_check_digit = getCheck_digit18(IDCardNO);       //如果校验位无效     if(expect_check_digit.equalsIgnoreCase(check_digit)==false)       thrownew CheckDigitInvalidException();  }    /**    *从18位/17位身份证号算出校验位    *@paramIDCardNOString    *@returnString    */  publicstatic String getCheck_digit18(String IDCardNO) {     //权总值     int sum = 0;     for(int i=0; i<=16; i++) {       int num = Integer.parseInt( IDCardNO.substring(i,i + 1) );       int right = verify18Rights[i];       sum = sum + num*right;     }     //对权总值取模     int y = sum % 11;     returnverify18CheckDigit[y];  }    publicstatic String IDCardNO15To18(String IDCardNO15) throws       NumberInvalidException {       Matcher m = verify15Pattern.matcher(IDCardNO15);     if(m.matches()==false) {       thrownew NumberInvalidException();     }       String NO17 = IDCardNO15.substring(0,6) + "19" + IDCardNO15.substring(6,15);     return NO17 + getCheck_digit18(NO17);  }    public String getAreaNum() {     returnareaNum;  }    public String getBirthdayNum() {     returnbirthdayNum;  }    /**    *返回校验位,只有18位身份证可用,15位时返回null    *@returnString    */  public String getCheck_digitNum18() {     returncheck_digit;  }  publicint getLength() {     returnlength;  }  public String getSeqNum() {     returnseqNum;  }   }     下载源文件


阅读全文(7152) | 回复(0) | 编辑 | 精华
 



发表评论:
昵称:
密码:
主页:
标题:
验证码:  (不区分大小写,请仔细填写,输错需重写评论内容!)



站点首页 | 联系我们 | 博客注册 | 博客登陆

Sponsored By W3CHINA
W3CHINA Blog 0.8 Processed in 0.055 second(s), page refreshed 144792130 times.
《全国人大常委会关于维护互联网安全的决定》  《计算机信息网络国际联网安全保护管理办法》
苏ICP备05006046号