Jquery身份证号校验以及根据身份证自动写入出生年月

效果图:

根据身份证号自动写入出生年月

身份证号码校验:

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框架

转载于:https://www.cnblogs.com/dingjing0518/p/6839498.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值