//检查身份证是否正确,正确返回true,错误返回false ValidPIN(value) { const weight_factor = [7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2] // 校验码 const check_code = ['1', '0', 'X', '9', '8', '7', '6', '5', '4', '3', '2'] let code = value + "" let last = value[17] //最后一位 let seventeen = code.substring(0, 17) // ISO 7064:1983.MOD 11-2 // 判断最后一位校验码是否正确 let arr = seventeen.split("") let len = arr.length let num = 0 for (let i = 0; i < len; i++) { num = num + arr[i] * weight_factor[i] } // 获取余数 let resisue = num % 11 let last_no = check_code[resisue] // 格式的正则 // 正则思路 /* 第一位不可能是0 第二位到第六位可以是0-9 第七位到第十位是年份,所以七八位为19或者20 十一位和十二位是月份,这两位是01-12之间的数值 十三位和十四位是日期,是从01-31之间的数值 十五,十六,十七都是数字0-9 十八位可能是数字0-9,也可能是X */ let idcard_patter = /^[1-9][0-9]{5}([1][9][0-9]{2}|[2][0][0|1][0-9])([0][1-9]|[1][0|1|2])([0][1-9]|[1|2][0-9]|[3][0|1])[0-9]{3}([0-9]|[Xx])$/ // 判断格式是否正确 let format = idcard_patter.test(value) // 返回验证结果,校验码和格式同时正确才算是合法的身份证号码 return (last === last_no && format) }
狐表直接有ValidPIN(身份证),不用自己折腾