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位身份证取性别,倒数第二位奇数是男,偶数 ...
随机推荐
- .NET Framework 类库
.NET Framework 类库 MSDN == V2.0 == .NET Framework 类库是一个由 Microsoft .NET Framework SDK 中包含的类.接口和值类型组成的 ...
- 我也要学iOS逆向工程--全局变量
大家好!很久不见了.我之前去音乐学院进修爵士吉他去了.现在回来了.之前我一直在学windows开发和逆向.后来到了音乐学院,老师推荐了1个录音软件叫logic prox.可惜啊!当时我只有个索尼的笔记 ...
- C#读取物理网卡信息及其对应的IP地址
using Microsoft.Win32; using System; using System.Collections; using System.Collections.Generic; usi ...
- android EditText inputType说明
在开发的过程中,通常会用到EditText,如何让虚拟键盘来适应输入框中内容的类型,通常我们都会在xml文件中加入android:inputType="". android:inp ...
- 【Thinking in Java-CHAPTER 3】操作符
优先级 赋值 对象在使用c=d,那么c和d都指向原本只有d指向的那个对象. 方法调用中的别名问题:当一个对象作为参数传递到一个函数中,函数改变了这个参数,则改变了传递进来的对象: 自增和自减 浮点型的 ...
- 对 JimmyZhang 老师的文章《项目代码风格要求》的一些个人观点
Jimmy Zhang 老师是博客园中我最佩服的人之一,今天看了他的文章<项目代码风格要求>觉得大部分地方我都很认同,工作中也是强迫自己也要按照规范来编程.下面是我的一些个人观点,想贴出来 ...
- 2014 网选 5011 Game(Nim游戏,数学题)
/* 题意:Nim游戏! 思路:通过异或,判断将n个数表示成二进制的形式之后,是否对应位的数字1 的个数是偶数! */ #include<iostream> using namespace ...
- ruby -- 进阶学习(一)subdomain配置与实现
今天和guanMac童鞋研究的subdomain配置终于有点头绪~~ 之所以会遇到种种难题,个人总结了一下,第一本人太菜,第二英语不好 贴一下guanMac童鞋配置小结的链接:http://my.eo ...
- WCF小白初试 错误之一:“有零个应用程序终结点”的解决办法
遇到这类问题 应该是配置文件出现了问题 解决办法是将配置文件中的<service name="命名空间+类名">就可以解决
- 基于kubernetes构建Docker集群管理详解-转
http://blog.liuts.com/post/247/ 一.前言 Kubernetes 是Google开源的容器集群管理系统,基于Docker构建一个容器的调度服务,提供资源调度 ...