1. 程式人生 > >18位身份證號碼的編排規則

18位身份證號碼的編排規則

身份證號碼的編排規則:
 
(1)前1、2位數字表示:所在省份的程式碼;
(2)第3、4位數字表示:所在城市的程式碼;
(3)第5、6位數字表示:所在區縣的程式碼;
(4)第7~14位數字表示:出生年、月、日;
(5)第15、16位數字表示:所在地的派出所的程式碼;
(6)第17位數字表示性別:奇數表示男性,偶數表示女性;
(7)第18位數字是校檢碼:也有的說是個人資訊碼,一般是隨計算機的隨機產生,
      用來檢驗身份證的正確性。校檢碼可以是0~9的數字,有時也用x表示。



第十八位數字的計算方法為:
1.將前面的身份證號碼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個數字。其分別對應的最後一位身份證的號碼為1 0 X 9 8 7 6 5 4 3 2。
5.通過上面得知如果餘數是2,就會在身份證的第18位數字上出現羅馬數字的Ⅹ。如果餘數是10,身份證的最後一位號碼就是2。

例如:某男性的身份證號碼是34052419800101001X。我們要看看這個身份證是不是合法的身份證。
首先:我們得出,前17位的乘積和是189
然後:用189除以11得出的結果是17 + 2/11,也就是說餘數是2。

最後:通過對應規則就可以知道餘數2對應的數字是x。所以,這是一個合格的身份證號碼。

簡單附上程式碼

public class Test {
    public static void main(String[] args) {
        System.out.println(validationLastNum("430224198905120057"));  
    }
    
    public static String validationLastNum(String idCard){
        int[] validas={7,9,10,5,8,4,2,1,6,3,7,9,10,5,8,4,2};  
        char[] idCards=idCard.toCharArray();  
        int count=0;  
        for (int i = 0; i < validas.length; i++) {  
            count+=Integer.valueOf(String.valueOf(idCards[i]))*validas[i];  
        }  
        String[] temp={ "1","0","X","9","8","7","6","5","4","3","2"}; 
        return temp[count%11];
    }
}