18位sfz最後一位號碼驗證

第十八位數字的計算方法爲:
1.將前面的sfz號碼17位數分別乘以不同的係數。從第一位到第十七位的係數分別爲:7 9 10 5 8 4 2 1 6 3 7 9 10 5 8 4 2
2.將這17位數字和係數相乘的結果相加。
3.用加出來和除以11,看餘數是多少?
4餘數只可能有0 1 2 3 4 5 6 7 8 9 10這11個數字。其分別對應的最後一位sfz的號碼爲1 0 X 9 8 7 6 5 4 3 2。
5.通過上面得知如果餘數是2,就會在sfz的第18位數字上出現羅馬數字的Ⅹ。如果餘數是10,sfz的最後一位號碼就是2。

例如:某男性的sfz號碼是34052419800101001X。我們要看看這個sfz是不是合法的sfz。
首先:我們得出,前17位的乘積和是189
然後:用189除以11得出的結果是17 + 2/11,也就是說餘數是2。
最後:通過對應規則就可以知道餘數2對應的數字是x。所以,這是一個合格的sfz號碼。

public static char idCrad(String idcard){
        int[]  xis = new int[]{7,9,10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2};
        char[]  rets = new char[]{'1', '0', 'X', '9' ,'8' ,'7', '6' ,'5' ,'4', '3','2' };
        
        int result = 0;
        for (int i=0; i<17 ;i++){
            result += (idcard.charAt(i)-48)*xis[i];
        }
        return rets[result%11];
    }


百度到的,自己驗證了下,合理,應該正確

http://zhidao.baidu.com/link?url=H3JuVgMoqMroCqZYJkZbSRgpX8F-hgqK0j3Q27If0CIKta6NRX64UkWt-iqVu3JRhxDQZ8ZdjIlEfHZu9NTcwq

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章