vue,js身份正號校驗規則實現

二代身份證校驗(不包含15位,18位校驗)

 		/**
         * 身份證規則校驗
         * @param val
         * @returns {boolean}
         */
        checkID: function (val) {
            if (this.checkCode(val)) {
                var date = val.substring(6, 14);
                if (this.checkDate(date)) {
                    if (this.checkProv(val.substring(0, 2))) {
                        return true;
                    }
                }
            }
            return false;
        },

        /**
         * 省級地址碼校驗
         * @param val
         * @returns {boolean}
         */
        checkProv: function (val) {
            var pattern = /^[1-9][0-9]/;
            var provs = {
                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: "澳門"
            };
            if (pattern.test(val)) {
                if (provs[val]) {
                    return true;
                }
            }
            return false;
        },
        /**
         * 出生日期碼校驗
         * @param val
         * @returns {boolean}
         */
        checkDate: function (val) {
            var pattern = /^(18|19|20)\d{2}((0[1-9])|(1[0-2]))(([0-2][1-9])|10|20|30|31)$/;
            if (pattern.test(val)) {
                var year = val.substring(0, 4);
                var month = val.substring(4, 6);
                var date = val.substring(6, 8);
                var date2 = new Date(year + "-" + month + "-" + date);
                if (date2 && date2.getMonth() == (parseInt(month) - 1)) {
                    return true;
                }
            }
            return false;
        },
        /**
         * 校驗碼校驗
         * @param val
         * @returns {boolean}
         */
        checkCode: function (val) {
            var p = /^[1-9]\d{5}(18|19|20)\d{2}((0[1-9])|(1[0-2]))(([0-2][1-9])|10|20|30|31)\d{3}[0-9Xx]$/;
            var factor = [7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2];
            var parity = [1, 0, 'X', 9, 8, 7, 6, 5, 4, 3, 2];
            var code = val.substring(17);
            if (p.test(val)) {
                var sum = 0;
                for (var i = 0; i < 17; i++) {
                    sum += val[i] * factor[i];
                }
                if (parity[sum % 11] == code.toUpperCase()) {
                    return true;
                }
            }
            return false;
        }
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章