號碼的結構
公民身份號碼是特徵組合碼,由十七位數字本體碼和一位校驗碼組成。排列順序從左至右依次為:六位數字位址碼 ,八位數字出生日期碼 ,三位數字順序碼 和一位數字校驗碼 。
校驗碼的計算
(1)十七位數字本體碼 加權求和公式
s = sum(ai * wi), i = 0, ... , 16 ,先對前 17 位數字的權求和
ai: 表示第 i 位置上的身份證號碼數字值
wi: 表示第 i 位置上的加權因子
wi: 7 9 10 5 8 4 2 1 6 3 7 9 10 5 8 4 2 s:
=(4*7+5*9+2*10+1*5+2*8+4*4+1*2+9*1+8*6+3*3+0*7+7*9+0*10+3*5+0*8+3*4+9*2)
= 306;
(2)計算模
y = mod(s, 11)
y=306%11=9;
(3)通過模得到對應的校驗碼
y: 0 1 2 3 4 5 6 7 8 9 10
校驗碼
: 1 0 x 9 8 7 6 5 4 3 2
class verifyidcard ;
// 校驗碼
final int vi = ;
private int ai = new int[18];
public verifyidcard()
// 校驗身份證的校驗碼
public boolean verify(string idcard)
if (idcard.length() != 18)
string verify = idcard.substring(17, 18);
if (verify.equals(getverify(idcard)))
return false;
} // 15位轉18位
public string uptoeighteen(string fifteen)
// 計算最後一位校驗值
public string getverify(string eighteen)
if (eighteen.length() == 17)
for (int i = 0; i < 17; i++)
remain = sum % 11;
} return remain == 2 ? "x" : string.valueof(vi[remain]);
}}
java驗證身份證號碼
介紹 yyyy mm dd 375 0 十八位 yy mm dd 75 0 十五位 地區 1 9 d 年的前兩位 18 19 23 d 1800 2399 年的後兩位 d 月份 0 1 9 10 11 12 天數 0 2 1 9 10 20 30 31 閏年不能禁止29 三位順序碼 d 兩位順序碼 ...
Java 身份證號碼驗證
之前的身份證號碼只是做了一些簡單的數字 長度,生日等驗證 最近碰到乙個框架的身份證號碼驗證有些奇怪,在網上搜了一通,終於找到了規則,所以在這裡記錄一下,一遍以後再用,也分享給廣大開發者.驗證身份證號碼 param snumber 身份證號碼 public static boolean check s...
身份證號碼驗證
說明 驗證身份證的有效性 引數 cid 身份證號碼 返回 地方 出生時間 性別 private string checkcidinfo string cid if cid.length 18 char c cid cid.length 1 bool last false if c 0 c 9 c a...