大陸18位身份證(第二代身份證)算法
身份號碼是一組具備特徵組合碼,由十七位數字本體碼和一位校驗碼組成。spa
排列順序從左至右依次爲:六位數字地區碼,八位數字生日碼,三位數字順序碼和一位數字校驗碼。code
校驗方法:
orm
(1)先對前17位數字的權求和it
S = Sum(Ci * Vi), i = 0, ... , 16io
Ci:表示身份證號碼上第i位置的數字值function
Vi:表示第i位置上的「加權因子」
加權因子Vi: 7 9 10 5 8 4 2 1 6 3 7 9 10 5 8 4 2class
(2)計算模(固定算法)test
Y = mod(S, 11)方法
(3)將計算模Y與對應的校驗碼校驗
Y: 0 1 2 3 4 5 6 7 8 9 10 (經過Y取得對應校驗碼與身份證的第18位校驗)
校驗碼: 1 0 X 9 8 7 6 5 4 3 2
function (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; } }