在我上一个帖子 里面,讨论了如何验证15,18位身份证号码的合法性,并能取得一些简单的信息,
比如:身份,生日,性别等。
现在,可以取城市和地区了。
下载(64kb) https://files.cnblogs.com/ashun/idcard.rar
建议: 地区编码很大,900多行,90Kb大小,建议把他们放在数据库里面通过Ajax来取
比如:身份,生日,性别等。
现在,可以取城市和地区了。
<script language="javascript">
// 地区代码实在太大了,我这里只贴出 北京,上海,广州的代码,完整国内地区编码请下载附件
// Go_Rush(阿舜) from http://ashun.cnblogs.com/
var areaCode={
\'11\':\'北京市\',\'1101\':\'北京市市辖区\',\'110101\':\'北京市东城区\',\'110102\':\'北京市西城区\'
,\'110103\':\'北京市崇文区\',\'110104\':\'北京市宣武区\',\'110105\':\'北京市朝阳区\',\'110106\':\'北京市丰台区\'
,\'110107\':\'北京市石景山区\',\'110108\':\'北京市海淀区\',\'110109\':\'北京市门头沟区\',\'110111\':\'北京市房山区\'
,\'1102\':\'北京市市辖县\',\'110221\':\'北京市昌平县\',\'110222\':\'北京市顺义县\',\'110223\':\'北京市通县\'
,\'110224\':\'北京市大兴县\',\'110226\':\'北京市平谷县\',\'110227\':\'北京市怀柔县\',\'110228\':\'北京市密云县\'
,\'110229\':\'北京市延庆县\'
,\'12\':\'天津市\',\'1201\':\'天津市市辖区\',\'120101\':\'天津市和平区\'
,\'120102\':\'天津市河东区\',\'120103\':\'天津市河西区\',\'120104\':\'天津市南开区\',\'120105\':\'天津市河北区\'
,\'120106\':\'天津市红桥区\',\'120107\':\'天津市塘沽区\',\'120108\':\'天津市汉沽区\',\'120109\':\'天津市大港区\'
,\'120110\':\'天津市东丽区\',\'120111\':\'天津市西青区\',\'120112\':\'天津市津南区\',\'120113\':\'天津市北辰区\'
,\'1202\':\'天津市市辖县\',\'120221\':\'天津市宁河县\',\'120222\':\'天津市武清县\',\'120223\':\'天津市静海县\'
,\'120224\':\'天津市宝坻县\',\'120225\':\'天津市蓟县\'
,\'31\':\'上海市\'
,\'3101\':\'上海市市辖区\',\'310101\':\'上海市黄浦区\',\'310102\':\'上海市南市区\',\'310103\':\'上海市卢湾区\'
,\'310104\':\'上海市徐汇区\',\'310105\':\'上海市长宁区\',\'310106\':\'上海市静安区\',\'310107\':\'上海市普陀区\'
,\'310108\':\'上海市闸北区\',\'310109\':\'上海市虹口区\',\'310110\':\'上海市扬浦区\',\'310112\':\'上海市闵行区\'
,\'310113\':\'上海市宝山区\',\'310114\':\'上海市嘉定区\',\'310115\':\'上海市浦东新区\',\'3102\':\'上海市市辖县\'
,\'310225\':\'上海市南汇县\',\'310226\':\'上海市奉贤县\',\'310227\':\'上海市松江县\',\'310228\':\'上海市金山县\'
,\'310229\':\'上海市青浦县\',\'310230\':\'上海市崇明县\'
,\'44\':\'广东省\',\'4401\':\'广东省广州市\',\'440101\':\'广东省广州市市辖区\'
,\'440102\':\'广东省广州市东山区\',\'440103\':\'广东省广州市荔湾区\'
,\'440104\':\'广东省广州市越秀区\',\'440105\':\'广东省广州市海珠区\'
,\'440106\':\'广东省广州市天河区\',\'440107\':\'广东省广州市芳村区\'
,\'440111\':\'广东省广州市白云区\',\'440112\':\'广东省广州市黄埔区\'
,\'440122\':\'广东省从花县\',\'440181\':\'广东省番禺市\',\'440182\':\'广东省花都市\',\'440183\':\'广东省增城市\'
,\'71\':\' 台@@湾 省\',\'7100\':\' 台@@湾 \',\'710000\':\' 台@@湾 省\'
,\'72\':\'香港\',\'7200\':\'香港特别行政区\',\'720000\':\'香港特别行政区\'
,\'73\':\'澳门\',\'7300\':\'澳门特别行政区\'
,\'91\':\'国外\'
}
function checkId(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) return "身份证号共有 15 码或18位";
var Ai=pId.length==18?pId.substring(0,17):pId.slice(0,6)+"19"+pId.slice(6,16);
if (!/^\d+$/.test(Ai)) return "身份证除最后一位外,必须为数字!";
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) return "身份证输入错误!";
for(var i=0,ret=0;i<17;i++) ret+=Ai.charAt(i)*Wi[i];
Ai+=arrVerifyCode[ret %=11];
return pId.length ==18 && pId.toLowerCase() != Ai?"身份证输入错误!":Ai;
};
function getInfo(id){
//根据身份证取 省份,生日,性别 Go_Rush(阿舜) from http://ashun.cnblogs.com/
id=checkId(id)
if (isNaN(id)) return "错误的身份证号码"
var id=String(id),sex=id.slice(14,17)%2?"男":"女"
prov=areaCode[id.slice(0,6)] || areaCode[id.slice(0,4)] || areaCode[id.slice(0,2)] || "未知地区"
var birthday=(new Date(id.slice(6,10),id.slice(10,12)-1,id.slice(12,14))).toLocaleDateString()
return [prov,birthday,sex]
}
var id="110102198006262301"
alert(getInfo(id))
</script>
// 地区代码实在太大了,我这里只贴出 北京,上海,广州的代码,完整国内地区编码请下载附件
// Go_Rush(阿舜) from http://ashun.cnblogs.com/
var areaCode={
\'11\':\'北京市\',\'1101\':\'北京市市辖区\',\'110101\':\'北京市东城区\',\'110102\':\'北京市西城区\'
,\'110103\':\'北京市崇文区\',\'110104\':\'北京市宣武区\',\'110105\':\'北京市朝阳区\',\'110106\':\'北京市丰台区\'
,\'110107\':\'北京市石景山区\',\'110108\':\'北京市海淀区\',\'110109\':\'北京市门头沟区\',\'110111\':\'北京市房山区\'
,\'1102\':\'北京市市辖县\',\'110221\':\'北京市昌平县\',\'110222\':\'北京市顺义县\',\'110223\':\'北京市通县\'
,\'110224\':\'北京市大兴县\',\'110226\':\'北京市平谷县\',\'110227\':\'北京市怀柔县\',\'110228\':\'北京市密云县\'
,\'110229\':\'北京市延庆县\'
,\'12\':\'天津市\',\'1201\':\'天津市市辖区\',\'120101\':\'天津市和平区\'
,\'120102\':\'天津市河东区\',\'120103\':\'天津市河西区\',\'120104\':\'天津市南开区\',\'120105\':\'天津市河北区\'
,\'120106\':\'天津市红桥区\',\'120107\':\'天津市塘沽区\',\'120108\':\'天津市汉沽区\',\'120109\':\'天津市大港区\'
,\'120110\':\'天津市东丽区\',\'120111\':\'天津市西青区\',\'120112\':\'天津市津南区\',\'120113\':\'天津市北辰区\'
,\'1202\':\'天津市市辖县\',\'120221\':\'天津市宁河县\',\'120222\':\'天津市武清县\',\'120223\':\'天津市静海县\'
,\'120224\':\'天津市宝坻县\',\'120225\':\'天津市蓟县\'
,\'31\':\'上海市\'
,\'3101\':\'上海市市辖区\',\'310101\':\'上海市黄浦区\',\'310102\':\'上海市南市区\',\'310103\':\'上海市卢湾区\'
,\'310104\':\'上海市徐汇区\',\'310105\':\'上海市长宁区\',\'310106\':\'上海市静安区\',\'310107\':\'上海市普陀区\'
,\'310108\':\'上海市闸北区\',\'310109\':\'上海市虹口区\',\'310110\':\'上海市扬浦区\',\'310112\':\'上海市闵行区\'
,\'310113\':\'上海市宝山区\',\'310114\':\'上海市嘉定区\',\'310115\':\'上海市浦东新区\',\'3102\':\'上海市市辖县\'
,\'310225\':\'上海市南汇县\',\'310226\':\'上海市奉贤县\',\'310227\':\'上海市松江县\',\'310228\':\'上海市金山县\'
,\'310229\':\'上海市青浦县\',\'310230\':\'上海市崇明县\'
,\'44\':\'广东省\',\'4401\':\'广东省广州市\',\'440101\':\'广东省广州市市辖区\'
,\'440102\':\'广东省广州市东山区\',\'440103\':\'广东省广州市荔湾区\'
,\'440104\':\'广东省广州市越秀区\',\'440105\':\'广东省广州市海珠区\'
,\'440106\':\'广东省广州市天河区\',\'440107\':\'广东省广州市芳村区\'
,\'440111\':\'广东省广州市白云区\',\'440112\':\'广东省广州市黄埔区\'
,\'440122\':\'广东省从花县\',\'440181\':\'广东省番禺市\',\'440182\':\'广东省花都市\',\'440183\':\'广东省增城市\'
,\'71\':\' 台@@湾 省\',\'7100\':\' 台@@湾 \',\'710000\':\' 台@@湾 省\'
,\'72\':\'香港\',\'7200\':\'香港特别行政区\',\'720000\':\'香港特别行政区\'
,\'73\':\'澳门\',\'7300\':\'澳门特别行政区\'
,\'91\':\'国外\'
}
function checkId(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) return "身份证号共有 15 码或18位";
var Ai=pId.length==18?pId.substring(0,17):pId.slice(0,6)+"19"+pId.slice(6,16);
if (!/^\d+$/.test(Ai)) return "身份证除最后一位外,必须为数字!";
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) return "身份证输入错误!";
for(var i=0,ret=0;i<17;i++) ret+=Ai.charAt(i)*Wi[i];
Ai+=arrVerifyCode[ret %=11];
return pId.length ==18 && pId.toLowerCase() != Ai?"身份证输入错误!":Ai;
};
function getInfo(id){
//根据身份证取 省份,生日,性别 Go_Rush(阿舜) from http://ashun.cnblogs.com/
id=checkId(id)
if (isNaN(id)) return "错误的身份证号码"
var id=String(id),sex=id.slice(14,17)%2?"男":"女"
prov=areaCode[id.slice(0,6)] || areaCode[id.slice(0,4)] || areaCode[id.slice(0,2)] || "未知地区"
var birthday=(new Date(id.slice(6,10),id.slice(10,12)-1,id.slice(12,14))).toLocaleDateString()
return [prov,birthday,sex]
}
var id="110102198006262301"
alert(getInfo(id))
</script>
下载(64kb) https://files.cnblogs.com/ashun/idcard.rar
建议: 地区编码很大,900多行,90Kb大小,建议把他们放在数据库里面通过Ajax来取