1. 程式人生 > >Jquery身份證號校驗以及根據身份證自動寫入出生年月

Jquery身份證號校驗以及根據身份證自動寫入出生年月

spa ron and digi tro 號碼 hang code birt

效果圖:

根據身份證號自動寫入出生年月

技術分享

身份證號碼校驗:

技術分享

js代碼部分:

  1 $(function() {
  2     jQuery.validator.addMethod("isIdCardNo", function (value, element) {
  3         return this.optional(element) || isIdCardNo(value);
  4     }, "請正確輸入您的身份證號碼");
  5     
  6     $.datepicker.setDefaults($.datepicker.regional["zh-CN"]);
7 8 $(.datepicker).datepicker({ 9 dateFormat : yy-mm-dd, 10 changeMonth : true, 11 changeYear : true 12 }); 13 14 $(#form).validate({ 15 onkeyup : false, 16 rules : { 17 memberDetail.realName : { 18 minlength : 2
, 19 maxlength : 10, 20 }, 21 card:{ 22 required : true 23 }, 24 name : { 25 digits:true, 26 required : true, 27 minlength : 11, 28 maxlength : 11,
29 remote : { 30 url : global.context + /admin/members/duplicate, 31 data : { 32 name : $(#mobile).val() 33 } 34 } 35 }, 36 memberDetail.ic: { 37 isIdCardNo: true 38 }, 39 memberDetail.birthday : { 40 dateISO : true 41 }, 42 memberDetail.address : { 43 maxlength : 200 44 } 45 }, 46 messages : { 47 memberDetail.realName : { 48 minlength : 最短長度為2, 49 maxlength : 最大長度為10 50 }, 51 card:{ 52 required : 請選擇一種類型 53 }, 54 name : { 55 digits:請輸入數字, 56 required : 請輸入手機號, 57 remote : 手機號不能重復, 58 minlength : 手機號為11位, 59 maxlength : 手機號為11位 60 }, 61 memberDetail.birthday : { 62 dateISO : 請輸入正確的日期格式yyyy-mm-dd 63 }, 64 memberDetail.address : { 65 maxlength : 長度小於200 66 } 67 } 68 }); 69 //根據身份證信息寫入出生年月 70 $("#ic").blur(function(){ 71 if($.trim($("#ic").val()) != "") { 72 var date = ""; 73 if($("#ic").val().length == 15) { 74 date = 19+$("#ic").val().substr(6,2)+-+$("#ic").val().substr(8,2)+-+$("#ic").val().substr(10,2); 75 } else if ($("#ic").val().length == 18) { 76 date = $("#ic").val().substr(6,4)+-+$("#ic").val().substr(10,2)+-+$("#ic").val().substr(12,2); 77 } 78 $("[id=‘memberDetail.birthday‘]").val(date); 79 } 80 }); 81 }) 82 83 //增加身份證驗證 84 function isIdCardNo(num) { 85 var factorArr = new Array(7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2, 1); 86 var parityBit = new Array("1", "0", "X", "9", "8", "7", "6", "5", "4", "3", "2"); 87 var varArray = new Array(); 88 var intValue; 89 var lngProduct = 0; 90 var intCheckDigit; 91 var intStrLen = num.length; 92 var idNumber = num; 93 // initialize 94 if ((intStrLen != 15) && (intStrLen != 18)) { 95 return false; 96 } 97 // check and set value 98 for (i = 0; i < intStrLen; i++) { 99 varArray[i] = idNumber.charAt(i); 100 if ((varArray[i] < 0 || varArray[i] > 9) && (i != 17)) { 101 return false; 102 } else if (i < 17) { 103 varArray[i] = varArray[i] * factorArr[i]; 104 } 105 } 106 if (intStrLen == 18) { 107 //check date 108 var date8 = idNumber.substring(6, 14); 109 if (isDate8(date8) == false) { 110 return false; 111 } 112 // calculate the sum of the products 113 for (i = 0; i < 17; i++) { 114 lngProduct = lngProduct + varArray[i]; 115 } 116 // calculate the check digit 117 intCheckDigit = parityBit[lngProduct % 11]; 118 // check last digit 119 if (varArray[17] != intCheckDigit) { 120 return false; 121 } 122 } 123 else { //length is 15 124 //check date 125 var date6 = idNumber.substring(6, 12); 126 if (isDate6(date6) == false) { 127 return false; 128 } 129 } 130 return true; 131 } 132 function isDate6(sDate) { 133 if (!/^[0-9]{6}$/.test(sDate)) { 134 return false; 135 } 136 var year, month, day; 137 year = sDate.substring(0, 4); 138 month = sDate.substring(4, 6); 139 if (year < 1700 || year > 2500) return false; 140 if (month < 1 || month > 12) return false; 141 return true; 142 } 143 144 function isDate8(sDate) { 145 if (!/^[0-9]{8}$/.test(sDate)) { 146 return false; 147 } 148 var year, month, day; 149 year = sDate.substring(0, 4); 150 month = sDate.substring(4, 6); 151 day = sDate.substring(6, 8); 152 var iaMonthDays = [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31] 153 if (year < 1700 || year > 2500) return false; 154 if (((year % 4 == 0) && (year % 100 != 0)) || (year % 400 == 0)) iaMonthDays[1] = 29; 155 if (month < 1 || month > 12) return false; 156 if (day < 1 || day > iaMonthDays[month - 1]) return false; 157 return true; 158 }

頁面元素的驗證是基於jquery validate框架

Jquery身份證號校驗以及根據身份證自動寫入出生年月