| | |
| | | oldm, |
| | | oldd, |
| | | ok = false; |
| | | |
| | | const validatePassCardid = (rule, value, callback) => { |
| | | // console.log(oldy, oldm, oldd, year - oldy, mouth, day); |
| | | var test = |
| | | /^[1-9]\d{7}((0\d)|(1[0-2]))(([0|1|2]\d)|3[0-1])\d{3}$|^[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)$/; |
| | | if (!test.test(value)) { |
| | | callback(new Error("请输入正确身份证号码")); |
| | | } else { |
| | | // //加入校验18岁到60岁的 |
| | | // oldy = +value.slice(6, 10); |
| | | // oldm = +value.slice(10, 12); |
| | | // oldd = +value.slice(12, 14); |
| | | // ok = |
| | | // year - oldy < 18 || year - oldy > 60 |
| | | // ? false |
| | | // : year - oldy == 18 |
| | | // ? mouth < oldm |
| | | // ? false |
| | | // : mouth > oldm |
| | | // ? true |
| | | // : day < oldd |
| | | // ? false |
| | | // : true |
| | | // : year - oldy == 60 |
| | | // ? mouth < oldm |
| | | // ? true |
| | | // : mouth > oldm |
| | | // ? false |
| | | // : day <= oldd |
| | | // ? false |
| | | // : true |
| | | // : true; |
| | | // if (ok) { |
| | | callback(); |
| | | // } else { |
| | | // // callback(new Error("根据国家要求,需在18岁至60岁")); |
| | | // callback(new Error("年龄不符")); |
| | | // } |
| | | var Wi = [7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2, 1]; // 加权因子 |
| | | var ValideCode = [1, 0, 10, 9, 8, 7, 6, 5, 4, 3, 2]; // 身份证验证位值.10代表X |
| | | /** |
| | | * 判断身份证号码为18位时最后的验证位是否正确 |
| | | * @param a_idCard 身份证号码数组 |
| | | * @return |
| | | */ |
| | | function isTrueValidateCodeBy18IdCard(a_idCard) { |
| | | var sum = 0; // 声明加权求和变量 |
| | | if (a_idCard[17].toLowerCase() == "x") { |
| | | a_idCard[17] = 10; // 将最后位为x的验证码替换为10方便后续操作 |
| | | } |
| | | for (var i = 0; i < 17; i++) { |
| | | sum += Wi[i] * a_idCard[i]; // 加权求和 |
| | | } |
| | | let valCodePosition = sum % 11; // 得到验证码所位置 |
| | | if (a_idCard[17] == ValideCode[valCodePosition]) { |
| | | return true; |
| | | } else { |
| | | return false; |
| | | } |
| | | } |
| | | /** |
| | | * 验证18位数身份证号码中的生日是否是有效生日 |
| | | * @param idCard 18位书身份证字符串 |
| | | * @return |
| | | */ |
| | | function isValidityBrithBy18IdCard(idCard18) { |
| | | var year = idCard18.substring(6, 10); |
| | | var month = idCard18.substring(10, 12); |
| | | var day = idCard18.substring(12, 14); |
| | | var temp_date = new Date(year, parseFloat(month) - 1, parseFloat(day)); |
| | | // 这里用getFullYear()获取年份,避免千年虫问题 |
| | | if ( |
| | | temp_date.getFullYear() != parseFloat(year) || |
| | | temp_date.getMonth() != parseFloat(month) - 1 || |
| | | temp_date.getDate() != parseFloat(day) |
| | | ) { |
| | | return false; |
| | | } else { |
| | | return true; |
| | | } |
| | | } |
| | | //去掉字符串头尾空格 |
| | | function trim(str) { |
| | | return str.replace(/(^\s*)|(\s*$)/g, ""); |
| | | } |
| | | const validatePassCardid = (rule, value, callback) => { |
| | | let ok = false; |
| | | if (value.length == 18) { |
| | | let idCard = trim(value.replace(/ /g, "")); |
| | | var a_idCard = idCard.split(""); |
| | | if ( |
| | | isValidityBrithBy18IdCard(idCard) && |
| | | isTrueValidateCodeBy18IdCard(a_idCard) |
| | | ) { |
| | | //进行18位身份证的基本验证和第18位的验证 |
| | | ok = true; |
| | | } else { |
| | | ok = false; |
| | | } |
| | | } else { |
| | | ok = false; |
| | | } |
| | | |
| | | if (ok) { |
| | | callback(); |
| | | } else { |
| | | callback(new Error("身份证错误")); |
| | | } |
| | | // console.log(oldy, oldm, oldd, year - oldy, mouth, day); |
| | | // var test = |
| | | // /^[1-9]\d{7}((0\d)|(1[0-2]))(([0|1|2]\d)|3[0-1])\d{3}$|^[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)$/; |
| | | // if (!test.test(value)) { |
| | | // callback(new Error("请输入正确身份证号码")); |
| | | // } else { |
| | | // // //加入校验18岁到60岁的 |
| | | // // oldy = +value.slice(6, 10); |
| | | // // oldm = +value.slice(10, 12); |
| | | // // oldd = +value.slice(12, 14); |
| | | // // ok = |
| | | // // year - oldy < 18 || year - oldy > 60 |
| | | // // ? false |
| | | // // : year - oldy == 18 |
| | | // // ? mouth < oldm |
| | | // // ? false |
| | | // // : mouth > oldm |
| | | // // ? true |
| | | // // : day < oldd |
| | | // // ? false |
| | | // // : true |
| | | // // : year - oldy == 60 |
| | | // // ? mouth < oldm |
| | | // // ? true |
| | | // // : mouth > oldm |
| | | // // ? false |
| | | // // : day <= oldd |
| | | // // ? false |
| | | // // : true |
| | | // // : true; |
| | | // // if (ok) { |
| | | // callback(); |
| | | // // } else { |
| | | // // // callback(new Error("根据国家要求,需在18岁至60岁")); |
| | | // // callback(new Error("年龄不符")); |
| | | // } |
| | | |
| | | // } |
| | | }; |
| | | const validatePassPhone = (rule, value, callback) => { |
| | | var test = /^(13[0-9]|14[0-9]|15[0-9]|17[0-9]|18[0-9]|19[0-9])\d{8}$/g; |