HTML5技术

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

字号+ 作者:H5之家 来源:H5之家 2017-08-04 09:04 我要评论( )

概述: 身份证的校验,识别,分离,处处可见。最近H5移动端的项目就需要扫码获取身份证,根据身份证自动识别省份、性别、年龄、生日信息。这里分享完善版,希望大家喜欢。 环境: 依赖jQuery、BootStrap Html formdivlabel姓名/labelinput type="text" place

概述:

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

环境:

依赖jQuery、BootStrap

Html

<form> <div> <label>姓名</label> <input type="text" placeholder="姓名"> </div> <div> <label for="exampleInputFile">身份证号</label> <input type="text" placeholder="身份证号" onblur="handIdcard(this.value)" onfocus="clearIdcard()"> </div> <div> <label for="exampleInputFile">联系电话</label> <input type="number" placeholder="联系电话"> </div> <div> <label for="exampleInputPassword1">省份</label> <input type="text" placeholder="输入身份证自动识别省份" readonly="true"> </div> <div> <label for="exampleInputPassword1">生日</label> <input type="text" placeholder="输入身份证自动识别生日" readonly="true"> </div> <div> <label for="exampleInputPassword1">性别</label> <input type="hidden"> <input type="text" placeholder="输入身份证自动识别性别" disabled="true"> </div> <div> <label for="exampleInputPassword1">年龄</label> <input type="text" placeholder="输入身份证自动识别年龄" readonly="true"> </div> <button type="button">保存</button> </form>

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

1 /** 2 * 手动 - 输入身份证校验并解析 3 * 描述:验证合法的身份证并回填省份、生日、性别 handIdcard(obj){ 6 var idcardVlidate = cardCheck(obj); 7 if(idcardVlidate){ 8 callIdcard(idcardVlidate); 9 }else{ 10 $("#idcard").focus(); 11 } 12 } 13 /** 14 * 私有 - 工具 - 回填解析后的身份证信息 15 * 描述:省份、生日、性别 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 * 描述:身份证号码、省份、生日、性别 clearIdcard(){ 29 if($("#province").val()!='')$("#idcard").val(''); 30 $("#province").val(''); 31 $("#birthday").val(''); 32 $("#sex").val(''); 33 $("#sexName").val(''); 34 $("#age").val(''); 35 } birth; 41 var sex; 42 var addrs; 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: "国外 " }; 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)]; (card === "") 59 { 60 alert("身份证必须填写,请检查。"); ; 62 } (reg.test(card) === false) 64 { 65 alert("身份证号码应为数字,长度应为15位或18位,请检查。"); ; 67 } (!city[card.substr(0, 2)]) { 69 alert("身份证号前两位无效,请检查。"); ; 71 } (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))))) { ; 79 } 80 year = parseInt(card.substr(6, 4)); (card.length == 18) 83 { 84 card = card.split(''); factor = [7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2]; 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],请检查。"); ; 104 } 105 } { age = (parseInt(d.getFullYear()) - year); 110 return {"addr":address,"birth":birth,"sex":sex ,"age":age};; 111 } (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 { ; 120 } 121 year = parseInt(card.substr(6, 2)); 122 } age = (parseInt(d.getFullYear()) - year); 126 return {"addr":address,"birth":birth,"sex":sex ,"age":age}; 127 } dateCheck(year, month, day) 131 { 132 var d = new Date(); 133 if (month > 12 || month <= 0) 134 { 135 alert("月应在1-12之间"); ; 137 } 138 if (day > 31 || day <= 0) 139 { 140 alert("日应在1-31之间"); ; 142 } 143 var nowYear = d.getFullYear(); 144 if (year > nowYear) 145 { 146 alert("年不能超过今年"); ; 148 } ; 150 } sexCheck(sex) 154 { 155 if (parseInt(sex) % 2 == 0) { 156 return "2"; 157 } { 160 return "1"; 161 } 162 } 163 /** 164 * 给用户显示汉字性别 getSexName(sex){ 167 if(sex==1){return "男"} (sex==2){return "女"} 169 else {return "未知"} 170 }

JavaScript:表单提交校验部分

 

1.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.本站的原创文章,请转载时务必注明文章作者和来源,不尊重原创的行为我们将追究责任;3.作者投稿可能会经我们编辑修改或补充。

相关文章
  • 【原创】三招搞死你的IE11,并提供可重现代码! - 三生石上(FineUI控件)

    【原创】三招搞死你的IE11,并提供可重现代码! - 三生石上(FineUI控

    2017-08-01 10:00

  • 【原创】 Docker 中 运行 ASP.NET Core 站点 - Meng.NET

    【原创】 Docker 中 运行 ASP.NET Core 站点 - Meng.NET

    2017-07-06 11:00

  • 【原创+史上最全】Nginx+ffmpeg实现流媒体直播点播系统 - MR丶C

    【原创+史上最全】Nginx+ffmpeg实现流媒体直播点播系统 - MR丶C

    2017-06-10 16:01

  • HTML5全局属性——原创(要借鉴的伙伴请标注来源) - YYNSunny

    HTML5全局属性——原创(要借鉴的伙伴请标注来源) - YYNSunny

    2017-05-22 10:01

网友点评