身份证可以为15位也可以为18位
从身份证中得出出生日期
import java.util.regex.Matcher;
import java.util.regex.Pattern;
/*
* 用正则表达式验证身份证号码
*/
public class idCardTest {
public static void testID_Card(){
//测试是否为合法的身份证号码
String[] str={
"130681198712092019",
"13068119871209201x",
"130681198711209201",
};
//准备正则表达式(身份证有15位和18位两种),最后一位可能为字母
String regex="(\\d{14}\\w)|\\d{17}\\w";
//准备开始匹配,判断所有输入是否正确
Pattern regular=Pattern.compile(regex);//创建匹配的规则Pattern
StringBuilder sb=new StringBuilder();
//遍历所有要匹配的字符串
for(int i=0;i<str.length;i++){
Matcher matcher=regular.matcher(str[i]);
sb.append("身份证:");
sb.append(str[i]);
sb.append("匹配:");
sb.append(matcher.matches());
System.out.println(sb.toString());
sb.delete(0, sb.length());
}
getBirthDay(str);
}
private static void getBirthDay(String[] str){
System.out.println("准备开始获取出生日期:");
//准备验证规则
Pattern BirthDayRegular=Pattern.compile("(\\d{6})(\\d{8})(.*)");
//.*连在一起的意思 任意数量的不包含换行的字符
Pattern YearMonthDayRegular=Pattern.compile("(\\d{4})(\\d{2})(\\d{2})");
for(int i=0;i<str.length;i++){
Matcher matcher=BirthDayRegular.matcher(str[i]);
if(matcher.matches()){
Matcher matcher2=YearMonthDayRegular.matcher(matcher.group(2));
if(matcher2.matches()){
System.out.println(str[i]+"中的出生年份分解为"+matcher2.group(1)
+"年"+matcher2.group(2)+"月"+matcher2.group(3));
}
}
}
}
public static void main(String[] args) {
// TODO Auto-generated method stub
testID_Card();
}
}