黄聡:jquery検査中国身分証明書番号

2326 ワード

大陸18位身分証明書(第2世代身分証明書)
 
アイデンティティ番号は、17ビットのデジタルボリュームコードと1ビットの検証コードからなる特徴的な組合せコードのセットである.
配列順序は左から右に6桁のデジタル地域コード、8桁のデジタル誕生日コード、3桁のデジタル順序コード、1桁のデジタル検証コードの順である.
検証方法:
 
(1)まず上位17桁の数字の重みを求める.
        S = Sum(Ci * Vi), i = 0, ... , 16
Ci:身分証明書番号のi番目の位置を示す数値
Vi:i番目の位置を示す「重み係数」重み係数Vi:7 9 10 5 8 4 2 1 6 3 7 10 5 8 2
(2)計算モード(固定アルゴリズム)
        Y = mod(S, 11)
(3)計算モードYと対応する検査コードをY:0 1 2 3 4 5 6 7 8 10(Yにより対応する検査コードと身分証明書の第18ビット検査を取得)検査コード:1 0 X 9 8 7 6 4 2
function check_id(value){
    var arrExp = [7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2];//      
    var arrValid = [1, 0, "X", 9, 8, 7, 6, 5, 4, 3, 2];//     
    if(/^\d{17}\d|x$/i.test(value)){   
        var sum = 0, idx;  
        for(var i = 0; i < value.length - 1; i++){  
            //   17            
            sum += parseInt(value.substr(i, 1), 10) * arrExp[i];  
        }  
        //    (    )  
        idx = sum % 11;  
        //    18           
        return arrValid[idx] == value.substr(17, 1).toUpperCase();  
    }else{  
        return false;  
    }  
}