專注應用,關注發展,開拓創新

          <-------------------------------------------------------------------& 珍惜生命 . 善用時間 . 把握未來 . 創造價值。

          BlogJava 首頁 新隨筆 聯系 聚合 管理
            11 Posts :: 17 Stories :: 10 Comments :: 0 Trackbacks
          公民身份號碼是特征組合碼,由十七位數字本體碼和一位數字校驗碼組成.排列順序從左至右依次為:六位數字地址碼,八位數字出生日期碼,三位數字順序碼和一位數字校驗碼。1、地址碼表示編碼對象常住戶口所在縣(市、旗、區)的行政區劃代碼,按GB/T2260的規定執行。

            2、出生日期碼表示編碼對象出生的年、月、日,按GB/T7408的規定執行。年、月、日代碼之間不用分隔符。例:某人出生日期為1966年10月26日,其出生日期碼為19661026。

            3、順序碼表示在同一地址碼所標識的區域范圍內,對同年、同月、同日出生的人編定的順序號,順序碼的奇數分配給男性,偶數千分配給女性。

            4、校驗碼校驗碼采用ISO7064:1983,MOD11-2校驗碼系統。

            1)十七位數字本體碼加權求和公式 S=Sum(Ai*Wi),i=0,...,16,先對前17位數字的權求和 Ai:表示第i位置上的身份證號碼數字值 Wi:表示第i位置上的加權因子 Wi:7910584216379105842

            2)計算模 Y=mod(S,11)

            3)通過模得到對應的校驗碼 :012345678910 驗碼:10X98765432

            下面是java實現的代碼

            /**IDCard.javaCreatedon2004-11-517:03:37**/packageorg.yz21.study.idcard;

            /***@authorviolin2004-11-517:03:37*Copyrightwww.yz21.org2003-2004*/publicclassIDCard{//wi=2(n-1)(mod11)finalint[]wi={7,9,10,5,8,4,2,1,6,3,7,9,10,5,8,4,2,1};

            //verifydigitfinalint[]vi={1,0,X,9,8,7,6,5,4,3,2};

            privateint[]ai=newint[18];

            publicIDCard(){}

            //verifypublicbooleanVerify(Stringidcard){if(idcard.length()==15){idcard=uptoeighteen(idcard);}if(idcard.length()!=18){returnfalse;}Stringverify=idcard.substring(17,18);if(verify.equals(getVerify(idcard))){returntrue;}returnfalse;}

            //getverifypublicStringgetVerify(Stringeightcardid){intremaining=0;

            if(eightcardid.length()==18){eightcardid=eightcardid.substring(0,17);}

            if(eightcardid.length()==17){intsum=0;for(inti=0;i<17;i++){Stringk=eightcardid.substring(i,i+1);ai=Integer.parseInt(k);}

            for(inti=0;i<17;i++){sum=sum+wi*ai;}remaining=sum%11;}

            returnremaining==2?"X":String.valueOf(vi[remaining]);}

            //15updateto18publicStringuptoeighteen(Stringfifteencardid){Stringeightcardid=fifteencardid.substring(0,6);eightcardid=eightcardid+"19";eightcardid=eightcardid+fifteencardid.substring(6,15);eightcardid=eightcardid+getVerify(eightcardid);returneightcardid;}

            }

            測試代碼:使用的單元測試工具是junit

            /**IDCardTest.javaCreatedon2004-11-517:32:12**/packageorg.yz21.study.idcard;

            importjunit.framework.Test;importjunit.framework.TestCase;importjunit.framework.TestSuite;

            /***@authorviolin2004-11-517:32:12*Copyrightwww.yz21.org2003-2004*/publicclassIDCardTestextendsTestCase{

            privateStringidcard1="11010519491231002X";privateStringidcard2="440524188001010014";

            publicvoidtestVerify(){IDCardidcard=newIDCard();this.assertTrue(idcard.Verify(idcard1));this.assertTrue(idcard.Verify(idcard2));}

            publicstaticTestsuite(){returnnewTestSuite(IDCardTest.class);}

            publicstaticvoidmain(String[]args){junit.textui.TestRunner.run(suite());}}
          posted on 2006-07-08 16:38 吳名居 閱讀(312) 評論(0)  編輯  收藏 所屬分類: java編程

          只有注冊用戶登錄后才能發表評論。


          網站導航:
           
          主站蜘蛛池模板: 武功县| 松潘县| 通辽市| 南投县| 峨边| 察雅县| 嘉善县| 儋州市| 翼城县| 七台河市| 永胜县| 永清县| 新建县| 綦江县| 中方县| 虞城县| 茂名市| 江都市| 梁山县| 团风县| 宜章县| 湖口县| 林甸县| 永嘉县| 石嘴山市| 黔西县| 南汇区| 乌鲁木齐市| 阿尔山市| 炉霍县| 黄骅市| 茶陵县| 蒲城县| 建平县| 镇远县| 锦屏县| 太仆寺旗| 清丰县| 舟曲县| 安徽省| 宿州市|