身份证号码验证

checkIdcard(idCard) {
                idCard = idCard.toString();
                var city = {
                    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 tip = "";
                var pass = true;

                if(!idCard ||
                    !/^\d{6}(18|19|20)?\d{2}(0[1-9]|1[012])(0[1-9]|[12]\d|3[01])\d{3}(\d|X)$/i.test(
                        idCard
                    )
                ) {
                    tip = "身份证号格式错误";
                    pass = false;
                } else if(!city[idCard.substr(0, 2)]) {
                    tip = "地址编码错误";
                    pass = false;
                } else {
                    //18位身份证需要验证最后一位校验位
                    if(idCard.length == 18) {
                        idCard = idCard.split("");
                        //∑(ai×Wi)(mod 11)
                        //加权因子
                        var factor = [7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2];
                        //校验位
                        var parity = [1, 0, "X", 9, 8, 7, 6, 5, 4, 3, 2];
                        var sum = 0;
                        var ai = 0;
                        var wi = 0;
                        for(var i = 0; i < 17; i++) {
                            ai = idCard[i];
                            wi = factor[i];
                            sum += ai * wi;
                        }
                        var last = parity[sum % 11];
                        if(parity[sum % 11] != idCard[17]) {
                            tip = "校验位错误";
                            pass = false;
                        }
                    }
                }
                var obj = {
                    status: pass,
                    msg: tip
                };
                if(!pass) {
                    return obj;
                }
                return obj;
            }

 

posted @ 2019-01-21 13:36  枫鸟~  阅读(404)  评论(0编辑  收藏  举报