1. 程式人生 > >java中身份*號正則表達式

java中身份*號正則表達式

java 正則表達式 身份*號

很多學員在測試的時候對於java編寫的程序中身份*號碼的正則表達式不太清楚,我們在此專門寫一篇博文說明一下。


首先要明白身份*號碼的編碼規則,然後根據編碼規則去寫正則表達式:


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



本文出自 “昊洋_棲息處” 博客,請務必保留此出處http://zdytesting.blog.51cto.com/5811414/1946771

java中身份*號正則表達式