1500字范文,内容丰富有趣,写作好帮手!
1500字范文 > Java:15位或18位居民身份证号码简单校验(正则表达式)

Java:15位或18位居民身份证号码简单校验(正则表达式)

时间:2023-11-09 12:17:15

相关推荐

Java:15位或18位居民身份证号码简单校验(正则表达式)

程序只是对输入字符做简单正则校验,日期校验不支持校验闰年平年29日、大小月31日,不支持末尾校验位校验

import java.text.ParseException;import java.util.regex.Matcher;import java.util.regex.Pattern;/* * 简单的身份证正则表达式校验*/public class CheckResidentIdentityCard1 {/** * 方法:判断15位旧居民身份证及18位新居民身份证是否符合规范,利用正则表达式方法* */ private static boolean regexCheck(String cardNo) { if(null == cardNo)return false; cardNo = cardNo.trim();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 = pile("^(\\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));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));str0="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="340404199710180411";System.out.println(str0+":"+regexCheck(str0));}}

执行main()方法运行结果

000000180001011231:true00000x190001011231:false000000210001011231:false000000191301011231:true00000019x301011231:false000000190013011231:false000000190012131231:true000000190012211231:true00000019001221x231:false00000019000101123x:true00000019000101123X:true000000000101123:true00000000010112x:false000000000132123:false000000001322123:false:falsenull:false123:false0000001900010112301:false0000001900010112301:false0000001900010112301:false0000001900010112301:false340404199710180411:true

后续可以添加身份证末尾校验位校验,省份数据字典校验,出生日期正确校验等

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。