外国人永久居留身份证校验18位Js版
目前按照外国人永久居留身份证技术规范测试没有发现问题
需要自取
const FOREIGNER_ID_CARD_CHECK_CODE = [
"1",
"0",
"X",
"9",
"8",
"7",
"6",
"5",
"4",
"3",
"2"
];
function isForeignerIdCard(idCardStr) {
if (idCardStr.length !== 18) {
return false;
}
// 本体码
const a = new Array(17);
// 加权因子
const weights = new Array(17);
// 乘积
const product = new Array(17);
const charArray = idCardStr.split("");
for (let i = 18; i > 1; i--) {
a[18 - i] = charArray[18 - i] - "0";
weights[18 - i] = Math.pow(2, i - 1) % 11;
product[18 - i] = a[18 - i] * weights[18 - i];
}
// 乘积之和取模
const modulus = product.reduce((a, b) => a + b) % 11;
const checkDigit = charArray[17] - "0";
var s1 = FOREIGNER_ID_CARD_CHECK_CODE[modulus];
var s2 = String(checkDigit);
var flag = s1 === s2;
debugger;
// 校验码比对
return FOREIGNER_ID_CARD_CHECK_CODE[modulus] === String(checkDigit);
}