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

简介: 杨校老师课堂之工具类-验证身份证信息编写
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月前
|
存储 人工智能 算法
【一站式备考指南】一文掌握 C++ 程序设计 课程 知识点
【一站式备考指南】一文掌握 C++ 程序设计 课程 知识点
123 0
|
4月前
|
Java 索引
杨老师课堂_Java教程第四篇之数组运用
杨老师课堂_Java教程第四篇之数组运用
35 0
|
4月前
杨校老师课堂之DeDeCMS织梦后台目录介绍篇
杨校老师课堂之DeDeCMS织梦后台目录介绍篇
33 6
|
4月前
|
Java
杨老师课堂_Java教程第三篇之控制语句
杨老师课堂_Java教程第三篇之控制语句
24 1
|
4月前
杨校老师课堂之编写验证码
杨校老师课堂之编写验证码
15 0
|
4月前
|
Java 索引
11.2日学习小结.(学生管理系统)小练习
11.2日学习小结.(学生管理系统)小练习
|
4月前
|
Java Maven
杨校老师课堂之就业信息平台
杨校老师课堂之就业信息平台
28 0
|
4月前
|
机器学习/深度学习 Java API
杨校老师课堂之Java面向对象知识点整理集锦3
杨校老师课堂之Java面向对象知识点整理集锦
20 0
|
4月前
|
机器学习/深度学习 移动开发 人工智能
C语言程序设计的50个小案例
C语言程序设计的50个小案例
|
4月前
|
算法 C语言 C++
面向考试编程C++笔记
面向考试编程C++笔记