日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

身份证号规则校验

發布時間:2023/12/14 编程问答 48 豆豆
生活随笔 收集整理的這篇文章主要介紹了 身份证号规则校验 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

?我們國家目前公民身份證號為15位或者18位,且最后一位可能出現字母X。其中,

15位身份證為我國第一代身份證,基本已經退出歷史舞臺。其規則如下:

前1、2位數字表示:所在省份的代碼;

第3、4位數字表示:所在城市的代碼;

第5、6位數字表示:所在區縣的代碼;

第7-12位數字表示:出生年(缺省18,19,20這種)、月、日;

第13-14位數字表示:出生順序編號;

第15位數字表示性別:奇數表示男性,偶數表示女性;

注:15位沒有X字母

18位身份證為我國第二代身份證,也就是目前我們使用的。其規則如下:

前1、2位數字表示:所在省份的代碼;

第3、4位數字表示:所在城市的代碼;

第5、6位數字表示:所在區縣的代碼;

第7-14位數字表示:出生年、月、日;

第15、16位數字表示:所在地的派出所的代碼;

第17位數字表示性別:奇數表示男性,偶數表示女性;

第18位數字是校檢碼:也有的說是個人信息碼,一般是隨計算機的隨機產生,用來檢驗身份證的正確性。根據本體碼,通過采用ISO 7064:1983,MOD 11-2校驗碼系統計算出校驗碼。算法可參考下文。前面有提到數字校驗碼,我們知道校驗碼也有X的,實質上為羅馬字符X,相當于10

18位身份證號校驗碼生成規則:

將本體碼各位數字乘以對應加權因子并求和,除以11得到余數,根據余數通過校驗碼對照表查得校驗碼。

加權因子:

取余加權公式:

S= sum(Ai + Wi),i = 0,1,2 ....,16,對應上表格1-17位置

Ai: 表示身份證上的1-17的數字

Wi: 表示上圖對應的加權因子

取模公式:Y = mod(S,11)

取模后,余數對應的校驗碼:

例:11010519491231002X

求最后一位校驗碼過程如下:

?校驗代碼如下(Java):

/*** 身份證號碼驗證* @param idCardNumber 身份證號碼* @return boolean*/ public static boolean isIdCardNumber(String idCardNumber) {if (idCardNumber == null || "".equals(idCardNumber)) {return false;}//正則表達式String regularExpression = "(^[1-9]\\d{5}(18|19|20)\\d{2}((0[1-9])|(10|11|12))(([0-2][1-9])|10|20|30|31)\\d{3}[0-9Xx]$)|" +"(^[1-9]\\d{5}\\d{2}((0[1-9])|(10|11|12))(([0-2][1-9])|10|20|30|31)\\d{3}$)";boolean matches = idCardNumber.matches(regularExpression);//判斷第18位校驗值if (matches) {if (idCardNumber.length() == 18) {try {char[] charArray = idCardNumber.toCharArray();//前十七位加權因子int[] idCardWi = {7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2};//這是除以11后,可能產生的11位余數對應的驗證碼String[] idCardY = {"1", "0", "X", "9", "8", "7", "6", "5", "4", "3", "2"};int sum = 0;for (int i = 0; i < idCardWi.length; i++) {int current = Integer.parseInt(String.valueOf(charArray[i]));int count = current * idCardWi[i];sum += count;}char idCardLast = charArray[17];int idCardMod = sum % 11;if (idCardY[idCardMod].equals(String.valueOf(idCardLast).toUpperCase())) {return true;} else {return false;}} catch (Exception e) {log.error("身份證號規則校驗異常,err={}",e.getMessage());return false;}}}return matches; }

總結

以上是生活随笔為你收集整理的身份证号规则校验的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。