程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> JAVA編程 >> 關於JAVA >> 身份證號碼驗證算法深刻研討和Java完成

身份證號碼驗證算法深刻研討和Java完成

編輯:關於JAVA

身份證號碼驗證算法深刻研討和Java完成。本站提示廣大學習愛好者:(身份證號碼驗證算法深刻研討和Java完成)文章只能為提供參考,不一定能成為您想要的結果。以下是身份證號碼驗證算法深刻研討和Java完成正文


做項目標時刻須要對拿到的數據停止“清洗”,好比剔除一些弗成能存在的身份證號碼。查閱了網上的身份證號碼驗證算法,本身也總結一下。

(一)18身份證號碼的構造

  國民身份號碼是特點組合碼,由十七位數字本體碼和一名校驗碼構成。

  分列次序從左至右順次為:六位數字地址碼,八位數字出身日期碼,三位數字次序碼和一名校驗碼。

1、地址碼

  表現編碼對象常住戶口地點縣(市、旗、區)的行政區域劃分代碼,按GB/T2260的劃定履行。

2、出身日期碼

  表現編碼對象出身的年、月、日,按GB/T7408的劃定履行,年、月、日代碼之間不消分隔符。

3、次序碼

  表現在統一地址碼所標識的區域規模內,對同年、同月、同日出身的人編定的次序號,次序碼的奇數分派給男性,偶數分派給女性。

4、校驗碼盤算步調

(1)十七位數字本體碼加權乞降公式

  S = Sum(Ai * Wi), i = 0, ... , 16 ,先對前17位數字的權乞降
  Ai:表現第i地位上的身份證號碼數字值(0~9)
  Wi:7 9 10 5 8 4 2 1 6 3 7 9 10 5 8 4 2 (表現第i地位上的加權因子)

(2)盤算模

  Y = mod(S, 11)

(3)依據模,查找獲得對應的校驗碼

  Y: 0 1 2 3 4 5 6 7 8 9 10
  校驗碼: 1 0 X 9 8 7 6 5 4 3 2

(二)依據17位數字本體碼獲得最初一名校驗碼法式實例

public class Id18 {
  int[] weight={7,9,10,5,8,4,2,1,6,3,7,9,10,5,8,4,2};  //十七位數字本體碼權重
  char[] validate={ '1','0','X','9','8','7','6','5','4','3','2'};  //mod11,對應校驗碼字符值  
  
  public char getValidateCode(String id17){
    int sum=0;
    int mode=0;
    for(int i=0;i<id17.length();i++){
      sum=sum+Integer.parseInt(String.valueOf(id17.charAt(i)))*weight[i];
    }
    mode=sum%11;
    return validate[mode];
  }
  
  public static void main(String[] args){
    Id18 test=new Id18();
    System.out.println("該身份證驗證碼:"+test.getValidateCode("14230219700101101"));  //該身份證校驗碼:3
  }
}

(三)解釋

1.法式可以依據已有的17位數字本體碼,獲得對應的驗證碼。

2.該法式可以剔除驗證碼不准確的身份證號碼。

3.15位的身份證出身年份采取年份後2位,沒有最初1位校驗碼。

4.完全的身份證18位,最初一名校驗位能夠長短數字。我們的一個項目,數據庫保留前17位數字,如許對應一些SQL語句(好比inner join)有加快感化的!!!

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved