生活随笔
收集整理的這篇文章主要介紹了
居民身份证号码校验
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
現在的互聯網應用,大部分都會有實名認證操作,而這部分調用第三方費用是很高的,由于身份證位數太多,用戶很容易輸錯,所以必須對用戶輸入的值進行驗證。要進行驗證,需要先知道身份證號碼的結構
結構和形式
公民身份號碼是特征組合碼,由十七位數字本體碼和一位校驗碼組成。排列順序從左至右依次為:六位數字地址碼,八位數字出生日期碼,三位數字順序碼和一位數字校驗碼。
- 地址碼 表示編碼對象常住戶口所在縣(市、旗、區)的行政區劃代碼,按GB/T2260的規定執行。
- 出生日期碼 表示編碼對象出生的年、月、日,按GB/T7408的規定執行,年、月、日代碼之間不用分隔符。
- 順序碼 表示在同一地址碼所標識的區域范圍內,對同年、同月、同日出生的人編定的順序號,順序碼的奇數分配給男性,偶數分配給女性。
- 校驗碼 根據前面十七位數字碼,按照ISO 7064:1983.MOD 11-2校驗碼計算出來的檢驗碼。
校驗碼計算方法
將前面的身份證號碼17位數分別乘以不同的系數。從第一位到第十七位的系數分別為:7-9-10-5-8-4-2-1-6-3-7-9-10-5-8-4-2。將這17位數字和系數相乘的結果相加。用加出來和除以11,看余數是多少?余數只可能有0-1-2-3-4-5-6-7-8-9-10這11個數字。其分別對應的最后一位身份證的號碼為1-0-X -9-8-7-6-5-4-3-2。(即馀數0對應1,馀數1對應0,馀數2對應X…)通過上面得知如果余數是3,就會在身份證的第18位數字上出現的是9。如果對應的數字是2,身份證的最后一位號碼就是羅馬數字x。
例如:某男性的身份證號碼為【53010219200508011x】, 我們看看這個身份證是不是合法的身份證。
首先我們得出前17位的乘積和【(5*7)+(3*9)+(0*10)+(1*5)+(0*8)+(2*4)+(1*2)+(9*1)+(2*6)+(0*3)+(0*7)+(5*9)+(0*10)+(8*5)+(0*8)+(1*4)+(1*2)】是189,然后用189除以11得出的結果是189/11=17—-2,也就是說其余數是2。最后通過對應規則就可以知道余數2對應的檢驗碼是X。所以,可以判定這是一個正確的身份證號碼。
/*** Created by Roden on 2017/6/23.*/
public class IdCardUtil {public static void main(String[] args) {System.out.println(validate(
"53010219200508011x"));}
/** 每位加權因子 */public static final int power[] = {
7,
9,
10,
5,
8,
4,
2,
1,
6,
3,
7,
9,
10,
5,
8,
4,
2};
/** 第18位校檢碼 */public static final String verifyCode[] = {
"1",
"0",
"X",
"9",
"8",
"7",
"6",
"5",
"4",
"3",
"2"};
public static boolean validate(String idCard){idCard=idCard.trim();
if(idCard.length()!=
15&&idCard.length()!=
18){
return false;}
if(idCard.length()==
15){idCard=convert15To18(idCard);}
if(!idCard.substring(
0,
17).matches(
"\\d{17}")){
return false;}
if(idCard.substring(
17,
18).equalsIgnoreCase(getVerifyCode(idCard))){
return true;}
return false;}
public static String
convert15To18(String idCard){idCard=idCard.substring(
0,
6)+
"19"+idCard.substring(
7,
15);
return idCard+getVerifyCode(idCard);}
public static String
getVerifyCode(String idCard){
char[] ic=idCard.toCharArray();
int sum=
0;
for (
int i=
0;i<
17;i++){sum+=(ic[i]-
'0')*power[i];}
return verifyCode[sum%
11];}
}
總結
以上是生活随笔為你收集整理的居民身份证号码校验的全部內容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。