js简单判断身份证合法性以及身份证生日合法性

该函数可以判断身份证生意是否合法,简单判断是否符合身份证规则,没有验证区县等等,借鉴了网络上的一些写法。。

function idCard(UUserCard, num) {


    // 身份证号码为15位或者18位,15位时全为数字,18位前17位为数字,最后一位是校验位,可能为数字或字符X
    if (num == 1) {
        var reg = /(^\d{15}$)|(^\d{18}$)|(^\d{17}(\d|X|x)$)/;
        if (reg.test(UUserCard) === false) {
            return false;
        } else {
            return true;
        }
    }
    if (num == 2) {
        var result = true;
        if (15 == UUserCard.length) {
            var year = UUserCard.substring(6, 8);
            var month = UUserCard.substring(8, 10);
            var day = UUserCard.substring(10, 12);
            var temp_date = new Date(year, parseFloat(month) - 1, parseFloat(day));
            // 对于老身份证中的你年龄则不需考虑千年虫问题而使用getYear()方法  
            if (temp_date.getYear() != parseFloat(year) || temp_date.getMonth() != parseFloat(month) - 1 || temp_date.getDate() != parseFloat(day)) {
                result = false;
            }
        } else if (18 == UUserCard.length) {
            var year = UUserCard.substring(6, 10);
            var month = UUserCard.substring(10, 12);
            var day = UUserCard.substring(12, 14);
            var temp_date = new Date(year, parseFloat(month) - 1, parseFloat(day));

            // 这里用getFullYear()获取年份,避免千年虫问题    
            if (temp_date.getFullYear() != parseFloat(year) || temp_date.getMonth() != parseFloat(month) - 1 || temp_date.getDate() != parseFloat(day)) {
                result = false;
            }
        } else {
            result = false;
        }
        return result;
    }

    if (num == 3) {
        //获取出生日期
        if (UUserCard.length == 15) {
            var birth = '19' + UUserCard.substring(6, 8) + "-" + UUserCard.substring(8, 10) + "-" + UUserCard.substring(10, 12);
        } else if (UUserCard.length == 18) {
            var birth = UUserCard.substring(6, 10) + "-" + UUserCard.substring(10, 12) + "-" + UUserCard.substring(12, 14);
            
        }
        return birth;
    }
}
JavaScript,可以通过编写一个函数来检查身份证号码是否合法国的身份证号码有两种格式,分别为15位和18位。15位身份证号码是由6位地址码、6位出生日期码和3位顺序码组成;而18位身份证号码是由6位地址码、8位出生日期码、3位顺序码和1位校验码组成。 以下是一个简单JavaScript函数示例,用于检查身份证号码的合法性: ```javascript function isValidID(id) { // 正则表达式匹配15位或18位身份证号码 const pattern = /(^\d{15}$)|(^\d{17}[\dX]$)/; // 判断是否符合身份证号码的长度和格式 if (!pattern.test(id)) { return false; } // 对于18位身份证号码进行额外的校验 if (id.length === 18) { // 获取出生日期 const birth = id.substr(6, 8); const year = parseInt(birth.substr(0, 4)); const month = parseInt(birth.substr(4, 2)); const day = parseInt(birth.substr(6, 2)); // 校验日期是否合法 if (year < 1900 || year > new Date().getFullYear() || month < 1 || month > 12 || day < 1 || day > 31) { return false; } // 计算校验码 const arr = ['1', '0', 'X', '9', '8', '7', '6', '5', '4', '3', '2']; const coefficients = [7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2]; const sum = id.substring(0, 17) .split('') .reduce((acc, curr, index) => acc + parseInt(curr) * coefficients[index], 0); const mod = sum % 11; const checkCode = arr[mod]; // 校验码是否正确 if (id[17].toUpperCase() !== checkCode) { return false; } } // 所有检查都通过,则身份证号码合法 return true; } ``` 使用这个函数,你可以传入一个身份证号码,函数会返回一个布尔值,表示身份证号码是否合法
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值