tangning 10 bulan lalu
induk
melakukan
9e30cd3e99
2 mengubah file dengan 81 tambahan dan 3 penghapusan
  1. 77 2
      src/views/lanUser/detailsModal.vue
  2. 4 1
      src/views/lanUser/list.vue

+ 77 - 2
src/views/lanUser/detailsModal.vue

@@ -90,7 +90,7 @@
                 if (!value) {
                   return Promise.reject('请输入身份证');
                 }
-                if (!regPos.test(value)) {
+                if (!visitCertCodetip(value)) {
                   /* eslint-disable-next-line */
                   return Promise.reject('请输入正确的身份证号码');
                 }
@@ -191,7 +191,8 @@
         createConfirm({
           iconType: 'warning',
           okText: '复制',
-          title: () => h('span', data.status == 1 ? '平台启用成功' : data.id ? '修改成功' : '平台创建成功'),
+          title: () =>
+            h('span', data.status == 1 ? '平台启用成功' : data.id ? '修改成功' : '平台创建成功'),
           content: () =>
             h('div', {}, [
               h('div', null, `平台名称:${res.platformName}`),
@@ -210,6 +211,80 @@
         const { isSuccessRef } = useCopyToClipboard(url);
         isSuccessRef && createMessage.success('复制成功');
       }
+      const visitCertCodetip = (code: any) => {
+        //身份证号前两位代表区域
+        const 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: '国外 ',
+        };
+        //身份证格式正则表达式
+        const idCardReg = /^\d{6}(18|19|20)?\d{2}(0[1-9]|1[012])(0[1-9]|[12]\d|3[01])\d{3}(\d|X)$/i;
+        //如果身份证不满足格式正则表达式
+        if (!code || !idCardReg.test(code)) {
+          return false;
+        }
+
+        //区域数组中不包含需验证的身份证前两位
+        else if (!city[code.substr(0, 2)]) {
+          return false;
+        } else {
+          //18位身份证需要验证最后一位校验位
+          if (code.length == 18) {
+            code = code.split('');
+            //∑(ai×Wi)(mod 11)
+            //加权因子
+            const factor = [7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2];
+            //校验位
+            const parity = [1, 0, 'X', 9, 8, 7, 6, 5, 4, 3, 2];
+            let sum = 0;
+            let ai = 0;
+            let wi = 0;
+            for (let i = 0; i < 17; i++) {
+              ai = code[i];
+              wi = factor[i];
+              sum += ai * wi;
+            }
+            // var last = parity[sum % 11];
+            if (parity[sum % 11] != code[17]) {
+              return false;
+            }
+          }
+        }
+        return true;
+      };
       return {
         register,
         title,

+ 4 - 1
src/views/lanUser/list.vue

@@ -345,7 +345,10 @@
       }
       function IdNumber(num){
         if (!num) return "";
-        return num.replace(/(?<=\d{3})\d{12}(?=\d{2})/,"************")
+        const reg = /^(.{4})(?:\d+)(.{4}$)/
+        const maskedIdCard = num.replace(reg,'\$1******\$2')
+        return maskedIdCard;
+        // return num.replace(/(?<=\d{3})\d{12}(?=\d{2})/,"************")
       }
       return {
         registerTable,