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位身份证取性别,倒数第二位奇数是男,偶数 ...
随机推荐
- 编译 curl with ssl
安装 openssh后,使用 curl 的 ./configure --with-ssl 时,报错“找不到 ssl”.因为 curl在 /usr/local/ssl的安装目录下找动态连接库.而ssl默 ...
- 解决CSS移动端1px边框问题
移动项目开发中,安卓或者IOS等高分辨率屏幕会把1px的border渲染成2px来显示,网上搜了一下,解决方法如下: 一.利用css中的transform的缩放属性解决,推荐这个.如下面代码. < ...
- golang append
1) Append a slice b to an existing slice a: a = append(a, b...) 2) Copy a slice a to a new slice b: ...
- EPLAN P8导线颜色的设置
P8里的导线应称为"连接",连接的颜色代表了其电位的传递路径,如可以给三相电源设置成黑色,PE设为绿色,N设为蓝色等等. P8中电位在连接和元器件中传递的方法是由元器件的连接点属 ...
- [转]优秀Python学习资源收集汇总
Python是一种面向对象.直译式计算机程序设计语言.它的语法简捷和清晰,尽量使用无异义的英语单词,与其它大多数程序设计语言使用大括号不一样,它使用縮进来定义语句块.与Scheme.Ruby.Perl ...
- 谷歌面经 Tree Serialization
http://www.careercup.com/question?id=4868040812396544 You should transform an structure of multiple ...
- ux.plugin.ConTpl 模版元素监听扩展
/* *tpl模版加入按钮 *<div class="x-button-normal x-button x-iconalign-center x-layout-box-item x-s ...
- Linux查看系统信息命令汇总
# uname -a # 查看内核/操作系统/CPU信息 # /etc/issue # 查看操作系统版本 # cat /proc/cpuinfo # 查看CPU信息 # hostname # 查看计算 ...
- github上的版本和本地版本冲突的解决方法
勾选强制覆盖已有的分支(可能会丢失改动),再点击上传,上传成功. [master][~/Downloads/ios] git push -u origin master -f
- Android应用安全之外部动态加载DEX文件风险
1. 外部动态加载DEX文件风险描述 Android 系统提供了一种类加载器DexClassLoader,其可以在运行时动态加载并解释执行包含在JAR或APK文件内的DEX文件.外部动态加载DEX文件 ...