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
}
}
有大佬能把这两个证件号的校验分别组成一个正则表达是么?跪求