MyException - 我的异常网
当前位置:我的异常网» .NET相关 » 沫沫金原创提供:完整的依据身份证获取省份、性别、

沫沫金原创提供:完整的依据身份证获取省份、性别、年龄、生日及页面验证

www.MyException.Cn  网友分享于:2013-08-14  浏览:0次
沫沫金原创提供:完整的根据身份证获取省份、性别、年龄、生日及页面验证

概述:

身份证的校验,识别,分离,处处可见。最近H5移动端的项目就需要扫码获取身份证,根据身份证自动识别省份、性别、年龄、生日信息。这里分享完善版,希望大家喜欢。

环境:

依赖jQuery、BootStrap

Html

<form id="cardForm">
				  <div class="form-group">
				    <label>姓名</label>
				    <input id="patientname" name="patientname" type="text" class="form-control" placeholder="姓名">
				  </div>
				  <div class="form-group">
				    <label for="exampleInputFile">身份证号</label>
				    <input id="idcard" name="idcardno" type="text" class="form-control" placeholder="身份证号" onblur="handIdcard(this.value)" onfocus="clearIdcard()">
				  </div>
				  <div class="form-group">
				    <label for="exampleInputFile">联系电话</label>
				    <input name="mobile" type="number" class="form-control" placeholder="联系电话">
				  </div>
				  <div class="form-group">
				    <label for="exampleInputPassword1">省份</label>
				    <input id="province"  name="address" type="text" class="form-control" placeholder="输入身份证自动识别省份" readonly="true">
				  </div>
				  <div class="form-group">
				    <label for="exampleInputPassword1">生日</label>
				    <input id="birthday"  name="birthday" type="text" class="form-control" placeholder="输入身份证自动识别生日" readonly="true">
				  </div>
				  <div class="form-group">
				    <label for="exampleInputPassword1">性别</label>
				    <input id="sex"  name="sex" type="hidden">
				    <input id="sexName" type="text" class="form-control" placeholder="输入身份证自动识别性别" disabled="true">
				  </div>
				  <div class="form-group">
				    <label for="exampleInputPassword1">年龄</label>
				    <input id="age"  name="patientage" type="text" class="form-control" placeholder="输入身份证自动识别年龄" readonly="true">
				  </div>
				  <button type="button" class="btn btn-success" style="width: 100%" onclick="submitCard()">保存</button>
				</form>

 JavaScript:身份证验证及自动识别部分

  1 /**
  2          * 手动 - 输入身份证校验并解析
  3          * 描述:验证合法的身份证并回填省份、生日、性别
  4          *  */
  5         function handIdcard(obj){
  6             var idcardVlidate = cardCheck(obj);
  7             if(idcardVlidate){
  8                 callIdcard(idcardVlidate);
  9             }else{
 10                 $("#idcard").focus();
 11             }
 12         }
 13         /**
 14          * 私有 - 工具 - 回填解析后的身份证信息
 15          * 描述:省份、生日、性别
 16          *  */
 17         function callIdcard(fmtVal){
 18             $("#province").val(fmtVal.addr);
 19             $("#birthday").val(fmtVal.birth);
 20             $("#sex").val(fmtVal.sex);
 21             $("#sexName").val(getSexName(fmtVal.sex));
 22             $("#age").val(fmtVal.age);
 23         }
 24         /**
 25          * 私有 - 工具 - 清理以下页面信息
 26          * 描述:身份证号码、省份、生日、性别
 27          *  */
 28         function clearIdcard(){
 29             if($("#province").val()!='')$("#idcard").val('');
 30             $("#province").val('');
 31             $("#birthday").val('');
 32             $("#sex").val('');
 33             $("#sexName").val('');
 34             $("#age").val('');
 35         }
 36         
 37                     
 38         /**身份证验证并获取生日及性别 Begin*/
 39         //全局变量
 40         var birth;
 41         var sex;
 42         var addrs;
 43         
 44         var year;
 45         var age;
 46         var address;
 47         var city = { 11: "北京", 12: "天津", 13: "河北", 14: "山西", 15: "内蒙古", 21: "辽宁", 22: "吉林", 23: "黑龙江 ", 31: "上海", 
 48                          32: "江苏", 33: "浙江", 34: "安徽", 35: "福建", 36: "江西", 37: "山东", 41: "河南", 42: "湖北 ", 43: "湖南", 
 49                          44: "广东", 45: "广西", 46: "海南", 50: "重庆", 51: "四川", 52: "贵州", 53: "云南", 54: "西藏 ", 61: "陕西", 
 50                          62: "甘肃", 63: "青海", 64: "宁夏", 65: "新疆", 71: "台湾", 81: "香港", 82: "澳门", 91: "国外 " };
 51         
 52         //身份证验证
 53         function cardCheck(card) {
 54             var d = new Date();
 55             var reg = /(^\d{15}$)|(^\d{18}$)|(^\d{17}(\d|X|x)$)/;
 56             address = city[card.substr(0, 2)];
 57             
 58             if (card === "")
 59             {
 60                 alert("身份证必须填写,请检查。");
 61                 return false;
 62             }
 63             else if (reg.test(card) === false)
 64             {
 65                 alert("身份证号码应为数字,长度应为15位或18位,请检查。");
 66                 return false;
 67             }
 68             else if (!city[card.substr(0, 2)]) {
 69                 alert("身份证号前两位无效,请检查。");
 70                 return false;
 71             }
 72             //处理18位的身份证号码
 73             else if (card.length == 18)
 74             {
 75                 birth = card.substr(6, 4) + "-" + card.substr(10, 2) + "-" + card.substr(12, 2);
 76                 sex = sexCheck(card.substr(14, 3));
 77                 if (!(dateCheck(parseInt(card.substr(6, 4)), parseInt(card.substr(10, 2)), parseInt(card.substr(12, 2))))) {
 78                     return false;
 79                 }
 80                 year = parseInt(card.substr(6, 4));
 81                 //18位身份证需要验证最后一位校验位
 82                 if (card.length == 18)
 83                 {
 84                     card = card.split('');
 85                     //∑(ai×Wi)(mod 11)
 86                     //加权因子
 87                     var factor = [7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2];
 88                     //校验位
 89                     var parity = [1, 0, 'X', 9, 8, 7, 6, 5, 4, 3, 2];
 90                     var sum = 0;
 91                     var ai = 0;
 92                     var wi = 0;
 93                     for (var i = 0; i < 17; i++)
 94                     {
 95                         ai = card[i];
 96                         wi = factor[i];
 97                         sum += ai * wi;
 98                     }
 99                     var last = parity[sum % 11];
100                     if (parity[sum % 11] != card[17])
101                     {
102                         alert("身份证号最后一位[x]需要大写[X],请检查。");
103                         return false;
104                     }
105                 }
106                 else
107                 {
108                     //年龄
109                     age = (parseInt(d.getFullYear()) - year);
110                     return {"addr":address,"birth":birth,"sex":sex ,"age":age};;
111                 }
112             }//处理15位的身份号码
113             else if (card.length == 15)
114             {
115                 birth = "19" + card.substr(6, 2) + "-" + card.substr(8, 2) + "-" + card.substr(10, 2);
116                 sex = sexCheck(card.substr(12, 3));
117                 if (!(dateCheck(parseInt(card.substr(6, 2)), parseInt(card.substr(8, 2)), parseInt(card.substr(10, 2)))))
118                 {
119                     return false;
120                 }
121                 year = parseInt(card.substr(6, 2));
122             }
123         
124             //年龄
125             age = (parseInt(d.getFullYear()) - year);
126             return {"addr":address,"birth":birth,"sex":sex ,"age":age};
127         }
128         
129         //年月日验证
130         function dateCheck(year, month, day)
131         {
132             var d = new Date();
133             if (month > 12 || month <= 0)
134             {
135                 alert("月应在1-12之间");
136                 return false;
137             }
138             if (day > 31 || day <= 0)
139             {
140                 alert("日应在1-31之间");
141                 return false;
142             }
143             var nowYear = d.getFullYear();
144             if (year > nowYear)
145             {
146                 alert("年不能超过今年");
147                 return false;
148             }
149             return true;
150         }
151         
152         //判断性别
153         function sexCheck(sex)
154         {
155             if (parseInt(sex) % 2 == 0) {
156                 return "2";
157             }
158             else
159             {
160                 return "1";
161             }
162         }
163         /**
164          * 给用户显示汉字性别 
165          */
166         function getSexName(sex){
167             if(sex==1){return "男"}
168             else if(sex==2){return "女"}
169             else {return "未知"}
170         }

JavaScript:表单提交校验部分

/**
		 * 提交 - 卡信息 
		 */
		function submitCard(){
			if(emptyValidata({
			"patientname":"姓名不能为空",
			"idcard":"身份证号不能为空",
			"province":"省份不能为空"
			})){
				alert("此处,请求后台。请编写自身项目的业务代码");
			}
			
		}
		/**
		 *验证 - 提交 - 非空 
		 */
		function emptyValidata(vldtJson){
			for(var key in vldtJson){
				if($("#"+key).val()==""){$("#"+key).focus(); alert(vldtJson[key]);return false;}
			}
			return true;
		}

 以上,ok.

--by.沫沫金

微信联系

 

文章评论

聊聊HTTPS和SSL/TLS协议
聊聊HTTPS和SSL/TLS协议
每天工作4小时的程序员
每天工作4小时的程序员
为啥Android手机总会越用越慢?
为啥Android手机总会越用越慢?
当下全球最炙手可热的八位少年创业者
当下全球最炙手可热的八位少年创业者
程序员应该关注的一些事儿
程序员应该关注的一些事儿
2013年美国开发者薪资调查报告
2013年美国开发者薪资调查报告
科技史上最臭名昭著的13大罪犯
科技史上最臭名昭著的13大罪犯
Java 与 .NET 的平台发展之争
Java 与 .NET 的平台发展之争
Java程序员必看电影
Java程序员必看电影
一个程序员的时间管理
一个程序员的时间管理
“肮脏的”IT工作排行榜
“肮脏的”IT工作排行榜
我的丈夫是个程序员
我的丈夫是个程序员
那些性感的让人尖叫的程序员
那些性感的让人尖叫的程序员
我跳槽是因为他们的显示器更大
我跳槽是因为他们的显示器更大
要嫁就嫁程序猿—钱多话少死的早
要嫁就嫁程序猿—钱多话少死的早
初级 vs 高级开发者 哪个性价比更高?
初级 vs 高级开发者 哪个性价比更高?
不懂技术不要对懂技术的人说这很容易实现
不懂技术不要对懂技术的人说这很容易实现
程序员最害怕的5件事 你中招了吗?
程序员最害怕的5件事 你中招了吗?
程序员眼里IE浏览器是什么样的
程序员眼里IE浏览器是什么样的
亲爱的项目经理,我恨你
亲爱的项目经理,我恨你
Web开发人员为什么越来越懒了?
Web开发人员为什么越来越懒了?
Web开发者需具备的8个好习惯
Web开发者需具备的8个好习惯
60个开发者不容错过的免费资源库
60个开发者不容错过的免费资源库
编程语言是女人
编程语言是女人
看13位CEO、创始人和高管如何提高工作效率
看13位CEO、创始人和高管如何提高工作效率
程序员和编码员之间的区别
程序员和编码员之间的区别
什么才是优秀的用户界面设计
什么才是优秀的用户界面设计
如何区分一个程序员是“老手“还是“新手“?
如何区分一个程序员是“老手“还是“新手“?
Google伦敦新总部 犹如星级庄园
Google伦敦新总部 犹如星级庄园
为什么程序员都是夜猫子
为什么程序员都是夜猫子
旅行,写作,编程
旅行,写作,编程
5款最佳正则表达式编辑调试器
5款最佳正则表达式编辑调试器
老程序员的下场
老程序员的下场
程序员都该阅读的书
程序员都该阅读的书
如何成为一名黑客
如何成为一名黑客
写给自己也写给你 自己到底该何去何从
写给自己也写给你 自己到底该何去何从
程序猿的崛起——Growth Hacker
程序猿的崛起——Growth Hacker
 程序员的样子
程序员的样子
我是如何打败拖延症的
我是如何打败拖延症的
总结2014中国互联网十大段子
总结2014中国互联网十大段子
团队中“技术大拿”并非越多越好
团队中“技术大拿”并非越多越好
10个调试和排错的小建议
10个调试和排错的小建议
做程序猿的老婆应该注意的一些事情
做程序猿的老婆应该注意的一些事情
程序员的鄙视链
程序员的鄙视链
鲜为人知的编程真相
鲜为人知的编程真相
代码女神横空出世
代码女神横空出世
老美怎么看待阿里赴美上市
老美怎么看待阿里赴美上市
十大编程算法助程序员走上高手之路
十大编程算法助程序员走上高手之路
漫画:程序员的工作
漫画:程序员的工作
软件开发程序错误异常ExceptionCopyright © 2009-2015 MyException 版权所有