沫沫金原創提供:完整的根據身份證獲取省份、性別、年齡、生日及頁面驗證

来源:http://www.cnblogs.com/zl0828/archive/2017/08/03/7280701.html
-Advertisement-
Play Games

概述: 身份證的校驗,識別,分離,處處可見。最近H5移動端的項目就需要掃碼獲取身份證,根據身份證自動識別省份、性別、年齡、生日信息。這裡分享完善版,希望大家喜歡。 環境: 依賴jQuery、BootStrap Html JavaScript:身份證驗證及自動識別部分 JavaScript:表單提交校 ...


概述:

身份證的校驗,識別,分離,處處可見。最近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.沫沫金

微信聯繫

 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 初入前端的新人在碰到vue.js後,去過官網,估計粗略的看下api文檔以後會以為vue的安裝只是把那串js代碼直接粘貼複製到文檔即可,雖然這樣是可以,但那在項目中並不合適。 項目中的vue引入(配製安裝環境): 1.安裝node.js,沒有的自己去搜官網下載即可 2.打開cmd命令,安裝淘寶鏡像,這 ...
  • 一、取消a標簽在移動端點擊時的藍色-webkit-tap-highlight-color: rgba(255, 255, 255, 0);-webkit-user-select: none;-moz-user-focus: none;-moz-user-select: none; 二、使用圖片作為a ...
  • 在routes/news_mian.js 設置了訪問news_main.html 的路徑 '/',通知設置一個訪問news-page.html的子路徑'/newspage'子路徑。但是在訪問loaclhost:3000/news/newspage時靜態資源路徑前多了一個/news導致不能找到靜態資源 ...
  • vue10行代碼實現上拉翻頁載入更多數據,純手寫js實現下拉刷新上拉翻頁不引用任何第三方插件/庫 一提到移動端的下拉刷新上拉翻頁,你可能就會想到iScroll插件,沒錯iScroll是一個高性能,資源占用少,無依賴,多平臺的javascript滾動插件。iScroll不僅僅是 滾動。它可以處理任何需 ...
  • ajax 是用來處理前後端交互的技術,可以改善用戶體驗,其本質是 XMLHttpRequest,非同步訪問伺服器併發送請求數據,伺服器返迴響應的數據,以頁面無刷新的效果改變頁面中的局部內容 同步:任務一個一個的執行,只有前面的任務執行完才會執行下一個任務,如果前面的任務是耗時操作,則需要一直等待 非同步 ...
  • 1.通讀了下w3cschool上的簡介:CSS3 box-sizing 屬性_w3cschool。 2.看簡介理解的不夠深刻,偶屬於剛看完轉眼就能忘記的人。出於對自己的不放心,還是老老實實把例子拿到線下看看: <!DOCTYPE html> <html> <head> <meta charset=" ...
  • ————————————————————————————————————————————————————————— 文件拖選v1.0 圖片不清楚時請右鍵點擊"在新鏈接中打開圖片" 實現效果 頁面佈局 實現思路 拖選框 css樣式中設置拖選框樣式,註意設置position: absolute;漂浮狀態 ...
  • *{box-sizing:border-box;} 此情,容器元素css屬性必含overflow:hidden,不然會出問題 $(window).resize(()=>{ $('#willAdjustDiv').width($('#divContainer').width()); }) ; 記錄一下 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...