Java:15位或18位居民⾝份证号码简单校验(正则表达式)
程序只是对输⼊字符做简单正则校验,⽇期校验不⽀持校验闰年平年29⽇、⼤⼩⽉31⽇,不⽀持末尾校验位校验
ParseException;
import Matcher;
import Pattern;
/*
* 简单的⾝份证正则表达式校验
*/
public class CheckResidentIdentityCard1 {
/*
* * ⽅法:判断15位旧居民⾝份证及18位新居民⾝份证是否符合规范,利⽤正则表达式⽅法
* */
private static boolean regexCheck(String cardNo) {
if(null == cardNo)
return false;
cardNo = im();
if (15 == cardNo.length()||18 == cardNo.length()){
/*  15位旧居民⾝份证:
*      "\\d{8}"                  1~6位分别代表省市县,这⾥不取字典表校验,只校验是否数字。
*          7~8位代表年份后两位数字
*  "(0[1-9]|1[012])"          9~10位代表⽉份,01~12⽉
*  "(0[1-9]|[12]\\d|3[01])"  11~12位代表⽇期,1~31⽇
*  "\\d{3}"                  13~15位为三位顺序号
*
*      18位新居民⾝份证:
*      "\\d{6}"                  1~6位分别代表省市县,这⾥不取字典表校验,只校验是否数字。
*  "(18|19|20)\\d{2}"        7~10位代表年份,前两位18、19、20即19世纪、20世纪、21世纪,后两位数字。
*  中国寿星之⾸:阿丽⽶罕·⾊依提,⼥,1886年6⽉25⽇出⽣于新疆疏勒县,现年134岁,⾝份证起始⽇期在19世纪
*  "(0[1-9]|1[012])"          11~12位代表⽉份,01~12⽉
*  "(0[1-9]|[12]\\d|3[01])"  13~14位代表⽇期,1~31⽇
*  "\\d{3}"                  15~17位为三位顺序号
*  "(\\d|X|x)"              18位为校验位数字,允许字母x和X
*
*  正则表达式合并为:
*  ^(\\d{6}(18|19|20)\\d{2}(0[1-9]|1[012])(0[1-9]|[12]\\d|3[01])\\d{3}(\\d|X|x))|(\\d{8}(0[1-9]|1[012])(0[1-9]|[12]\\d|3[01])\\d{3})$
* */
Pattern pattern = Patternpile("^(\\d{6}(18|19|20)\\d{2}(0[1-9]|1[012])(0[1-9]|[12]\\d|3[01])\\d{3}(\\d|X|x))|(\\d{8}(0[1-9]|1[012])(0[1-9]|[12]\\d|3[01])\\d{3})$");      Matcher m = pattern.matcher(cardNo);
return (m.matches())?true:false;
}else{
return false;
}
}
public static void main(String[] args) throws ParseException {
//数据测试
String str0="000000180001011231";
System.out.println(str0+":"+regexCheck(str0));
str0="00000x190001011231";
System.out.println(str0+":"+regexCheck(str0));
str0="000000210001011231";
System.out.println(str0+":"+regexCheck(str0));
str0="000000191301011231";
System.out.println(str0+":"+regexCheck(str0));
str0="00000019x301011231";
System.out.println(str0+":"+regexCheck(str0));
str0="000000190013011231";
System.out.println(str0+":"+regexCheck(str0));
str0="000000190012131231";
System.out.println(str0+":"+regexCheck(str0));
str0="000000190012211231";
System.out.println(str0+":"+regexCheck(str0));
System.out.println(str0+":"+regexCheck(str0));
str0="00000019001221x231";
System.out.println(str0+":"+regexCheck(str0));
str0="00000019000101123x";
System.out.println(str0+":"+regexCheck(str0));
str0="00000019000101123X";
System.out.println(str0+":"+regexCheck(str0));
str0="000000000101123";
System.out.println(str0+":"+regexCheck(str0));
str0="00000000010112x";
System.out.println(str0+":"+regexCheck(str0));
str0="000000000132123";
System.out.println(str0+":"+regexCheck(str0));
时间正则表达式javastr0="000000001322123";
System.out.println(str0+":"+regexCheck(str0));
str0="";
System.out.println(str0+":"+regexCheck(str0));
str0=null;
System.out.println(str0+":"+regexCheck(str0));
str0="123";
System.out.println(str0+":"+regexCheck(str0));
str0="0000001900010112301";
System.out.println(str0+":"+regexCheck(str0));
str0="0000001900010112301";
System.out.println(str0+":"+regexCheck(str0));
str0="0000001900010112301";
System.out.println(str0+":"+regexCheck(str0));
str0="0000001900010112301";
System.out.println(str0+":"+regexCheck(str0));
str0="340404************";
System.out.println(str0+":"+regexCheck(str0));
}
}
执⾏main()⽅法运⾏结果
000000180001011231:true
00000x190001011231:false
000000210001011231:false
000000191301011231:true
00000019x301011231:false
000000190013011231:false
000000190012131231:true
000000190012211231:true
00000019001221x231:false
00000019000101123x:true
00000019000101123X:true
000000000101123:true
00000000010112x:false
000000000132123:false
000000001322123:false
:false
null:false
123:false
0000001900010112301:false
0000001900010112301:false
0000001900010112301:false
0000001900010112301:false
340404************:true
后续可以添加⾝份证末尾校验位校验,省份数据字典校验,出⽣⽇期正确校验等