转载地址:http://www.w3china.org/blog/more.asp?name=lhwork&id=19148

import java.util.regex.*;
 
/**
 *<p>Title:验证18/15位中国公民身份证号码,并分析有效的数据</p>
 *<p>Description:</p>
</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);
 
 
 /**
位的权
   */
 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();
 }
 
 /**
位/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;
 }
 
 /**
位时返回null
   *@returnString
   */
 public String getCheck_digitNum18() {
    returncheck_digit;
 }
 publicint getLength() {
    returnlength;
 }
 public String getSeqNum() {
    returnseqNum;
 }
 
}

import java.util.regex.*;
 
/**
 *<p>Title:验证18/15位中国公民身份证号码,并分析有效的数据</p>
 *<p>Description:</p>
</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);
 
 
 /**
位的权
   */
 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();
 }
 
 /**
位/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;
 }
 
 /**
位时返回null
   *@returnString
   */
 public String getCheck_digitNum18() {
    returncheck_digit;
 }
 publicint getLength() {
    returnlength;
 }
 public String getSeqNum() {
    returnseqNum;
 }
 
}
 

【转】身份证号码校验与信息提取 - Java 代码的更多相关文章

  1. Java实现身份证号码校验

    二话不说,直接上代码. package hope.identitycodecheck.demo; import java.text.DateFormat; import java.text.Simpl ...

  2. 国民身份证号码校验之“C#/Winform方法实现+案例分析”

    根据[中华人民共和国国家标准 GB 11643-1999]中有关公民身份号码的规定,公民身份号码是特征组合码,由十七位数字本体码和一位数字校验码组成.排列顺序从左至右依次为:六位数字地址码,八位数字出 ...

  3. JS011. 身份证号码校验(仅34行)

    身份证格式 六位数字地址码 + 八位数字出生日期码 + 三位数字顺序码 + 一位数字校验码 checkIdCard.js checkIdCard: function (idCard){ //15位和1 ...

  4. JS身份证号码校验

    var Wi = [ 7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2, 1 ]; // 加权因子 var ValideCode = [ 1, 0 ...

  5. js实现手机号码和身份证号码校验

    <script type="text/javascript"> function checkform() { var re; var ss = document.get ...

  6. iOS开发之身份证号码校验

    // //  Card.h //  THCStore // //  Created by Mac on 15/7/15. //  Copyright (c) 2015年 Mac. All rights ...

  7. 身份证号码的正则表达式及验证详解(JavaScript,Regex)

    简言 在做用户实名验证时,常会用到身份证号码的正则表达式及校验方案.本文列举了两种验证方案,大家可以根据自己的项目实际情况,选择适合的方案. 身份证号码说明 居民身份证号码,正确.正式的称谓应该是&q ...

  8. 从身份证号码中获取性别、出生日期、籍贯,并更新mongodb

    有这样的需求,人员信息是存在mongodb中,需要存放人员的身份证.性别.出生日期.籍贯等信息.通过脚本导入这些信息,但是只导入了身份证号码,其他信息空缺.现在需要补全其他信息. 其实身份证信息就包含 ...

  9. Python实现身份证号码有效性验证

    # -*- coding: utf-8 -*- import re #Errors=['验证通过!','身份证号码位数不对!','身份证号码出生日期超出范围或含有非法字符!','身份证号码校验错误!' ...

随机推荐

  1. Function.prototype.bind接口浅析

    本文大部分内容翻译自 MDN内容, 翻译内容经过自己的理解. https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Glo ...

  2. Java常用锁机制简介

    在开发Java多线程应用程序中,各个线程之间由于要共享资源,必须用到锁机制.Java提供了多种多线程锁机制的实现方式,常见的有synchronized.ReentrantLock.Semaphore. ...

  3. 原来现在很多人都用SignalR来实现Chat Room

    今天从一个业余开发的群里,看到有人要求这样一个项目需求: 1,)学员可以通过在线课堂找到自己喜欢的老师和课程. 2,)每个人可以建立自己课堂,每个课堂扣分多个子房间,交流群.设置管理员:有录音功能,可 ...

  4. UIStackView入门

    http://www.cocoachina.com/ios/20150623/12233.html

  5. Extjs布局

    今天我来总结一下extjs下面的各种布局,不仅是为了给自己做笔记,同时,也希望让刚刚接触extjs的朋友们快速的了解下,大神就不用看了.废话不多说,开始布局的讲解. (以下代码都可以直接在javasc ...

  6. php CI框架目录结构及运行机制

    CI目录结构   CI主要组成部分为,application(应用文件夹).system(系统文件夹)和index.php入口文件.     应用文件夹中主要是存放控制器.模型和视图等,系统文件夹中主 ...

  7. 变形--缩放 scale()

    缩放 scale()函数 让元素根据中心原点对对象进行缩放. 缩放 scale 具有三种情况: 1. scale(X,Y)使元素水平方向和垂直方向同时缩放(也就是X轴和Y轴同时缩放) 例如: div: ...

  8. Unity中加入Android项目的Build步骤

    转载请注明本文出自大苞米的博客(http://blog.csdn.net/a396901990),谢谢支持! 简介: 有的项目需要在Android中加入Unity功能,例如ANDROID应用中嵌入Un ...

  9. java 中多线程和锁的使用

    关键词: implements  实现  Runnable 类 run()  方法 注意点 : 创建类的实例 InterfaceController inter=new InterfaceContro ...

  10. Android 屏幕滑动事件

    http://blog.csdn.net/iamfafa/article/details/6316062 Android里有两个类 android.view.GestureDetector andro ...