身份证校验

 export default {
      
        data() {
            const IdCardNum= (rule, value, callback) => {
               //非空校验
                if(!value){
                    return callback(new Error('请输入身份证号!'));
                }
                //长度校验
                if(value.length!=18){
                    return callback(new Error('输入有误,身份证号长度需为18位!'));
                }

                //格式和日期校验
                let pattern = /^\d{6}(1[8-9]|[2-9][0-9])\d{2}(0[1-9]|1[0-2])(0[1-9]|[1-2][0-9]|3[0-1])\d{3}(\d|X)$/;
                if(!pattern.test(value)){
                    return callback(new Error('输入有误,请检查身份证号格式!'));
                }

                //省份地址编码校验
                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 : "国外 "
                };

                if(!city[value.substr(0,2)]){
                    return callback(new Error('输入有误,请检查身份证号地址编码是否正确!'));
                }

                //最后一位校验码校验
                if (value.length == 18) {
                    value = value.split('');
                    //∑(ai×Wi)(mod 11)
                    //加权因子
                    let factor = [7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2];
                    //校验位
                    let 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 = value[i];
                        wi = factor[i];
                        sum += ai * wi;
                    }
                    let last = parity[sum % 11];
                    if (last != value[17]) {
                        return callback(new Error('校验失败,请输入正确的身份证号!'));
                    }
                }

                return callback();
            };
 IdCardNum: [
                        { required: true, message: "法人身份证号不能为空.", trigger: "blur" },
                        {
                            type: "string",
                            max: 18,
                            min: 18,
                            pattern:/^\d{6}(1[8-9]|[2-9][0-9])\d{2}(0[1-9]|1[12])(0[1-9]|[12]\d|3[01])\d{3}(\d|X)$/,
                            message: "请输入正确的身份证号",
                            trigger: "blur"
                        },
                       { validator: validIdCardNum, trigger: 'blur' }
                    ],

统一社会信用编码校验

 const validlegalbizLicNum= (rule, value, callback) => {
                let Ancode;//统一社会信用代码的每一个值
                let Ancodevalue;//统一社会信用代码每一个值的权重
                let total = 0;
                let weightedfactors = [1, 3, 9, 27, 19, 26, 16, 17, 20, 29, 25, 13, 8, 24, 10, 30, 28];//加权因子
                //不用I、O、S、V、Z
                let str = '0123456789ABCDEFGHJKLMNPQRTUWXY';
                for (let i = 0; i < value.length - 1; i++) {
                    Ancode = value.substring(i, i + 1);
                    Ancodevalue = str.indexOf(Ancode);
                    total = total + Ancodevalue * weightedfactors[i];
                    //权重与加权因子相乘之和
                }
                let logiccheckcode = 31 - total % 31;
                if (logiccheckcode == 31) {
                    logiccheckcode = 0;
                }
                let Str = "0,1,2,3,4,5,6,7,8,9,A,B,C,D,E,F,G,H,J,K,L,M,N,P,Q,R,T,U,W,X,Y";
                let Array_Str = Str.split(',');
                logiccheckcode = Array_Str[logiccheckcode];

                let checkcode = value.substring(17, 18);
                if (logiccheckcode != checkcode) {
                    return callback(new Error('校验失败,请输入正确的统一社会信用代码!'));;
                }
                return callback();
            };
  bizLicNum: [
                        { required: true, message: "统一社会信用代码不能为空.", trigger: "blur" },
                        {
                            type: "string",
                            max: 18,
                            message: "输入有误,统一社会信用代码长度需为18位",
                            trigger: "change"
                        },
                        {
                            type: "string",
                            /*
                           统一社会信用代码由十八位的阿拉伯数字或大写英文字母(不使用I、O、Z、S、V)组成。
                            第1位:登记管理部门代码(共一位字符)登记管理部门代码:使用阿拉伯数字或大写英文字母表示。​

                            第2位:机构类别代码(共一位字符)


                            第3位~第8位:登记管理机关行政区划码(共六位阿拉伯数字)
                            第9位~第17位:主体标识码(组织机构代码)(共九位字符)
                            第18位:校验码​(共一位字符)
                            */
                           /* pattern: /[^_IOZSVa-z\W]{2}\d{6}[^_IOZSVa-z\W]{10}/g,*/
                           pattern: /^([1,5,9][1,2,3,9]|[2,3,4,6,7,8,A,B,C,D,E,G,Y]1)\d{6}[0-9A-HJ-NPQRTUWXY]{10}$/,
                            message: "请输入正确的统一社会信用代码",
                            trigger: "blur"
                        },
                        { validator: validlegalbizLicNum, trigger: 'blur' }
                    ],

 

Logo

前往低代码交流专区

更多推荐