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);
};
ahjesus根据身份证号码获取相关信息(生日,省市县,性别)的更多相关文章
- C# 根据身份证号码获取简易信息
public class PackIden { /// <summary> /// 根据身份证获取生日 /// </summary> /// <param name=&q ...
- java 根据身份证号码获取出生日期、性别、年龄
1.情景展示 如何根据身份证号,计算出出生日期.性别.年龄? 2.解决方案 从网上找的别人的,因为并没有实际用到,所以并未对其优化! /** * 通过身份证号码获取出生日期.性别.年龄 * @pa ...
- php 身份证号码获取星座和生肖
发布:thatboy 来源:Net [大 中 小] 本文介绍下,php用身份证号码获取星座和生肖的方法,一个简单的php实例,从身份证号码中取得星座与生肖信息,有兴趣的朋友参考研究下吧.本 ...
- JAVA通过身份证号码获取出生日期、年龄、性别
JAVA验证身份证号码是否正确:https://www.cnblogs.com/pxblog/p/12038278.html /** * 通过身份证号码获取出生日期(birthday).年龄(age) ...
- IOS 根据身份证号码获取 年龄 生日 性别
/** 从身份证上获取年龄 18位身份证 */ -(NSString *)getIdentityCardAge:(NSString *)numberStr { NSDateFormatter *for ...
- JS通过身份证号码获取出生年月日
这里我们讲述一下关于jq根据身份证号码计算出生日期.年龄.性别,有需要的同学可参考一下. 代码如下 复制代码 //获取输入身份证号码 var UUserCard = $("#UUser ...
- SQL 根据身份证号码获取年龄的函数
在数据库的运用过程中,我们时常会碰到根据身份证号码来获取当前的年龄,今天我在这里写了一个函数,就是关于获取年龄的 create or replace function FUNC_COMPARE_SFZ ...
- android 获取 imei号码 及相关信息
android 获取 imei号码 参考:http://www.cnblogs.com/luxiaofeng54/archive/2011/03/01/1968063.html 核心代码: Imei ...
- PHP通过身份证号码获取性别、出生日期、年龄等信息
$sex = substr($idcard, (strlen($idcard)==18 ? -2 : -1), 1) % 2 ? '1' : '2'; //18位身份证取性别,倒数第二位奇数是男,偶数 ...
随机推荐
- 聊聊并发(七)——Java中的阻塞队列
3. 阻塞队列的实现原理 聊聊并发(七)--Java中的阻塞队列 作者 方腾飞 发布于 2013年12月18日 | ArchSummit全球架构师峰会(北京站)2016年12月02-03日举办,了解更 ...
- WinStore控件之Button
1 Buton入门简单应用 <StackPanel > <Button Content="按钮1" Height="80" Name=&quo ...
- QTP对象管理
QTP对象库管理 - 动态绑定对象库文件:http://blog.csdn.net/testing_is_ ... le/details/20569843 用ObjectRepositoryUtil动 ...
- [Tip] 如何在BeyondCompare中忽略不重要的区别.
在使用BeyondCompare时,有时需要忽略一些不重要的区别,下面的链接教你如何通过定义语法元素来实现这个功能. http://www.scootersoftware.com/support.ph ...
- C++中文件按行读取和逐词读取 backup
http://blog.csdn.net/zhangchao3322218/article/details/7930857 #include <iostream>#include &l ...
- POJ 1013 Counterfeit Dollar
Counterfeit Dollar Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 36206 Accepted: 11 ...
- 转载 -- 如何判断Javascript对象是否存在
http://www.ruanyifeng.com/blog/2011/05/how_to_judge_the_existence_of_a_global_object_in_javascript.h ...
- 几种在Linux下查询外网IP的办法
原文地址:http://my.oschina.net/epstar/blog/513186 Curl 纯文本格式输出: curl icanhazip.com curl ifconfig.me curl ...
- nginx rewrite重写与防盗链配置
nginx rewrite重写规则与防盗链配置方法 时间:2016-02-04 15:16:58来源:网络 导读:nginx rewrite重写规则与防盗链配置方法,rewrite规则格式中flag标 ...
- winform用户控件
用途用户控件包含Time控件和一个lable控件,一个ToolStrip控件,每隔一秒显示一次时间 1. 生成用户控件 新建一个项目类型为用户控件 注意定义类名,此类名为以后工具箱中显 ...