生成身份证校验位
废不多说, 直上代码:
function idNoValidateNum(str){
var b = 11,
w = idNoValidateNum.weightingFactor,
m = str.split('').reverse().reduce(function (c, v, i) {
return c + w[i % w.length] * v
},0)%b;
return idNoValidateNum.charset[m]
}
// 加权因子.可以计算(Math.pow(2,i+1)%11),这里列举
idNoValidateNum.weightingFactor = [1,6,3,7,9,10,5,8,4,2].reverse()
// 字符集
idNoValidateNum.charset = '10X98765432'
为了保证两个常量不被改变, 可以如下方式定义属性值:
Object.defineProperty(idNoValidateNum, 'charset', {
/**
* 字符集
*/
value: '10X98765432'
,
writable: false // 防止被修改
});
加权因子计算方法(从右到左):
new Array(17).fill(0).map((v,i)=>Math.pow(2,i+1)%11)
// returns [2, 4, 8, 5, 10, 9, 7, 3, 6, 1, 2, 4, 8, 5, 10, 9, 7]
Over(2024-11-23).