Java:15位或18位居民身份证号码简单校验(正则表达式)
生活随笔
收集整理的這篇文章主要介紹了
Java:15位或18位居民身份证号码简单校验(正则表达式)
小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
程序只是對輸入字符做簡單正則校驗(yàn),日期校驗(yàn)不支持校驗(yàn)閏年平年29日、大小月31日,不支持末尾校驗(yàn)位校驗(yàn)
import java.text.ParseException; import java.util.regex.Matcher; import java.util.regex.Pattern;/* * 簡單的身份證正則表達(dá)式校驗(yàn) */ public class CheckResidentIdentityCard1 {/** * 方法:判斷15位舊居民身份證及18位新居民身份證是否符合規(guī)范,利用正則表達(dá)式方法* */ 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位分別代表省市縣,這里不取字典表校驗(yàn),只校驗(yàn)是否數(shù)字。* 7~8位代表年份后兩位數(shù)字* "(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位分別代表省市縣,這里不取字典表校驗(yàn),只校驗(yàn)是否數(shù)字。* "(18|19|20)\\d{2}" 7~10位代表年份,前兩位18、19、20即19世紀(jì)、20世紀(jì)、21世紀(jì),后兩位數(shù)字。* 中國壽星之首:阿麗米罕·色依提,女,1886年6月25日出生于新疆疏勒縣,現(xiàn)年134歲,身份證起始日期在19世紀(jì)* "(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位為校驗(yàn)位數(shù)字,允許字母x和X* * 正則表達(dá)式合并為:* ^(\\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 = Pattern.compile("^(\\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 {//數(shù)據(jù)測試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)); } }執(zhí)行main()方法運(yùn)行結(jié)果
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 340404199710180411:true后續(xù)可以添加身份證末尾校驗(yàn)位校驗(yàn),省份數(shù)據(jù)字典校驗(yàn),出生日期正確校驗(yàn)等
總結(jié)
以上是生活随笔為你收集整理的Java:15位或18位居民身份证号码简单校验(正则表达式)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 如何准备OCP考试?
- 下一篇: 安卓手机虚拟按键