luowei 1 gadu atpakaļ
vecāks
revīzija
a634c0d300
2 mainītis faili ar 177 papildinājumiem un 1 dzēšanām
  1. 165 1
      src/views/system/user/extend.vue
  2. 12 0
      src/views/system/user/index.vue

+ 165 - 1
src/views/system/user/extend.vue

@@ -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) {

+ 12 - 0
src/views/system/user/index.vue

@@ -657,6 +657,18 @@ export default {
             },
             trigger: "blur",
           },
+          {
+            validator: (rule, value, callback) => {
+              if (
+                /[\u4E00-\u9FA5]/g.test(value)
+              ) {
+                callback(new Error("密码不能包含中文字符"));
+              } else {
+                callback();
+              }
+            },
+            trigger: "blur",
+          },
         ],
         orgId: [
           { required: true, message: "所属机构不能为空", trigger: "blur" },