1.需求:
填寫人員資訊時,輸入的身份證號保證不會輸入錯誤,對輸入的身份證號進行校驗
身份證校驗2.實現的演算法:iso 7064:1983.mod11-2校驗碼計算法如果讓你設計個程式,用什麼變數儲存身份證號碼呢?長整數可以嗎?不可以!
因為有人的身份證最後一位是 "x" 實際上,除了最後一位的x,不會出現其它字母! 身份證號碼18位 = 17位 + 校驗碼
3.思路:
很多遊戲賬號申請,或者某些**註冊時需要填身份證號,當輸入錯誤的身份證號時會提示出錯,感覺好像真能識別身份證資訊一樣,其實不然。4.身份證號驗證工具類實質上由於其沒有許可權接入公安系統,它只能根據最後一位校驗位來判斷該身份證號碼是否有效,為了不洩露個人隱私,而又可以輕鬆的拿到賬號,可以偽造身份證號,前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。
使用以上演算法計算一下自己身份證最後一位,即可知道演算法正確與否。
public class idcardutilfinal 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 身份證...