<code id="qf3hh"></code>
  • <menuitem id="qf3hh"></menuitem>
  • <strike id="qf3hh"><label id="qf3hh"></label></strike>

  • ?
      開發(fā)技術(shù) / Technology

      身份證號(hào)碼驗(yàn)證算法

      日期:2015年3月16日  作者:zhjw  來源:互聯(lián)網(wǎng)    點(diǎn)擊:897

      身份證號(hào)碼驗(yàn)證算法

      做項(xiàng)目的時(shí)候需要對(duì)拿到的數(shù)據(jù)進(jìn)行“清洗”,比如剔除一些不可能存在的身份證號(hào)碼。查閱了網(wǎng)上的身份證號(hào)碼驗(yàn)證算法,自己也總結(jié)一下。

      (一)18身份證號(hào)碼的結(jié)構(gòu)
        公民身份號(hào)碼是特征組合碼,由十七位數(shù)字本體碼和一位校驗(yàn)碼組成。

        排列順序從左至右依次為:六位數(shù)字地址碼,八位數(shù)字出生日期碼,三位數(shù)字順序碼和一位校驗(yàn)碼。 
      1、地址碼 
        
      表示編碼對(duì)象常住戶口所在縣(市、旗、區(qū))的行政區(qū)域劃分代碼,按GB/T2260的規(guī)定執(zhí)行。
      2、出生日期碼 
        表示編碼對(duì)象出生的年、月、日,按GB/T7408的規(guī)定執(zhí)行,年、月、日代碼之間不用分隔符。 
      3、順序碼 
        
      表示在同一地址碼所標(biāo)識(shí)的區(qū)域范圍內(nèi),對(duì)同年、同月、同日出生的人編定的順序號(hào),順序碼的奇數(shù)分配給男性,偶數(shù)分配給女性。 
      4、校驗(yàn)碼計(jì)算步驟

      (1)十七位數(shù)字本體碼加權(quán)求和公式 
        S = Sum(Ai * Wi), i = 0, ... , 16 ,先對(duì)前17位數(shù)字的權(quán)求和 
        Ai:表示第i位置上的身份證號(hào)碼數(shù)字值(0~9) 
        Wi:7 9 10 5 8 4 2 1 6 3 7 9 10 5 8 4 2 (表示第i位置上的加權(quán)因子)
      (2)計(jì)算模 
        
      Y = mod(S, 11)

      (3)根據(jù)模,查找得到對(duì)應(yīng)的校驗(yàn)碼 
        
      Y: 0 1 2 3 4 5 6 7 8 9 10 
        校驗(yàn)碼: 1 0 X 9 8 7 6 5 4 3 2

       

      (二)根據(jù)17位數(shù)字本體碼獲取最后一位校驗(yàn)碼程序?qū)嵗?/strong>

      復(fù)制代碼
       1 public class Id18 {
       2     int[] weight={7,9,10,5,8,4,2,1,6,3,7,9,10,5,8,4,2};    //十七位數(shù)字本體碼權(quán)重
       3     char[] validate={ '1','0','X','9','8','7','6','5','4','3','2'};    //mod11,對(duì)應(yīng)校驗(yàn)碼字符值    
       4     
       5     public char getValidateCode(String id17){
       6         int sum=0;
       7         int mode=0;
       8         for(int i=0;i<id17.length();i++){
       9             sum=sum+Integer.parseInt(String.valueOf(id17.charAt(i)))*weight[i];
      10         }
      11         mode=sum%11;
      12         return validate[mode];
      13     }
      14     
      15     public static void main(String[] args){
      16         Id18 test=new Id18();
      17         System.out.println("該身份證驗(yàn)證碼:"+test.getValidateCode("14230219700101101"));    //該身份證校驗(yàn)碼:3
      18     }
      19 }
      復(fù)制代碼

       

      (三)說明

      1.程序可以根據(jù)已有的17位數(shù)字本體碼,獲取對(duì)應(yīng)的驗(yàn)證碼。

      2.該程序可以剔除驗(yàn)證碼不正確的身份證號(hào)碼。

      3.15位的身份證出生年份采用年份后2位,沒有最后1位校驗(yàn)碼。

      4.完整的身份證18位,最后一位校驗(yàn)位可能是非數(shù)字。我們的一個(gè)項(xiàng)目,數(shù)據(jù)庫保存前17位數(shù)字,這樣對(duì)應(yīng)一些SQL語句(比如inner join)有加速作用的?。。?/span>

      国产一级婬片AAA毛,无码中文精品视视在线观看,欧美日韩a人成v在线动漫,五月丁香青草久久
      <code id="qf3hh"></code>
    • <menuitem id="qf3hh"></menuitem>
    • <strike id="qf3hh"><label id="qf3hh"></label></strike>