• ahjesus根据身份证号码获取相关信息(生日,省市县,性别)


    使用说明:

    //出自http://www.cnblogs.com/ahjesus 尊重作者辛苦劳动成果,转载请注明出处,谢谢!

    var idCard = new IdCard();
    var msg = idCard.Fill("430102190001010883").Check(true);//true 开启检查
    console.log(msg);//一下是msg的信息
    用于解析15和18位身份证,成功返回
    {

    Error
     null
     
    birthday
     "1900-01-01"
     
    city
     "长沙市"
     
    county
     "芙蓉区"
     
    gender
     "女"
     
    idCard
     "430102190001010883"
     
    province
     "湖南省"

    }

    如果Error不为null 则为获取失败 数据格式如下
    {
     
    Error
     Object { errMsg="获取区域代码失败"}
     
    errMsg
     "获取区域代码失败"
     
    birthday
     undefined
     
    city
     undefined
     
    county
     undefined
     
    gender
     undefined
     
    idCard
     "430102190001010883"
     
    province
     undefined

    }

    目录结构说明:

    areaCode.json    数据源
    areaCodeNew.json  采集来的新数据,数据来源于http://www.shurufa8.cn/shenfenzheng.html
    IdCardIndex.htm    用于解析areaCodeNew.json的页面
    my.js         用于解析areaCodeNew.json的js,配合IdCardIndex.htm使用,定期获取新数据更新areaCodeNew.json重新解析后替换areaCode.json的数据
    index.js        解析身份证的js

    源码:
      IdCardIndex.htm

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml">
    <head>
        <title></title>
        <script src="../../Scripts/Common/jquery-1.8.3.min.js" type="text/javascript"></script>
        <script src="../../Scripts/Common/_CustomJSLibrary.js" type="text/javascript"></script>
        <!--<script src="my.js" type="text/javascript"></script>-->
        <script src="index.js" type="text/javascript"></script>
    </head>
    <body>
    </body>
    </html>

      my.js:

    $(document).ready(function () {
        var ac = "";
    
        $.ajax({
            url: "/Plugins/IdCard/areaCodeNew.json",
            type: 'GET',
            timeout: 2000,
            async: false,
            error: function (json) {
                FillResult("获取区域代码失败");
            },//出自http://www.cnblogs.com/ahjesus 尊重作者辛苦劳动成果,转载请注明出处,谢谢!
            success: function (json) {
                ac = json.toJson();
            }
        });
    
        var array = new Array();
        getT(ac, array);
        function getT(obj, array) {
            if (typeof (obj) == "object") {
                for (var i in obj) {
                    getT(obj[i], array);
                }
            }
            else {
                if (!isNaN(obj)) {
                    var i = 0;
                    while (obj.substr(obj.length - 1, 1) < 1 && i < 10) {
                        obj = obj.substr(0, obj.length - 1);
                        i++;
                    }
                }
    //出自http://www.cnblogs.com/ahjesus 尊重作者辛苦劳动成果,转载请注明出处,谢谢!
                array.push(obj);
            }
        }
    
        var newArray = new Array();
        for (var i =0;i< array.length; i++ ) {
            if ((i+1) % 2 == 0) {
                newArray.push(array[i - 1] + "':'" + array[i]);
            }
        }
        var json = "{'" + newArray.join("','") + "'}";
        $("body").text(json);
    
        function count(obj) {
            var i = 0;
            for (var o in obj) {
                i++;
            }
            return i;
        }
    })

      index.js:

    function IdCard() {
        this.idCard = "";
    };
    IdCard.prototype.Fill = function (idCard) {
        this.idCard = idCard;
    
        function Next(idCard) {//下一步,约束Fill调用后才能调用Check
            this.idCard = idCard;
        };
        Next.prototype.Check = function (enabled) {
            if (!enabled) {
                return null;
            }
            var idCard = this.idCard;
    
            var resultWraper = {//结果包
                Result: function () {//结果类,
                    this.Error = null;
                    this.province = "";
                    this.city = "";
                    this.county = "";
                    this.idCard = "";
                    this.birthday = "";
                    this.gender = "";
                },
                result: null, //结果类的实例
                Error: function () {
                    this.errMsg = "";
                }
            };
    
            function FillResult(errMsg, province, city, county, birthday, gender) {
                var result = new resultWraper.Result();
                if (errMsg != null) {
                    var err = new resultWraper.Error();
                    err.errMsg = errMsg;
                    result.Error = err;
                }
                result.province = province;
                result.city = city;
                result.county = county;
                result.idCard = idCard;
                result.birthday = birthday;
                result.gender = gender;
                resultWraper.result = result;
                return result;
            }
    
            var InitWraper = {
                AreaCode: (function () {//返回区域编码对应地区的JSON
                    var ac = {};
                    $.ajax({
                        url: "/Plugins/IdCard/areaCode.json",
                        type: 'GET',
                        timeout: 2000,
                        async: false,
                        error: function (json) {
                            FillResult("获取区域代码失败");
                        },
                        success: function (json) {
                            ac = json.toJson();
                        }
                    });
                    return ac;
                })(),
                ValidId: (function (pId) {
                    var arrVerifyCode = [1, 0, "x", 9, 8, 7, 6, 5, 4, 3, 2];
                    var Wi = [7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2];
                    var Checker = [1, 9, 8, 7, 6, 5, 4, 3, 2, 1, 1];
                    if (pId.length != 15 && pId.length != 18) {
                        FillResult("身份证号共有 15 码或18位");
                    } else {
                        var Ai = pId.length == 18 ? pId.substring(0, 17) : pId.slice(0, 6) + "19" + pId.slice(6, 16);
                        if (!/^d+$/.test(Ai)) {
                            FillResult("身份证除最后一位外,必须为数字!");
                        } else {
                            var yyyy = Ai.slice(6, 10), mm = Ai.slice(10, 12) - 1, dd = Ai.slice(12, 14);
                            var d = new Date(yyyy, mm, dd), year = d.getFullYear(), mon = d.getMonth(), day = d.getDate(), now = new Date();
                            if (year != yyyy || mon != mm || day != dd || d > now || now.getFullYear() - year > 140) {
                                FillResult("身份证输入错误!");
                            } else {
                                for (var i = 0, ret = 0; i < 17; i++) {
                                    ret += Ai.charAt(i) * Wi[i];
                                };
                                Ai += arrVerifyCode[ret %= 11];
                                if (pId.length == 18 && pId.toLowerCase() != Ai) {
                                    FillResult("身份证输入错误!");
                                }
                            }
                        }
                    }
                })(this.idCard)
            };
    //出自http://www.cnblogs.com/ahjesus 尊重作者辛苦劳动成果,转载请注明出处,谢谢!
            var funcWraper = {
                province: function () {
                    var str = InitWraper.AreaCode[idCard.slice(0, 2)] || "";
                    return str;
                },
                city: function () {
                    var _province = this.province();
                    var str = InitWraper.AreaCode[idCard.slice(0, 4)] || "";
                    if (_province != "") {
                        str = str.replace(_province, "");
                    }
                    return str;
                },
                county: function () {
                    var _province = this.province();
                    var _city = this.city();
                    var str = InitWraper.AreaCode[idCard.slice(0, 6)] || "";
                    if (_province != "") {
                        str = str.replace(_province, "");
                        str = str.replace(_city, "");
                    }
                    return str;
                },
                birthday: function () {
                    var tmpStr = "";
                    var idDate = "";
                    var tmpInt = 0;
                    var strReturn = "";
                    if (idCard.length == 15) {
                        tmpStr = idCard.substring(6, 12);
                        tmpStr = "19" + tmpStr;
                        tmpStr = tmpStr.substring(0, 4) + "-" + tmpStr.substring(4, 6) + "-" + tmpStr.substring(6);
    
                    }
                    else {
                        tmpStr = idCard.substring(6, 14);
                        tmpStr = tmpStr.substring(0, 4) + "-" + tmpStr.substring(4, 6) + "-" + tmpStr.substring(6);
    
                    }
                    return tmpStr;
                },
                gender: function () {
                    var rst;
                    if (idCard.slice(14, 17) % 2 != 0) {
                        rst = "男";
                    } else {
                        rst = "女";
                    }
                    return rst;
                }
            };
    
            if (resultWraper.result == null) {
                var _province = funcWraper.province();
                var _city = funcWraper.city();
                var _county = funcWraper.county();
                var _birthday = funcWraper.birthday();
                var _gender = funcWraper.gender();
                FillResult(null, _province, _city, _county, _birthday, _gender);
            };
            return resultWraper.result;
        }
    //出自http://www.cnblogs.com/ahjesus 尊重作者辛苦劳动成果,转载请注明出处,谢谢!
        return new Next(idCard);
    };

      
     

  • 相关阅读:
    kuangbin专题最短路 D
    AC日记——总分 Score Inflation 洛谷 P2722
    AC日记——[USACO09OCT]Bessie的体重问题Bessie's We… 洛谷 P2639
    AC日记——[USACO07DEC]手链Charm Bracelet 洛谷 P2871
    AC日记——[JLOI2014]松鼠的新家 洛谷 P3258
    AC日记——小行星 洛谷 P2711
    AC日记——[USACO09JAN]全流Total Flow 洛谷 P2936
    AC日记——圆桌聚餐 cogs 729
    AC日记——[USACO11DEC]牧草种植Grass Planting 洛谷 P3038
    AC日记——[USACO15DEC]最大流Max Flow 洛谷 P3128
  • 原文地址:https://www.cnblogs.com/ahjesus/p/3156304.html
Copyright © 2020-2023  润新知