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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

居民身份证号码校验

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

現在的互聯網應用,大部分都會有實名認證操作,而這部分調用第三方費用是很高的,由于身份證位數太多,用戶很容易輸錯,所以必須對用戶輸入的值進行驗證。要進行驗證,需要先知道身份證號碼的結構

結構和形式

公民身份號碼是特征組合碼,由十七位數字本體碼和一位校驗碼組成。排列順序從左至右依次為:六位數字地址碼,八位數字出生日期碼,三位數字順序碼和一位數字校驗碼。
- 地址碼 表示編碼對象常住戶口所在縣(市、旗、區)的行政區劃代碼,按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){//有些老身份證會有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];} }

    總結

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

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