ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

身份证号、车牌号(正则校验)

2022-07-20 16:01:23  阅读:219  来源: 互联网

标签:10 return 身份证号 校验 正则 num let arrSplit card


export const isIdCard = card => {
    // 身份证号
    if (!card) return true
    let num = card.toUpperCase()
    // 身份证号码为15位或者18位,15位时全为数字,18位前17位为数字,最后一位是校验位,可能为数字或字符X。
    if (!/(^\d{15}$)|(^\d{17}([0-9]|X)$)/.test(num)) {
        return false
    }
    // 校验位按照ISO 7064:1983.MOD 11-2的规定生成,X可以认为是数字10。
    // 下面分别分析出生日期和校验位
    let len
    let re
    let birthday
    let sex
    len = num.length
    if (len == 15) {
        // 获取出生日期
        birthday = `19${card.substring(6, 8)}-${card.substring(8, 10)}-${card.substring(10, 12)}`
        // 获取性别
        sex = parseInt(card.substr(14, 1)) % 2 == 1 ? 'M' : 'F'

        re = new RegExp(/^(\d{6})(\d{2})(\d{2})(\d{2})(\d{3})$/)
        let arrSplit = num.match(re)

        // 检查生日日期是否正确
        let dtmBirth = new Date(`19${arrSplit[2]}/${arrSplit[3]}/${arrSplit[4]}`)
        let bGoodDay
        bGoodDay =
            dtmBirth.getYear() == Number(arrSplit[2]) &&
            dtmBirth.getMonth() + 1 == Number(arrSplit[3]) &&
            dtmBirth.getDate() == Number(arrSplit[4])
        if (!bGoodDay) {
            return false
        } else {
            // 将15位身份证转成18位
            // 校验位按照ISO 7064:1983.MOD 11-2的规定生成,X可以认为是数字10。
            let arrInt = new Array(7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2)
            let arrCh = new Array('1', '0', 'X', '9', '8', '7', '6', '5', '4', '3', '2')
            let nTemp = 0
            let i

            num = `${num.substr(0, 6)}19${num.substr(6, num.length - 6)}`
            for (i = 0; i < 17; i++) {
                nTemp += num.substr(i, 1) * arrInt[i]
            }
            num += arrCh[nTemp % 11]
        }
    } else if (len == 18) {
        // 获取出生日期
        birthday = `${card.substring(6, 10)}-${card.substring(10, 12)}-${card.substring(12, 14)}`
        // 获取性别
        sex = parseInt(card.substr(16, 1)) % 2 == 1 ? 'M' : 'F'

        re = new RegExp(/^(\d{6})(\d{4})(\d{2})(\d{2})(\d{3})([0-9]|X)$/)
        let arrSplit = num.match(re)

        // 检查生日日期是否正确
        let dtmBirth = new Date(`${arrSplit[2]}/${arrSplit[3]}/${arrSplit[4]}`)
        let bGoodDay
        bGoodDay =
            dtmBirth.getFullYear() == Number(arrSplit[2]) &&
            dtmBirth.getMonth() + 1 == Number(arrSplit[3]) &&
            dtmBirth.getDate() == Number(arrSplit[4])
        if (!bGoodDay) {
            return false
        } else {
            // 检验18位身份证的校验码是否正确。
            // 校验位按照ISO 7064:1983.MOD 11-2的规定生成,X可以认为是数字10。
            let valnum
            let arrInt = new Array(7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2)
            let arrCh = new Array('1', '0', 'X', '9', '8', '7', '6', '5', '4', '3', '2')
            let nTemp = 0
            let i
            for (i = 0; i < 17; i++) {
                nTemp += num.substr(i, 1) * arrInt[i]
            }
            valnum = arrCh[nTemp % 11]
            if (valnum != num.substr(17, 1)) {
                return false
            }
        }
    }
    return {
        birthday,
        sex,
    }
}
//车牌号验证方法
export const isCar = Number => {
        let vehicleNumber = Number.toUpperCase()
        var xreg=/^[京津沪渝冀豫云辽黑湘皖鲁新苏浙赣鄂桂甘晋蒙陕吉闽贵粤青藏川宁琼使领A-Z]{1}[A-Z]{1}(([0-9]{5}[DF]$)|([DF][A-HJ-NP-Z0-9][0-9]{4}$))/;

        var creg=/^[京津沪渝冀豫云辽黑湘皖鲁新苏浙赣鄂桂甘晋蒙陕吉闽贵粤青藏川宁琼使领A-Z]{1}[A-Z]{1}[A-HJ-NP-Z0-9]{4}[A-HJ-NP-Z0-9挂学警港澳]{1}$/;

        if(vehicleNumber.length == 7){

            return creg.test(vehicleNumber);

        } else if(vehicleNumber.length == 8){

            return xreg.test(vehicleNumber);

        } else{

            return false;

        }

    }

 

标签:10,return,身份证号,校验,正则,num,let,arrSplit,card
来源: https://www.cnblogs.com/cs122/p/16498318.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有