杨校老师课堂之工具类-验证身份证信息编写

简介: 杨校老师课堂之工具类-验证身份证信息编写
package cn.javabs.utils;


import cn.javabs.file.FileReaderWriter;


/**
 * @author Mryang
 *  验证身份证信息
 */
public class ValidatorCardNo {
  
  //校验加权因子数组
  private  static final int[] checkCodes = new int[]{7,9,10,5,8,4,2,1,6,3,7,9,10,5,8,4,2};
  //最后一位列表字符
  private  static final String  str = "10X98765432" ;
  
  /**
   * 验证身份证号码位数是否为18位
   * 
   */
  public  static  boolean  validatorLength(String no){
    return  no.length() == 18 ? true : false ;
  }
  
  /**
   * 验证身份证号码是否是数字或最后一位是字母
   * @param no
   * @return
   */
  public  static  boolean  validatorStyle(String no){
    String last_char = no.substring(17, 18);
    if(!last_char.equals("0") && !ValidatorNum.isNum(last_char) && !last_char.equalsIgnoreCase("x")){
      System.out.println("身份证最后一位出现非法字符!");
      return  false ;
    }
    if(!ValidatorNum.isNum(no.substring(1, 17))){
      System.out.println("身份证前17位出现非数值字符!");
      return  false ;
    } 
    return  checkBirth(no);
  }
  
  /**
   * 验证身份证出生年月日是否合法
   * @return 合法返回true,否则返回false
   */
  public static  boolean checkBirth(String  no){
    String birth = no.substring(6,14);
    int year, month, day;   
    try{
      year = Integer.valueOf(birth.substring(0,4));
      month = Integer.valueOf(birth.substring(4,6));
      day = Integer.valueOf(birth.substring(6, 8));
    } catch (Exception e) {
      return false;
    }
    if((year >= 1900 && year <= 2010) && (month >=1 && month <= 12) && (day >= 1 && day <= 31)) {
      return true;
    }
    return false;
  }
  
  /**
   * 验证身份证地址码
   * @param no
   * @return
   */
  public  static  String  checkAddrCode(String  no){
    String addr = FileReaderWriter.readAddress(no);
    return  addr ;
  }
  
  /**
   * 验证身份证最后一位是否正确
   * @param
   * @return
   */
  public  static  boolean  checkCheckCode(String no){
    String chCode = no.substring(17,18);
    if(caculateCheckCode(no).equalsIgnoreCase(chCode)){
      return true;
    }
    return false;
  }
  
  /**
   * 计算身份证最后一位
   * @param   合法的身份证号码前17位
   * @return  合法的身份证号码最后一位
   */
  public  static  String  caculateCheckCode(String no){
    int total = 0;    //校验值和
    int length = 18;  //身份证长度
    int[] ins = new int[length];
    int i = 0;
    try{
      for( ; i < length - 1; i++) {
        ins[i] = Integer.valueOf(no.substring(i, i+1));
        total += (ins[i]*checkCodes[i]);
      }
    } catch(NumberFormatException e) {
      return null;
    }
    int modResult = total % 11;
    
    return str.substring(modResult, modResult+1);
  } 
}

目录
相关文章
|
5天前
|
SQL 关系型数据库 MySQL
学成在线笔记+踩坑(3)——【内容模块】课程分类查询、课程增改删、课程计划增删改查,统一异常处理+JSR303校验
课程分类查询、课程新增、统一异常处理、统一封装结果类、JSR303校验、修改课程、查询课程计划、新增/修改课程计划
学成在线笔记+踩坑(3)——【内容模块】课程分类查询、课程增改删、课程计划增删改查,统一异常处理+JSR303校验
|
3月前
杨校老师课堂之编写验证码
杨校老师课堂之编写验证码
15 0
|
3月前
|
前端开发 Java
杨校老师课堂之使用Ajax校验用户名是否可用
杨校老师课堂之使用Ajax校验用户名是否可用
13 0
|
3月前
|
JSON JavaScript 数据格式
杨校老师课堂之封装操作消息提醒工具类ResultCode【简直太好用】
杨校老师课堂之封装操作消息提醒工具类ResultCode【简直太好用】
20 0
|
3月前
杨校老师课堂之Servlet的重构为BaseServlet的步骤【内含视频讲解】
杨校老师课堂之Servlet的重构为BaseServlet的步骤【内含视频讲解】
20 0
Python_1031 查验身份证_要点全解析
这里 需要注意两点 1.满足权重和取余(等同于取模)后·的Z值与对应效验码相同。 2.前17位由于需要数学运算,所以必须是数字。 如果,不满足上面要求的,输出。
75 0
|
4月前
|
小程序 JavaScript Java
基于Java的大学生心理健康答题小程序设计与实现(亮点:选题新颖、可以发布试卷设置题目、自动判卷、上传答案、答案解析)
基于Java的大学生心理健康答题小程序设计与实现(亮点:选题新颖、可以发布试卷设置题目、自动判卷、上传答案、答案解析)
80 0
|
前端开发 JavaScript API
谷粒学院(十一)课程最终发布 | 课程列表 | 阿里云视频点播服务 | 小节实现视频上传(三)
谷粒学院(十一)课程最终发布 | 课程列表 | 阿里云视频点播服务 | 小节实现视频上传(三)
谷粒学院(十一)课程最终发布 | 课程列表 | 阿里云视频点播服务 | 小节实现视频上传(三)
|
XML SQL 前端开发
谷粒学院(十一)课程最终发布 | 课程列表 | 阿里云视频点播服务 | 小节实现视频上传(一)
谷粒学院(十一)课程最终发布 | 课程列表 | 阿里云视频点播服务 | 小节实现视频上传
谷粒学院(十一)课程最终发布 | 课程列表 | 阿里云视频点播服务 | 小节实现视频上传(一)
|
存储 编解码 前端开发
谷粒学院(十一)课程最终发布 | 课程列表 | 阿里云视频点播服务 | 小节实现视频上传(二)
谷粒学院(十一)课程最终发布 | 课程列表 | 阿里云视频点播服务 | 小节实现视频上传
谷粒学院(十一)课程最终发布 | 课程列表 | 阿里云视频点播服务 | 小节实现视频上传(二)