|
|
@@ -256,7 +256,20 @@ export default {
|
|
|
},
|
|
|
rules: {
|
|
|
idCard:[
|
|
|
- { required: true, message: '请输入身份证号码', trigger: 'change'}
|
|
|
+ { required: true, message: '请输入身份证号码', trigger: 'change'},
|
|
|
+ { min: 18, message: "请输入18位身份证号码", trigger: "blur" },
|
|
|
+ {
|
|
|
+ validator: (rule, value, callback) => {
|
|
|
+ if (
|
|
|
+ this. checkIdCard(value)==false
|
|
|
+ ) {
|
|
|
+ callback(new Error("身份证号码格式不正确"));
|
|
|
+ } else {
|
|
|
+ callback();
|
|
|
+ }
|
|
|
+ },
|
|
|
+ trigger: "blur",
|
|
|
+ },
|
|
|
],
|
|
|
deptId: [
|
|
|
{ required: true, message: '请选择所属部门', trigger: 'change' },
|
|
|
@@ -398,6 +411,157 @@ export default {
|
|
|
mounted() {
|
|
|
},
|
|
|
methods: {
|
|
|
+//身份证
|
|
|
+checkIdCard(val){
|
|
|
+
|
|
|
+ //是否为空
|
|
|
+ if (val === '') {
|
|
|
+ // Toast('请输入18位身份证号');
|
|
|
+ return false;
|
|
|
+ }
|
|
|
+ if (val.length != 18) {
|
|
|
+ // Toast('请输入18位身份证号');
|
|
|
+ return false;
|
|
|
+ }
|
|
|
+
|
|
|
+ //检查号码是否符合规范,包括长度,类型
|
|
|
+ if(this.isCardNo(val) === false){
|
|
|
+ // Toast("证件号码不符合规范");
|
|
|
+ return false;
|
|
|
+ }
|
|
|
+
|
|
|
+ //检查省份
|
|
|
+ if(this.checkProvince(val) === false){
|
|
|
+ // Toast("证件号码不对校验省份错误");
|
|
|
+ return false;
|
|
|
+ }
|
|
|
+
|
|
|
+ //校验生日
|
|
|
+ if(this.checkBirthday(val) === false){
|
|
|
+ // Toast("证件号码校验生日错误");
|
|
|
+ return false;
|
|
|
+ }
|
|
|
+
|
|
|
+ //检验位的检测
|
|
|
+ if (this.checkParity(val) === false) {
|
|
|
+ // Toast('您的身份证校验位不正确,请重新输入');
|
|
|
+ return false;
|
|
|
+ }
|
|
|
+
|
|
|
+},
|
|
|
+
|
|
|
+
|
|
|
+//检查号码是否符合规范,包括长度,类型
|
|
|
+isCardNo(data){
|
|
|
+ //身份证号码为15位或者18位,15位时全为数字,18位前17位为数字,最后一位是校验位,可能为数字或字符X
|
|
|
+ var reg = /(^\d{15}$)|(^\d{17}(\d|X)$)/;
|
|
|
+ if (reg.test(data) === false) {
|
|
|
+ return false;
|
|
|
+ }
|
|
|
+ return true;
|
|
|
+ },
|
|
|
+
|
|
|
+//取身份证前两位,校验省份
|
|
|
+checkProvince(data) {
|
|
|
+ var city={11:"北京",12:"天津",13:"河北",14:"山西",15:"内蒙古",21:"辽宁",22:"吉林",23:"黑龙江 ",
|
|
|
+ 31:"上海",32:"江苏",33:"浙江",34:"安徽",35:"福建",36:"江西",37:"山东",41:"河南",42:"湖北",
|
|
|
+ 43:"湖南",44:"广东",45:"广西",46:"海南",50:"重庆",51:"四川",52:"贵州",53:"云南",54:"西藏 ",
|
|
|
+ 61:"陕西",62:"甘肃",63:"青海",64:"宁夏",65:"新疆",71:"台湾",81:"香港",82:"澳门",91:"国外 "};
|
|
|
+ var province = data.substr(0,2);
|
|
|
+ if (city[province] == undefined) {
|
|
|
+ return false;
|
|
|
+ }
|
|
|
+ return true
|
|
|
+ },
|
|
|
+
|
|
|
+//检查生日是否正确
|
|
|
+checkBirthday(data) {
|
|
|
+ var len = data.length;
|
|
|
+ //身份证15位时,次序为省(3位)市(3位)年(2位)月(2位)日(2位)校验位(3位),皆为数字
|
|
|
+ if(len == '15')
|
|
|
+ {
|
|
|
+ var re_fifteen = /^(\d{6})(\d{2})(\d{2})(\d{2})(\d{3})$/;
|
|
|
+ var arr_data = data.match(re_fifteen);
|
|
|
+ var year = arr_data[2];
|
|
|
+ var month = arr_data[3];
|
|
|
+ var day = arr_data[4];
|
|
|
+ var birthday = new Date('19'+year+'/'+month+'/'+day);
|
|
|
+ return this.verifyBirthday('19'+year,month,day,birthday);
|
|
|
+ }
|
|
|
+ //身份证18位时,次序为省(3位)市(3位)年(4位)月(2位)日(2位)校验位(4位),校验位末尾可能为X
|
|
|
+ if(len == '18')
|
|
|
+ {
|
|
|
+ var re_eighteen = /^(\d{6})(\d{4})(\d{2})(\d{2})(\d{3})([0-9]|X)$/;
|
|
|
+ var arr_data = data.match(re_eighteen);
|
|
|
+ var year = arr_data[2];
|
|
|
+ var month = arr_data[3];
|
|
|
+ var day = arr_data[4];
|
|
|
+ var birthday = new Date(year+'/'+month+'/'+day);
|
|
|
+ return this.verifyBirthday(year,month,day,birthday);
|
|
|
+ }
|
|
|
+ return false;
|
|
|
+ },
|
|
|
+
|
|
|
+//校验日期
|
|
|
+verifyBirthday(year,month,day,birthday)
|
|
|
+ {
|
|
|
+ var now = new Date();
|
|
|
+ var now_year = now.getFullYear();
|
|
|
+ //年月日是否合理
|
|
|
+ if(birthday.getFullYear() == year && (birthday.getMonth() + 1) == month && birthday.getDate() == day)
|
|
|
+ {
|
|
|
+ //判断年份的范围(0岁到130岁之间)
|
|
|
+ var time = now_year - year;
|
|
|
+ if(time >= 0 && time <= 150)
|
|
|
+ {
|
|
|
+ return true;
|
|
|
+ }
|
|
|
+ return false;
|
|
|
+ }
|
|
|
+ return false;
|
|
|
+ },
|
|
|
+ //校验位的检测
|
|
|
+ checkParity(data)
|
|
|
+ {
|
|
|
+ //15位转18位
|
|
|
+ data = this.changeFivteenToEighteen(data);
|
|
|
+ var len = data.length;
|
|
|
+ if(len == '18')
|
|
|
+ {
|
|
|
+ var arrInt = new Array(7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2);
|
|
|
+ var arrCh = new Array('1', '0', 'X', '9', '8', '7', '6', '5', '4', '3', '2');
|
|
|
+ var cardTemp = 0, i, valnum;
|
|
|
+ for(i = 0; i < 17; i ++)
|
|
|
+ {
|
|
|
+ cardTemp += data.substr(i, 1) * arrInt[i];
|
|
|
+ }
|
|
|
+ valnum = arrCh[cardTemp % 11];
|
|
|
+ if (valnum == data.substr(17, 1))
|
|
|
+ {
|
|
|
+ return true;
|
|
|
+ }
|
|
|
+ return false;
|
|
|
+ }
|
|
|
+ return false;
|
|
|
+ },
|
|
|
+ //15位转18位身份证号
|
|
|
+ changeFivteenToEighteen(data)
|
|
|
+ {
|
|
|
+ if(data.length == '15')
|
|
|
+ {
|
|
|
+ var arrInt = new Array(7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2);
|
|
|
+ var arrCh = new Array('1', '0', 'X', '9', '8', '7', '6', '5', '4', '3', '2');
|
|
|
+ var cardTemp = 0, i;
|
|
|
+ data = data.substr(0, 6) + '19' + data.substr(6, data.length - 6);
|
|
|
+ for(i = 0; i < 17; i ++)
|
|
|
+ {
|
|
|
+ cardTemp += data.substr(i, 1) * arrInt[i];
|
|
|
+ }
|
|
|
+ data += arrCh[cardTemp % 11];
|
|
|
+ return data;
|
|
|
+ }
|
|
|
+ return data;
|
|
|
+ },
|
|
|
|
|
|
|
|
|
getImgUrl(img) {
|