国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > Java > 正文

二代身份證驗證示例

2019-11-26 15:39:30
字體:
來源:轉載
供稿:網友

(一)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)有加速作用的!?。?/P>

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 平潭县| 牟定县| 玉山县| 清镇市| 铜梁县| 鹤壁市| 册亨县| 剑河县| 宾川县| 新竹市| 景德镇市| 济南市| 杭州市| 衡阳县| 康定县| 阳信县| 阿荣旗| 阳原县| 田林县| 武乡县| 稻城县| 蕉岭县| 鄂托克前旗| 东辽县| 石渠县| 禄丰县| 福清市| 社旗县| 京山县| 自贡市| 罗源县| 怀安县| 垫江县| 鞍山市| 沿河| 辰溪县| 酉阳| 巴林右旗| 海南省| 汕头市| 晋宁县|