身份证辅助模块,审核以及数据提取

  1. package net.java2000.tools;
  2. import java.util.*;
  3. /**
  4.  * <p>Title: 身份证辅助模块</p>
  5.  * <p>Description: 负责身份证号码的审核以及数据提取</p>
  6.  * <p>Copyright: Copyright (c) 2005</p>
  7.  * <p>Company: java2000.net</p>
  8.  * @author 赵学庆
  9.  * @version 1.0
  10.  */
  11. public class Certificate {
  12.   public static final int[] IW = {7910584216379105842};
  13.   public static final char[] szVerCode = {'1''0''X''9''8''7''6''5''4''3''2'};
  14.   /**
  15.    * 校验身份证号码的合法性
  16.    * @param str String
  17.    * @return boolean
  18.    */
  19.   public static boolean valid(String str) {
  20.     // 字符串不能是null
  21.     if (str == null) {
  22.       return false;
  23.     }
  24.     // 去掉前后空格等无用字符
  25.     str = str.trim();
  26.     // 身份证只允许15位或18位
  27.     if (str.length() != 15 && str.length() != 18) {
  28.       return false;
  29.     }
  30.     // 暂时不判断15位的情况
  31.     if (str.length() == 15) {
  32.       return true;
  33.     } else {
  34.       // 判断18位号码的校验位
  35.       return str.charAt(17) == getVerifyCode(str);
  36.     }
  37.   }
  38.   /**
  39.    * 根据字符串的前17位计算校验位
  40.    * @param str String 字符串,至少17位长度
  41.    * @return char 校验位(第18位)
  42.    */
  43.   public static char getVerifyCode(String str) {
  44.     if (str != null && str.length() >= 17) {
  45.       int IS = 0;
  46.       for (int i = 0; i < 17; i++) {
  47.         IS += (str.charAt(i) - '0') * IW[i];
  48.       }
  49.       return szVerCode[IS % 11];
  50.     } else {
  51.       return '-';
  52.     }
  53.   }
  54.   /**
  55.    * 读取身份证号码的生日信息
  56.    * @param str String 身份证号码
  57.    * @return Date 返回日期,如果不合法则返回null
  58.    */
  59.   public static Date getBirthday(String str) {
  60.     if (valid(str)) {
  61.       String birthday = str.length()==15?("19"+str.substring(6,12)):(str.substring(6,14));
  62.       return DateTools.parse(birthday,"yyyyMMdd");
  63.     } else {
  64.       return null;
  65.     }
  66.   }
  67.   /**
  68.    * 返回身份证号码的性别信息
  69.    * @param str String 身份证号码
  70.    * @return int 返回1=男性,0=女性;-1=不合法
  71.    */
  72.   public static int getGender(String str) {
  73.     if(valid(str)){
  74.       return (str.length()==15?str.charAt(14):str.charAt(16))%2==1?1:0;
  75.     }else{
  76.       return -1;
  77.     }
  78.   }
  79. }
  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值