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 = 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 {//数据测试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: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
后续可以添加身份证末尾校验位校验,省份数据字典校验,出生日期正确校验等
Java:15位或18位居民身份证号码简单校验(正则表达式)相关推荐
- Java:15位或18位居民身份证号码通用校验(正则表达式、日期格式、末尾校验码)
身份证号码校验,正则表达式校验.日期格式校验.18位身份证末尾校验码校验 前六位省市县号码变更频繁,这里就不做校验 import java.text.ParseException; import ja ...
- 15位或18位长度身份证号码JS验证
免责声明:身份证号为随机组合而成,不会涉及任何隐私泄密问题,也非现实生活中真实的身份证号码:身份证号码所属年龄均为18岁以上,均已通过校验. var IdNum1 = "3205831986 ...
- 验证(15位或者18位)身份证号码的正确正则表达式
我们在开发页面的过程中难免会遇到一些表单验证,以下就对身份证号码进行验证,在开发过程中做的简单笔记: 身份证号码: 18位(xxxxxx yy MM dd xxxx) 15位(xxxxxx yy MM ...
- 身份证验证信息15位或18位
一.身份证号码的结构和表示形式 1.号码的结构 根据[中华人民共和国国家标准GB11643-1999]中有关公民身份号码的规定,公民身份号码是特征组合码,由十七位数字本体码和一位校验码组成.排列顺序从 ...
- 输入一个18位的身份证号码,从中提取出生日期
输入一个18位的身份证号码,从中提取出生日期,并以"出生日期是年月*日".样的格式输出 a=input("请输入18位身份证号码") n=a[6:10] m=a ...
- 请写代码校验第二代身份证号码有效性。程序接收一个18位的身份证号码和性别,根据以下规则输出号码是有效还是无效。
请写代码校验第二代身份证号码有效性.程序接收一个18位的身份证号码和性别,根据以下规则输出号码是有效还是无效. 第二代身份证号组成规则: a) 身份证号码(18位)= 地址码(6)+ 出生日期码(8) ...
- Oracle 通过15位或18位身份证号码计算年龄、出生年月日、性别
15位身份证号码各位的含义: 地址码(前六位数):表示身份证编码对象常住户口所在省份.地市,以及县(市.旗.区)的行政区划代码,1-2位数字表示所在地省.自治区.直辖市代码,第3.4位数字表示所在地地 ...
- 15位或18位身份证验证
c#实现的18位身份证格式验证算法 18位身份证标准在国家质量技术监督局于1999年7月1日实施的GB11643-1999<公民身份号码>中做了明确的规定. GB11643-1999< ...
- 18位公民身份证号码的编排规则
18位身份证标准在国家质量技术监督局于1999年7月1日实施的GB11643-1999<公民身份号码>中做了明确规定. GB11643-1999<公民身份号码>为GB11643 ...
- java,javascript对18位身份证格式的验证算法
参考资料 1 java实现的18位身份证格式验证算法 http://fanqiang.chinaunix.net/program/java/2006-06-22/4639.shtml 原码中有 ...
最新文章
- vimrc 配置 史上最牛
- mysql 存储过程乱码的问题
- 十大经典排序算法之希尔排序及其优化
- 在Java中对Singleton类进行双重检查锁定
- Redhat7.3安装配置Telnet详细教程
- python编写装饰器_我也来写一下python装饰器
- C#中A a=new B()的意义
- 电商美工必看|Banner设计没灵感?传说中大气的画册风格给你灵感
- 重温马尔科夫随机过程
- tail 查看文件末尾n行、日志持续追踪
- Photoshop使用十大技巧
- 更改Anaconda下载源,提高下载速度
- java 传参数报文给and_技术岛-技术改变生活
- Java动态性——反射机制学习笔记
- android开发中磁场传感器,Android开发获取传感器数据的方法示例【加速度传感器,磁场传感器,光线传感器,方向传感器】...
- 星际蜗牛矿难机,j1900 4核+4G内存+16Gssd硬盘,群晖6.1,SSD引导成功
- vue页面特效:雨滴、流星
- Win7 UltraIso刻录时报错解决办法
- 称重软件这几个模块你了解吗
- 【职业规划】阿里校园招聘对java本科生的要求
热门文章
- goodFeaturesToTrack——Shi-Tomasi角点检测
- SOLIDWORKS+CAD+UG软件培训 三款电脑学习软件
- 【高等数学】方差的集合意义
- 【读书笔记】《Web全栈工程师的自我修养》
- c c python的区别_python版本的区别 Cpython Jython pypy ?
- 高速公路计算机网络安全,计算机网络安全技术在高速公路收费网络的应用
- CE游戏修改器制作游戏修改器傻瓜教程
- 另辟蹊径--极简Swifty路由
- 关于Tampermonkey(油猴)的安装和使用的小白教程
- 二层、三层与四层交换机