ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

Java中身份证合法校验

2019-09-03 09:35:22  阅读:911  来源: 互联网

标签:return String 校验 checkBirthday Java boolean 身份证 false idCardNo


import java.text.ParseException;
import java.text.SimpleDateFormat;

public class CardNoUtil {
  
  public static void main(String[] args) {
    String idCardNo = "xxxxxxxxxxxxx";
    boolean flag = checkIdCardNo(idCardNo);
    System.out.println(flag);
  }
  
  
  
  /**
   * 校验身份证号
   *
   * @param idCardNo 身份证号
   * @return true通过,false未通过
   */
  public static boolean checkIdCardNo(String idCardNo) {
    if (null == idCardNo) {
      return false;
    }
    idCardNo = idCardNo.toLowerCase();
    if (null == idCardNo || (idCardNo.length() != 18 && idCardNo.length() != 15)) {
      return false;
    }
    String[] RC = { "1", "0", "x", "9", "8", "7", "6", "5", "4", "3", "2" };
    boolean checkBirthday;
    String birthday;

    try {
      if (idCardNo.length() == 18) {// 18位
        birthday = idCardNo.substring(6, 14);
        checkBirthday = isDate(birthday, "yyyyMMdd");

        int[] W = { 7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2 };
        int sum = 0;
        for (int i = 0; i < idCardNo.length() - 1; i++) {
          int c = Integer.parseInt(idCardNo.substring(i, i + 1));
          sum += W[i] * c;
        }
        int r = sum % 11;
        if (RC[r].equals(idCardNo.substring(17)) && checkBirthday) {
          return true;
        } else {
          return false;
        }
      } else {//15位
        birthday = "19" + idCardNo.substring(6, 12);
        checkBirthday = isDate(birthday, "yyyyMMdd");
        if (checkBirthday) {
          return true;
        } else {
          return false;
        }
      }
    } catch (NumberFormatException e) {
      e.printStackTrace();
      return false;
    }
  }

  /**
   * 是否为合法日期
   *
   * @param dateString 日期
   * @param format 指定日期格式为四位年/两位月份/两位日期,注意yyyy/MM/dd区分大小写;
   * @return
   */
  public static boolean isDate(String dateString, String format) {
    boolean convertSuccess = true;
    //指定日期格式为四位年/两位月份/两位日期,注意yyyy/MM/dd区分大小写;
    SimpleDateFormat smf = new SimpleDateFormat(format);
    try {
      //设置lenient为false. 否则SimpleDateFormat会比较宽松地验证日期,比如2007/02/29会被接受,并转换成2007/03/01
      smf.setLenient(false);
      smf.parse(dateString);
    } catch (ParseException e) {
      //e.printStackTrace();
      //如果throw java.text.ParseException或者NullPointerException,就说明格式不对
      convertSuccess = false;
    }
    return convertSuccess;
  }

}
 

标签:return,String,校验,checkBirthday,Java,boolean,身份证,false,idCardNo
来源: https://blog.csdn.net/qiucheng_198806/article/details/100511229

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有