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

简介: 杨校老师课堂之工具类-验证身份证信息编写
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);
  } 
}

目录
相关文章
|
3月前
|
存储 数据可视化 C++
【C++】C++-学生考试题库管理系统(源码)【独一无二】
【C++】C++-学生考试题库管理系统(源码)【独一无二】
113 0
|
5月前
杨校老师课堂之编写验证码
杨校老师课堂之编写验证码
16 0
|
5月前
|
JSON JavaScript 数据格式
杨校老师课堂之封装操作消息提醒工具类ResultCode【简直太好用】
杨校老师课堂之封装操作消息提醒工具类ResultCode【简直太好用】
32 0
|
5月前
|
前端开发 Java
杨校老师课堂之使用Ajax校验用户名是否可用
杨校老师课堂之使用Ajax校验用户名是否可用
22 0
|
5月前
杨校老师课堂之Servlet的重构为BaseServlet的步骤【内含视频讲解】
杨校老师课堂之Servlet的重构为BaseServlet的步骤【内含视频讲解】
28 0
|
6月前
|
存储 人工智能 数据安全/隐私保护
【C++面向对象】C++考试题库管理系统(源码)【独一无二】
【C++面向对象】C++考试题库管理系统(源码)【独一无二】
|
6月前
|
小程序 JavaScript Java
基于Java的大学生心理健康答题小程序设计与实现(亮点:选题新颖、可以发布试卷设置题目、自动判卷、上传答案、答案解析)
基于Java的大学生心理健康答题小程序设计与实现(亮点:选题新颖、可以发布试卷设置题目、自动判卷、上传答案、答案解析)
92 0
|
Java 关系型数据库 MySQL
题目: javaWeb学院图书借阅系统(附源码链接免费下载)
题目: javaWeb学院图书借阅系统(附源码链接免费下载)
193 0
题目: javaWeb学院图书借阅系统(附源码链接免费下载)
|
小程序 开发者
微信课程表小程序(0基础教你用,从入门到发布)
1.效果图: 2.准备工具: 3.下载代码 4.部署项目 1.打开微信小程序: 2.AppID查看方式: 3.拿出你的小手机扫码、 5.修改课程 6.项目发布
微信课程表小程序(0基础教你用,从入门到发布)
|
运维 Linux API
金鱼哥RHCA回忆录:DO447管理高级清单--创建和更新动态清单
第十二章 管理高级清单--创建和更新动态清单
167 0
金鱼哥RHCA回忆录:DO447管理高级清单--创建和更新动态清单