身份证号的校验-java

我们都知道,现今身份证号采用18位,格式为:610101-19981101-911-X 。

  • 第1、2位数字表示:所在省份的代码;
  • 第3、4位数字表示:所在城市的代码;
  • 第5、6位数字表示:所在区县的代码;
  • 第7~14位数字表示:出生年、月、日;
  • 第15、16位数字表示:所在地的派出所的代码;
  • 第17位数字表示性别:奇数表示男性,偶数表示女性
  • 第18位数字是校检码:检验码分别是0-10共11个数字,当检验码为“10”时,为了保证公民身份证号码18位,所以用“X”表示。虽然校验码为“X”不能更换,但若需全用数字表示,只需将18位公民身份号码转换成15位居民身份证号码,去掉第7至8位和最后1位3个数字。
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.GregorianCalendar;
import java.util.Hashtable;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class CheckIdcardIsLegal {
   


public static String checkIdCard(String Idcard){
   

String mesgStr = "";
String Id = "";
//最后位为X或x时统一大写
Idcard = Idcard.toUpperCase();
//判断号码的长度为18位
if(Idcard.length()!=15 && Idcard.length()!=18){
   
mesgStr = "身份证号码位数应该为15位或18位!";
return mesgStr;
}
//如果为15位,则所有号码都为数字,如果为18位,前17位为数字
if(Idcard.length()==15){
   
//将15位身份证转换为17位数字
Id = Idcard.substring(0, 6) + "19" + Idcard.substring(6, 15);  

}else if(Idcard.length()==18){
   
Id = Idcard.substring(0, 17);
}

if(!isNumeric(Id)){
   
mesgStr = "身份证15位号码都应为数字 ; 18位号码除最后一位外,都应为数字!";
return mesgStr;
}

// 判断出生年月是否有效   
        String strYear = Id.substring(6, 10);// 年份  
        String strMonth = Id.substring(10, 12);// 月份  
        String strDay = Id.substring(12, 14);// 日期  
        if (isDate(strYear + "-" + strMonth + "-" + strDay) == false) {
     
        mesgStr = "身份证出生日期无效!";  
           
  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值