驗證身份證號的正確性

2022-02-05 06:59:46 字數 2422 閱讀 4502

1.需求:

填寫人員資訊時,輸入的身份證號保證不會輸入錯誤,對輸入的身份證號進行校驗

身份證校驗  

如果讓你設計個程式,用什麼變數儲存身份證號碼呢?長整數可以嗎?不可以! 

因為有人的身份證最後一位是 "x"  實際上,除了最後一位的x,不會出現其它字母!  身份證號碼18位 = 17位 + 校驗碼

2.實現的演算法:iso 7064:1983.mod11-2校驗碼計算法

3.思路:

很多遊戲賬號申請,或者某些**註冊時需要填身份證號,當輸入錯誤的身份證號時會提示出錯,感覺好像真能識別身份證資訊一樣,其實不然。

實質上由於其沒有許可權接入公安系統,它只能根據最後一位校驗位來判斷該身份證號碼是否有效,為了不洩露個人隱私,而又可以輕鬆的拿到賬號,可以偽造身份證號,前17為自己隨機偽造,只需要計算出最後一位校驗位即可。

iso 7064:1983.mod11-2校驗碼計算法 : (身份證校驗碼-18位)

假設某一17位數字是

17位數字 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7

加權因子 7 9 10 5 8 4 2 1 6 3 7 9 10 5 8 4 2

計算17位數字各位數字與對應的加權因子的乘積的和s:1×7+2×9+3×10+4×5+5×8+6×4+7×2+8×1+9×6+0×3+1×7+2×9+3×10+4×5+5×8+6×4+7×2=368;

計算s÷11的餘數t:368 mod 11=5;

(( 餘數0-10對應校驗碼為[1, 0, x , 9, 8, 7, 6, 5, 4, 3, 2],演算法如下 ))

計算(12-t)÷11的餘數r,如果r=10,校驗碼為字母「x」;如果r≠10,校驗碼為數字「r」:(12-5)mod 11=7。

該17位數字的校驗碼就是7,聚合在一為123456789012345677。

使用以上演算法計算一下自己身份證最後一位,即可知道演算法正確與否。

4.身份證號驗證工具類

public class idcardutil 

final static int paritybit = ;

final static int power_list = ;

/*** 身份證驗證

*@param certno 號碼內容

*@return 是否有效 null和"" 都是false

*/public static boolean isidcard(string certno)

}//校驗區位碼

if (!zonenum.containskey(integer.valueof(certno.substring(0, 2))))

//校驗年份

string year = certno.length() == 15 ? getidcardcalendar() + certno.substring(6, 8) : certno.substring(6, 10);

final int iyear = integer.parseint(year);

if (iyear < 1900 || iyear > calendar.getinstance().get(calendar.year))

return false;//2023年的pass,超過今年的pass

//校驗月份

string month = certno.length() == 15 ? certno.substring(8, 10) : certno.substring(10, 12);

final int imonth = integer.parseint(month);

if (imonth < 1 || imonth > 12)

//校驗天數

string day = certno.length() == 15 ? certno.substring(10, 12) : certno.substring(12, 14);

final int iday = integer.parseint(day);

if (iday < 1 || iday > 31)

return false;

//校驗"校驗碼"

return certno.length() == 15 || cs[cs.length - 1] == paritybit[power % 11];

}private static int getidcardcalendar()

/** 特別注意: 」ⅹ「 是 羅馬數字 10, 不是 英文大寫字母 」x「, 此處為了編碼方便,使用了英文本母 『x』 代替; */

}

身份證號驗證

原文 身份證號驗證 public static boolean isidnumber string idnumber 定義判別使用者身份證號的正規表示式 15位或者18位,最後一位可以為字母 string regularexpression 1 9 d 18 19 20 d 0 1 9 10 11 ...

身份證號驗證

身份證號組成 17位數字 1位校驗碼 位址碼 前六位 出生日期碼 第七位至第十位 順序碼 第十五位至十七位 對同年同月同日生的人便定的順序號,順序號奇數為男生,偶數為女生 檢驗碼 第十八位 0 9 x var acity function iscarid sid d x i.test sid ret...

js 身份證號驗證

function iscardid sid var isum 0 var info if d d x i.test sid return 身份證長度或格式錯誤 sid sid.replace x i,a if acity parseint sid.substr 0,2 null return 身份證...