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位身份证取性别,倒数第二位奇数是男,偶数 ...
随机推荐
- Win7下安装配置gVim
本文根据vim官网的<Simple Steps to Help You Install gVim on Windows 7>[1]一文整理而成. 1. 下载gVim 在http://www ...
- 高性能优化Web前端
高性能HTML 一.避免使用iframe iframe也叫内联frame,可将一个HTML文档嵌入另一个HTML文档中. iframe的好处是,嵌入的文档独立于父文档,通常也借此使浏览器模拟多线程.缺 ...
- 同程旅游网开放平台SDK开发完成
最近利用业余时间,使用了同程旅游网的开放平台,并对大部分的方法进行了调用,发现有很多不好用的地方,比如 1.同一个开放平台居然有几个调用地址,景区调用http://tcopenapi.17usoft. ...
- MDX 占比同比环比
http://blog.csdn.net/hero_hegang/article/details/9072889
- MyBatis知多少(7)持久层
持久层是适合使用MyBatis的地方.在面向对象的系统中,持久层主要关注对象(或者更精确地说应该是存储在那些对象中的数据)的存取.在企业应用程序中持久层通常用关系数据库系统来存储数据,虽然某些情况下其 ...
- ruby -- 进阶学习(十四)设置background-image(解决无法获取图片路径问题)
基于rails4.0环境 为了美化界面,添加背景图片,于是又傻逼了一回~~ 一开始在xxx.html.erb中添加:(注:图片的路径为:app/asssets/images/background.jp ...
- 二叉查找树(一)之 图文解析 和 C语言的实现
概要 本章先对二叉树的相关理论知识进行介绍,然后给出C语言的详细实现.关于二叉树的学习,需要说明的是:它并不难,不仅不难,而且它非常简单.初次接触树的时候,我也觉得它似乎很难:而之所产生这种感觉主要是 ...
- 【转载】让windows使用linux系统的命令
转载自:http://blog.chinaunix.net/uid-28336510-id-3824903.html 1.下载GnuWin32,GnuWin32的安装文件(GetGnuWin32-0. ...
- canvas剪裁图片并上传,前端一步到位,无需用到后端
背景: 当前主流的图片剪裁主要有两种实现方式. 1:flash操作剪裁.2:利用js和dom操作剪裁. 目前看来这个剪裁主要还是先通过前端上传图片到服务器,然后前端操作后把一些坐标和大小数据传到后台, ...
- Http客户端识别的方法
Http用户识别的机制方法分为如下几种: 1).承载用户身份的HTTP首部 2).客户端IP地址跟踪,根据客户端IP地址进行识别 3).用户登录,用认证方式设别用户 4).使用胖URL,一种在UR ...