急求正则表达式??

const methods = {
    _isDateTime: function (defVal) {
        let date = this._ParseStdDate(defVal)
        if (!date) {
            return false
        }
        let arr = date.match(/^((19|20)\d{2})-(\d{1,2})-(\d{1,2})$/)
        if (!arr) {
            return false
        }
        for (let i = 1; i < 5; i++) {
            arr[i] = parseInt(arr[i], 10)
        }
        if (arr[3] < 1 || arr[3] > 12 || arr[4] < 1 || arr[4] > 31) {
            return false
        }
        let _t_date = new Date(arr[1], arr[3] - 1, arr[4])
        return _t_date.getTime() / 1000 / 60
    },
    _ParseStdDate: function (defVal) {
        let re = defVal.replace(/[ \-,./]+/g, '-').replace(/(^|-)0+(?=\d+)/g, '$1')
        re = re.replace(/^([^-]{1,2}-[^-]{1,2})-([^-]{4})$/, '$2-$1')
        return re
    },
}

const validateCard = {
    // 外国人永久居留身份证
    isForeignIDCard: function (card) {
        if (card.match(/^[a-zA-Z]{3}\d{12}$/i)) {
            return !!methods._isDateTime(card.replace(/^[a-zA-Z]{3}\d{4}(\d{2})(\d{2})(\d{2}).+$/, '19$1-$2-$3'))
        }
        return false
    },
    // 身份证
    isChinaIDCard: function (card) {
        let num = card.trim().toLowerCase().match(/\w/g)
        if (card.match(/^\d{17}[\dx]$/i)) {
            let sum = 0,
                times = [7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2]
            for (let i = 0; i < 17; i++) sum += parseInt(num[i], 10) * times[i]
            if ('10x98765432'.charAt(sum % 11) !== num[17]) {
                return false
            }
            return !!methods._isDateTime(card.replace(/^\d{6}(\d{4})(\d{2})(\d{2}).+$/, '$1-$2-$3'))
        }
        if (card.match(/^\d{15}$/)) {
            return !!methods._isDateTime(card.replace(/^\d{6}(\d{2})(\d{2})(\d{2}).+$/, '19$1-$2-$3'))
        }
        return false
    }
}

有大佬能把这两个证件号的校验分别组成一个正则表达是么?跪求

阅读 2.1k
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题