使用说明:

//出自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);
};

  

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

  1. C# 根据身份证号码获取简易信息

    public class PackIden { /// <summary> /// 根据身份证获取生日 /// </summary> /// <param name=&q ...

  2. java 根据身份证号码获取出生日期、性别、年龄

      1.情景展示 如何根据身份证号,计算出出生日期.性别.年龄? 2.解决方案 从网上找的别人的,因为并没有实际用到,所以并未对其优化! /** * 通过身份证号码获取出生日期.性别.年龄 * @pa ...

  3. php 身份证号码获取星座和生肖

    发布:thatboy   来源:Net     [大 中 小] 本文介绍下,php用身份证号码获取星座和生肖的方法,一个简单的php实例,从身份证号码中取得星座与生肖信息,有兴趣的朋友参考研究下吧.本 ...

  4. JAVA通过身份证号码获取出生日期、年龄、性别

    JAVA验证身份证号码是否正确:https://www.cnblogs.com/pxblog/p/12038278.html /** * 通过身份证号码获取出生日期(birthday).年龄(age) ...

  5. IOS 根据身份证号码获取 年龄 生日 性别

    /** 从身份证上获取年龄 18位身份证 */ -(NSString *)getIdentityCardAge:(NSString *)numberStr { NSDateFormatter *for ...

  6. JS通过身份证号码获取出生年月日

    这里我们讲述一下关于jq根据身份证号码计算出生日期.年龄.性别,有需要的同学可参考一下.    代码如下 复制代码 //获取输入身份证号码 var UUserCard = $("#UUser ...

  7. SQL 根据身份证号码获取年龄的函数

    在数据库的运用过程中,我们时常会碰到根据身份证号码来获取当前的年龄,今天我在这里写了一个函数,就是关于获取年龄的 create or replace function FUNC_COMPARE_SFZ ...

  8. android 获取 imei号码 及相关信息

    android 获取 imei号码 参考:http://www.cnblogs.com/luxiaofeng54/archive/2011/03/01/1968063.html 核心代码: Imei ...

  9. PHP通过身份证号码获取性别、出生日期、年龄等信息

    $sex = substr($idcard, (strlen($idcard)==18 ? -2 : -1), 1) % 2 ? '1' : '2'; //18位身份证取性别,倒数第二位奇数是男,偶数 ...

随机推荐

  1. 聊聊并发(七)——Java中的阻塞队列

    3. 阻塞队列的实现原理 聊聊并发(七)--Java中的阻塞队列 作者 方腾飞 发布于 2013年12月18日 | ArchSummit全球架构师峰会(北京站)2016年12月02-03日举办,了解更 ...

  2. WinStore控件之Button

    1 Buton入门简单应用 <StackPanel > <Button Content="按钮1" Height="80" Name=&quo ...

  3. QTP对象管理

    QTP对象库管理 - 动态绑定对象库文件:http://blog.csdn.net/testing_is_ ... le/details/20569843 用ObjectRepositoryUtil动 ...

  4. [Tip] 如何在BeyondCompare中忽略不重要的区别.

    在使用BeyondCompare时,有时需要忽略一些不重要的区别,下面的链接教你如何通过定义语法元素来实现这个功能. http://www.scootersoftware.com/support.ph ...

  5. C++中文件按行读取和逐词读取 backup

    http://blog.csdn.net/zhangchao3322218/article/details/7930857 #include  <iostream>#include  &l ...

  6. POJ 1013 Counterfeit Dollar

    Counterfeit Dollar Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 36206   Accepted: 11 ...

  7. 转载 -- 如何判断Javascript对象是否存在

    http://www.ruanyifeng.com/blog/2011/05/how_to_judge_the_existence_of_a_global_object_in_javascript.h ...

  8. 几种在Linux下查询外网IP的办法

    原文地址:http://my.oschina.net/epstar/blog/513186 Curl 纯文本格式输出: curl icanhazip.com curl ifconfig.me curl ...

  9. nginx rewrite重写与防盗链配置

    nginx rewrite重写规则与防盗链配置方法 时间:2016-02-04 15:16:58来源:网络 导读:nginx rewrite重写规则与防盗链配置方法,rewrite规则格式中flag标 ...

  10. winform用户控件

    用途用户控件包含Time控件和一个lable控件,一个ToolStrip控件,每隔一秒显示一次时间     1. 生成用户控件   新建一个项目类型为用户控件   注意定义类名,此类名为以后工具箱中显 ...