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

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

目录
相关文章
|
6月前
|
数据采集 Web App开发 前端开发
Python+Selenium爬虫:豆瓣登录反反爬策略解析
Python+Selenium爬虫:豆瓣登录反反爬策略解析
|
11月前
|
自然语言处理 搜索推荐 数据可视化
2024高效年终总结:用看板工具和GRAI方法提升效率
本文介绍如何用看板管理帮助团队做出有亮点、有逻辑、有冲突、有方案的年终总结,并提供5种工作总结SOP模板,如GRAI复盘法、SCQA表达法等,使总结更有条理、更有说服力。
282 8
2024高效年终总结:用看板工具和GRAI方法提升效率
|
12月前
|
人工智能 安全 搜索推荐
AI与能源管理:智能电网的未来
本文探讨了AI与智能电网的融合及其对能源管理的深远影响。智能电网利用先进的信息、通信和AI技术,实现电力的自主、智能化、高效管理。AI在精准预测电力需求、实时监测与故障诊断、智能能源调度、个性化能源服务和优化可再生能源利用等方面发挥关键作用,推动能源管理的高效、智能和可持续发展。
|
12月前
|
资源调度 监控 大数据
大数据计算资源管理
【10月更文挑战第25天】
403 4
|
运维 Kubernetes API
k8s临时容器ephemeral
k8s临时容器ephemeral
|
缓存 Java 数据库
kswapd0 进程CPU占用过高
kswapd0 进程CPU占用过高
1028 2
kswapd0 进程CPU占用过高
|
定位技术
ArcGIS中ArcMap栅格图层0值设置为NoData值的简便方法
ArcGIS中ArcMap栅格图层0值设置为NoData值的简便方法
751 1
|
Unix 测试技术 块存储
华为、阿里巴巴、字节跳动 100+ Python 面试问题总结(一)(2)
华为、阿里巴巴、字节跳动 100+ Python 面试问题总结(一)(2)
华为、阿里巴巴、字节跳动 100+ Python 面试问题总结(一)(2)
|
网络协议 安全 Linux
TCP 三次握手与四次挥手深入探究(大图解)
TCP 三次握手与四次挥手深入探究(大图解)
879 1
|
数据采集 运维 监控
自动化运维平台设计之【文件分发】
本文介绍自动化运维平台设计中的四种文件分发的工具:Ansible、SaltStack、蓝鲸作业平台、P2P。
1738 0
下一篇
开通oss服务