一个函数解决身份证号码规则校验(检验校验位)

以下经过修改简化的代码是来自某政府网站的,应该算是比较权威的,不会有问题。这份代码同时也是应用到了这个在线工具:身份证号码查询,前往在线检测吧!

/**
 * 检验身份证号码是否合法
 * 包含校验身份证号码校验位
 */
function test(idnum) {
	if(/^\d{6}(18|19|20)?\d{2}(0[1-9]|1[012])(0[1-9]|[12]\d|3[01])\d{3}(\d|X)$/i.test(idnum)) {
		idnum = idnum.split('')

		let factor = [7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2]  //加权因子 ∑(ai×Wi)(mod 11)
		let parity = [1, 0, 'X', 9, 8, 7, 6, 5, 4, 3, 2]  //校验位
		let sum = 0, ai = 0, wi = 0

		for(let i = 0; i < 17; i++) {
			ai = idnum[i]
			wi = factor[i]
			sum += ai * wi
		}

		return parity[sum % 11] == idnum[17]
	} else {
		return false
	}
}


//调用函数
test('432522197708079871')  //返回 false,该身份证号码校验位错误
0 条评论
请不要发布违法违规有害信息,如发现请及时举报或反馈
还没有人评论呢,速度抢占沙发!