十年网站开发经验 + 多家企业客户 + 靠谱的建站团队
量身定制 + 运营维护+专业推广+无忧售后,网站问题一站解决
很多学员在测试的时候对于java编写的程序中身份*号码的正则表达式不太清楚,在此专门写一篇博文说明一下。
成都创新互联公司主要从事网页设计、PC网站建设(电脑版网站建设)、wap网站建设(手机版网站建设)、响应式网站设计、程序开发、网站优化、微网站、微信小程序等,凭借多年来在互联网的打拼,我们在互联网网站建设行业积累了丰富的成都网站设计、成都网站建设、网站设计、网络营销经验,集策划、开发、设计、营销、管理等多方位专业化运作于一体。首先要明白身份*号码的编码规则,然后根据编码规则去写正则表达式:
18位身份*号编码规则如下:
第1位和第2位:省,自治区,直辖市代码(有关取值可查看代码表);
第3位和第4位:地级市,盟,自治州代码(有关取值可查看代码表);
第5位和第6位:县,县级市,区代码(有关取值可查看代码表);
第7位到第10位:出生年;
第11位和第12位:出生月;
第13位和第14位:出生日;
第15位到第17位:顺序码,第17位若是男生则为单数,若是女生则为双数(大家可以自己验证一下);
第18位:表示校验码,可以是0-9或者X(注意是大写的);
所以验证18位身份*号码的正则表达式为:
"^[1-9]\\\\d{5}[1-9]\\\\d{3}((0[1-9])||(1[0-2]))((0[1-9])||(1\\\\d)||(2\\\\d)||(3[0-1]))\\\\d{3}([0-9]||X)$"
其中:
1、^表示开始,$表示结束;
2、前六位:[1-9]第一位是1-9其中一位,后面是0-9随机数5个({5}表示五位数的意思);
3、年份:[1-9]\\\\d{3}表示年份是1-9开始加0-9随机数三个,例如1994;
4、月份:((0[1-9])||(1[0-2]))表示月份是01-09或者10-12其中的两位数;
5、日:((0[1-9])||(1\\\\d)||(2\\\\d)||(3[0-1]))表示01-09或者10-19或者20-29或者30-31其中的两位数;
6、最后四位:\\\\d{3}([0-9]||X)表示3位0-9的随机数加0-9其中一位或者X;
但是以上正则表达式验证的身份*号码只能说是符合×××编码规则,不能确定×××是否有效。因为即使以上的正则表达式仍然无法避免出现2月31日的情况,另外,对于最后一位的校验码是根据具体的公式推算出来的,不是随机的。但是对于当下的一般项目来说,这个正则表达式已经算是比较严谨的一个了。
补充:15位的身份*号已经不再使用,但是对于15位身份*号码的正则表达式也进行一下补充,供大家参考:
"^[1-9]\\\\d{7}((0[1-9])||(1[0-2]))((0[1-9])||(1\\\\d)||(2\\\\d)||(3[0-1]))\\\\d{3}$"
说明:15位×××出生年显示两位,例如1994年出生,18位×××显示1994,而15位则显示94,另外15位×××无校验码,所以整体比18位身份*号少了3位。
附-×××号最后一位校验码的确定算法为:
1、将身份*号前17位数分别乘以不同的系数。从第一位到第十七位的系数分别为:
7-9-10-5-8-4-2-1-6-3-7-9-10-5-8-4-2;
2、将这17位数字和系数相乘的结果相加,用加出来和除以11,确定余数;
3、余数只可能有0-1-2-3-4-5-6-7-8-9-10这11个数字,其分别对应的最后一位×××的号码为1-0-X-9-8-7-6-5-4-3-2。
大家可以亲自尝试测试一下,看一看用自己身份*号的前17位是否可以推导出最后一位检验码。
讲师更多课程请访问:http://edu.51cto.com/lecturer/5811414.html
另外有需要云服务器可以了解下创新互联scvps.cn,海内外云服务器15元起步,三天无理由+7*72小时售后在线,公司持有idc许可证,提供“云服务器、裸金属服务器、高防服务器、香港服务器、美国服务器、虚拟主机、免备案服务器”等云主机租用服务以及企业上云的综合解决方案,具有“安全稳定、简单易用、服务可用性高、性价比高”等特点与优势,专为企业上云打造定制,能够满足用户丰富、多元化的应用场景需求。