js 身份证校验

90 阅读1分钟
function id_card(id_card){
	if( id_card && id_card.length === 18 && /^[1-9]\d{5}[1-9]\d{3}((0\d)|(1[0-2]))(([0|1|2]\d)|3[0-1])\d{3}([0-9]|X)$/.test(id_card)
 ){
		// 身份证编号
		let card_no = id_card.split('');
		// 第一位到第十七位的系数
		let coefficient = [7,9,10,5,8,4,2,1,6,3,7,9,10,5,8,4,2];
		// 最后一位身份证的号码
		let last_code = ['1','0','X','9','8','7','6','5','4','3','2'];
		
		let res = 0;
		for(let i = 0;i<17; i++){
			res += card_no[i] * coefficient[i];
		}
		
		// 比对校验码是否正确
		if( last_code[res % 11] === card_no[17] ){
			console.log('正确');
			return true;
		}
		console.log('错误');
		return false;
	}
	return false;
}