1、创建测试表,create table test_certno(cert_no varchar2(50));
2、插入验证数据;
insert into test_certno values('311224198611012011');
insert into test_certno values('301224195509012011');
insert into test_certno values('211224199610012011');
insert into test_certno values('21122419961001201X');
insert into test_certno values('321224199018012011');
insert into test_certno values('101224198700012011');
3、编写正则表达式sql;select * from test_certno a, (select * from test_certno t where REGEXP_LIKE(t.cert_no, '(^[1-9]\d{5}(18|19|([23]\d))\d{2}((0[1-9])|(10|11|12))(([0-2][1-9])|10|20|30|31)\d{3}[0-9Xx]$)|(^[1-9]\d{5}\d{2}((0[1-9])|(10|11|12))(([0-2][1-9])|10|20|30|31)\d{2}[0-9Xx]$)')) b where a.cert_no = b.cert_no(+)
4、查询验证结果,发现未匹配上的身份证号码;
正则就是你身份证的正面,正面就是表达正则
以黑龙江省的身份证给你讲一下:
15位
1-6位是你所在的地方
7-12位是你的生日
13-15位是你的身份证号
18位
1-6位是你所在的地方
7-14位是你的生日
15-17位是你的身份证号
18位是校验码
身份证号1 3 5 7 9是男性 2 4 6 8 0是女性
校验码不按男女算,有的还是X.
如:
230102800808002(15位)
23黑龙江省01哈尔滨市02道里区800808生日002身份证号
230102198008080021
23黑龙江省01哈尔滨市02道里区19800808生日002身份证号1校验码
望采纳啊
15位数身份证验证正则表达式:
isIDCard1=/^[1-9]\d{7}((0\d)|(1[0-2]))(([0|1|2]\d)|3[0-1])\d{3}$/;
18位数身份证验证正则表达式 :
isIDCard2=/^[1-9]\d{5}[1-9]\d{3}((0\d)|(1[0-2]))(([0|1|2]\d)|3[0-1])\d{3}([0-9]|X)$/;
//身份证正则表达式(15位)
isIDCard1=/^[1-9]\d{7}((0\d)|(1[0-2]))(([0|1|2]\d)|3[0-1])\d{3}$/;
//身份证正则表达式(18位)
isIDCard2=/^[1-9]\d{5}[1-9]\d{3}((0\d)|(1[0-2]))(([0|1|2]\d)|3[0-1])\d{3}([0-9]|X)$/;