diff --git a/epdc-resident-mp-yushan/subpages/family/pages/bindFamily/bindFamily.js b/epdc-resident-mp-yushan/subpages/family/pages/bindFamily/bindFamily.js index 8a9ce80..42c5500 100644 --- a/epdc-resident-mp-yushan/subpages/family/pages/bindFamily/bindFamily.js +++ b/epdc-resident-mp-yushan/subpages/family/pages/bindFamily/bindFamily.js @@ -262,10 +262,15 @@ Page({ }, // 获取成员信息 getFamilyMember () { - if (!this.data.fmData.identityNo) { - return - } - if (this.data.fmData.identityNo.length < 16) { + if (!this.identityCodeValid(this.data.fmData.identityNo)) { + wx.showToast({ + title: '身份证不合法', + icon: 'none', + duration: 2500 + }) + this.setData({ + 'fmData.identityNo': '' + }) return } const params = { @@ -287,7 +292,49 @@ Page({ } }) }, + // 校验身份证是否正确 + identityCodeValid (idcode) { + var weightFactor = [7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2] + // 校验码 + var checkCode = ['1', '0', 'X', '9', '8', '7', '6', '5', '4', '3', '2'] + var code = idcode + '' + var last = idcode[17]// 最后一位 + + var seventeen = code.substring(0, 17) + + // ISO 7064:1983.MOD 11-2 + // 判断最后一位校验码是否正确 + var arr = seventeen.split('') + var len = arr.length + var num = 0 + for (var i = 0; i < len; i++) { + num = num + arr[i] * weightFactor[i] + } + + // 获取余数 + var resisue = num % 11 + var lastNo = checkCode[resisue] + + // 格式的正则 + // 正则思路 + /* + 第一位不可能是0 + 第二位到第六位可以是0-9 + 第七位到第十位是年份,所以七八位为19或者20 + 十一位和十二位是月份,这两位是01-12之间的数值 + 十三位和十四位是日期,是从01-31之间的数值 + 十五,十六,十七都是数字0-9 + 十八位可能是数字0-9,也可能是X + */ + var idcardPatter = /^[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]|[X])$/ + + // 判断格式是否正确 + var format = idcardPatter.test(idcode) + + // 返回验证结果,校验码和格式同时正确才算是合法的身份证号码 + return !!(last === lastNo && format) + }, // 身份证号 bindIdCardInput (e) { this.setData({ diff --git a/epdc-resident-mp-yushan/subpages/family/pages/familyInfo/familyInfo.js b/epdc-resident-mp-yushan/subpages/family/pages/familyInfo/familyInfo.js index d23863b..d3c0e56 100644 --- a/epdc-resident-mp-yushan/subpages/family/pages/familyInfo/familyInfo.js +++ b/epdc-resident-mp-yushan/subpages/family/pages/familyInfo/familyInfo.js @@ -58,11 +58,19 @@ Page({ async getMemberInfo(idCard){ const res = await getFamilyMember({idCard:idCard}) if(res.msg === 'success' && res.code === 0){ - this.setData({ - 'fmData':res.data, - }) - if (idCard) { - this.handleValidBlur('',idCard) + if (res.data) { + this.setData({ + 'fmData':res.data, + }) + if (idCard) { + this.handleValidBlur('',idCard) + } + } else { + wx.showToast({ + title: '个人信息为空', + icon: 'none', + duration: 2500 + }) } } },