博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
javascript 验证身份证完全版,根据身份证获取性别年龄
阅读量:7054 次
发布时间:2019-06-28

本文共 7074 字,大约阅读时间需要 23 分钟。

1.验证身份证

var idcard=function (_v,item) {            var area = {                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 : "澳门",                91 : "国外"            }            var Y, JYM;            var S, M;            var idcard_array = new Array();            idcard_array = _v.split("");            // 地区检验            if (area[parseInt(_v.substr(0, 2))] == null) {                return "身份证号码地区非法!!,格式例如:32";            }            // 身份号码位数及格式检验            switch (_v.length) {                case 15 :                    if ((parseInt(_v.substr(6, 2)) + 1900) % 4 == 0 || ((parseInt(_v.substr(6, 2)) + 1900) % 100 == 0 && (parseInt(_v.substr(6, 2)) + 1900) % 4 == 0)) {                        ereg = /^[1-9][0-9]{5}[0-9]{2}((01|03|05|07|08|10|12)(0[1-9]|[1-2][0-9]|3[0-1])|(04|06|09|11)(0[1-9]|[1-2][0-9]|30)|02(0[1-9]|[1-2][0-9]))[0-9]{3}$/;// 测试出生日期的合法性                    } else {                        ereg = /^[1-9][0-9]{5}[0-9]{2}((01|03|05|07|08|10|12)(0[1-9]|[1-2][0-9]|3[0-1])|(04|06|09|11)(0[1-9]|[1-2][0-9]|30)|02(0[1-9]|1[0-9]|2[0-8]))[0-9]{3}$/;// 测试出生日期的合法性                    }                    if (ereg.test(_v)){}                    else {                        return "身份证号码出生日期超出范围,格式例如:19860817";                    }                    break;                case 18 :                    // 18位身份号码检测                    // 出生日期的合法性检查                    // 闰年月日:((01|03|05|07|08|10|12)(0[1-9]|[1-2][0-9]|3[0-1])|(04|06|09|11)(0[1-9]|[1-2][0-9]|30)|02(0[1-9]|[1-2][0-9]))                    // 平年月日:((01|03|05|07|08|10|12)(0[1-9]|[1-2][0-9]|3[0-1])|(04|06|09|11)(0[1-9]|[1-2][0-9]|30)|02(0[1-9]|1[0-9]|2[0-8]))                    if (parseInt(_v.substr(6, 4)) % 4 == 0 || (parseInt(_v.substr(6, 4)) % 100 == 0 && parseInt(_v.substr(6, 4)) % 4 == 0)) {                        ereg = /^[1-9][0-9]{5}(19|20)[0-9]{2}((01|03|05|07|08|10|12)(0[1-9]|[1-2][0-9]|3[0-1])|(04|06|09|11)(0[1-9]|[1-2][0-9]|30)|02(0[1-9]|[1-2][0-9]))[0-9]{3}[0-9Xx]$/;// 闰年出生日期的合法性正则表达式                    } else {                        ereg = /^[1-9][0-9]{5}(19|20)[0-9]{2}((01|03|05|07|08|10|12)(0[1-9]|[1-2][0-9]|3[0-1])|(04|06|09|11)(0[1-9]|[1-2][0-9]|30)|02(0[1-9]|1[0-9]|2[0-8]))[0-9]{3}[0-9Xx]$/;// 平年出生日期的合法性正则表达式                    }                    if (ereg.test(_v)) {// 测试出生日期的合法性                        // 计算校验位                        S = (parseInt(idcard_array[0]) + parseInt(idcard_array[10]))                            * 7                            + (parseInt(idcard_array[1]) + parseInt(idcard_array[11]))                            * 9                            + (parseInt(idcard_array[2]) + parseInt(idcard_array[12]))                            * 10                            + (parseInt(idcard_array[3]) + parseInt(idcard_array[13]))                            * 5                            + (parseInt(idcard_array[4]) + parseInt(idcard_array[14]))                            * 8                            + (parseInt(idcard_array[5]) + parseInt(idcard_array[15]))                            * 4                            + (parseInt(idcard_array[6]) + parseInt(idcard_array[16]))                            * 2                            + parseInt(idcard_array[7])                            * 1                            + parseInt(idcard_array[8])                            * 6                            + parseInt(idcard_array[9]) * 3;                        Y = S % 11;                        M = "F";                        JYM = "10X98765432";                        M = JYM.substr(Y, 1);// 判断校验位                        // alert(idcard_array[17]);                        if (M == idcard_array[17]) {                             // 检测ID的校验位                        } else {                            return "身份证号码末位校验位校验出错,请注意x的大小写,格式例如:201X";                        }                    } else {                        return "身份证号码出生日期超出范围,格式例如:19860817";                    }                    break;                default :                    return "身份证号码位数不对,应该为15位或是18位";                    break;            }        }复制代码

2.通过身份证号码得到性别

/**         * 通过身份证号码得到性别         *  身份证号码 return 1/2 男/女*/var getSexForCard=function (str) {            var inputStr = str.toString();            var sex;            if (inputStr.length == 18) {                sex = inputStr.charAt(16);                if (sex % 2 == 0) {                    return 2;                } else {                    return 1;                }            } else {                sex = inputStr.charAt(14);                if (sex % 2 == 0) {                    return 2;                } else {                    return 1;                }            }        }复制代码

3.通过身份证号码得到年龄

var jsGetAge=function (strBirthday) {            var returnAge;            var birthYear = strBirthday.slice(0,4);            var birthMonth = strBirthday.slice(4,6);            var birthDay = strBirthday.slice(6);            d = new Date();            var nowYear = d.getFullYear();            var nowMonth = d.getMonth() + 1;            var nowDay = d.getDate();            if(nowYear == birthYear){                returnAge = 0;//同年 则为0岁            }            else{                var ageDiff = nowYear - birthYear ; //年之差                if(ageDiff > 0){                    if(nowMonth == birthMonth) {                        var dayDiff = nowDay - birthDay;//日之差                        if(dayDiff < 0)                        {                            returnAge = ageDiff - 1;                        }                        else                        {                            returnAge = ageDiff ;                        }                    }                    else                    {                        var monthDiff = nowMonth - birthMonth;//月之差                        if(monthDiff < 0)                        {                            returnAge = ageDiff - 1;                        }                        else                        {                            returnAge = ageDiff ;                        }                    }                }                else                {                    returnAge = -1;//返回-1 表示出生日期输入错误 晚于今天                }            }            return returnAge;//返回周岁年龄        }复制代码

转载地址:http://tllol.baihongyu.com/

你可能感兴趣的文章
5G一周热闻:华为夺联通5G大单,首张5G电话卡发放
查看>>
调研对敏捷宣言2.0的需求
查看>>
微软在C# 8中引入预览版可空引用类型
查看>>
深究JavaScript——函数调用与this详解
查看>>
书评与访谈:Software Development Metrics
查看>>
re:Invent第二天:互联网客户在右传统客户在左,AWS向哪儿?
查看>>
云端能力知几许?12人众测华为云企业级Kubernetes集群实力
查看>>
《Elixir in Action》书评及作者问答录
查看>>
Apache HBase的现状和发展
查看>>
AlphaZero进化论:从零开始,制霸所有棋类游戏
查看>>
IBM中国开发中心吉燕勇: 通过Cloud Data Services打造新型认知计算数据分析云平台...
查看>>
作者问答:解密硅谷
查看>>
linux系统高并发socket最大连接数优化
查看>>
Netflix发布Polly.JS,一个用于HTTP交互的开源库
查看>>
敏捷团队中测试人员的角色
查看>>
GitHub推出Scientist,帮助开发者重构关键路径代码
查看>>
40%创业公司用伪AI忽悠钱,欧洲被AI时代抛弃了吗?
查看>>
AT&T签署8位数合同,设备商恐无法从5G获利
查看>>
Netflix Play API:我们为什么构建了一个演进式架构?
查看>>
我不是仆人,是主人!敏捷中领导力的新比喻?
查看>>