JS严格校验身份证号

以下是根据身份证号码编码规则,使用JS对其进行有效性验证代码

<script type="text/javascript">
	var Wi = [ 7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2, 1 ];    // 加权因子
	var ValideCode = [ 1, 0, 10, 9, 8, 7, 6, 5, 4, 3, 2 ];            // 身份证验证位值.10代表X
	function IdCardValidate(idCard) {
	    idCard = trim(idCard.replace(/ /g, ""));               //去掉字符串头尾空格
	    if (idCard.length == 15) {
	        return isValidityBrithBy15IdCard(idCard);       //进行15位身份证的验证
	    } else if (idCard.length == 18) {
	        var a_idCard = idCard.split("");                // 得到身份证数组
	        if(isValidityBrithBy18IdCard(idCard)&&isTrueValidateCodeBy18IdCard(a_idCard)){   //进行18位身份证的基本验证和第18位的验证
	            return true;
	        }else {
	            return false;
	        }
	    } else {
	        return false;
	    }
	}
	/**
	 * 判断身份证号码为18位时最后的验证位是否正确
	 * @param a_idCard 身份证号码数组
	 * @return
	 */
	function isTrueValidateCodeBy18IdCard(a_idCard) {
	    var sum = 0;                             // 声明加权求和变量
	    if (a_idCard[17].toLowerCase() == ‘x‘) {
	        a_idCard[17] = 10;                    // 将最后位为x的验证码替换为10方便后续操作
	    }
	    for ( var i = 0; i < 17; i++) {
	        sum += Wi[i] * a_idCard[i];            // 加权求和
	    }
	    valCodePosition = sum % 11;                // 得到验证码所位置
	    if (a_idCard[17] == ValideCode[valCodePosition]) {
	        return true;
	    } else {
	        return false;
	    }
	}
	/**
	  * 验证18位数身份证号码中的生日是否是有效生日
	  * @param idCard 18位书身份证字符串
	  * @return
	  */
	function isValidityBrithBy18IdCard(idCard18){
	    var year =  idCard18.substring(6,10);
	    var month = idCard18.substring(10,12);
	    var day = idCard18.substring(12,14);
	    var temp_date = new Date(year,parseFloat(month)-1,parseFloat(day));
	    // 这里用getFullYear()获取年份,避免千年虫问题
	    if(temp_date.getFullYear()!=parseFloat(year)
	          ||temp_date.getMonth()!=parseFloat(month)-1
	          ||temp_date.getDate()!=parseFloat(day)){
	            return false;
	    }else{
	        return true;
	    }
	}
	  /**
	   * 验证15位数身份证号码中的生日是否是有效生日
	   * @param idCard15 15位书身份证字符串
	   * @return
	   */
	  function isValidityBrithBy15IdCard(idCard15){
	      var year =  idCard15.substring(6,8);
	      var month = idCard15.substring(8,10);
	      var day = idCard15.substring(10,12);
	      var temp_date = new Date(year,parseFloat(month)-1,parseFloat(day));
	      // 对于老身份证中的你年龄则不需考虑千年虫问题而使用getYear()方法
	      if(temp_date.getYear()!=parseFloat(year)
	              ||temp_date.getMonth()!=parseFloat(month)-1
	              ||temp_date.getDate()!=parseFloat(day)){
	                return false;
	        }else{
	            return true;
	        }
	  }
	//去掉字符串头尾空格
	function trim(str) {
	    return str.replace(/(^\s*)|(\s*$)/g, "");
	}
</script>

在线演示    ←不信你试试

作者:itmyhome

时间: 2024-08-04 23:05:58

JS严格校验身份证号的相关文章

js实现填写身份证号、手机号、准考证号等信息自动空格的效果

咱们做网站的,用户体验那是相当重要的,比如12306抢票需要填写身份证,如果不空格,密密麻麻的给我一种很压抑的感觉,而且也不容易核对信息是否填写正确,所以我就写了一个利用Js实现填写身份证号.手机号.准考证号等信息自动空格的效果. 为了方便,自已定义的一个简单的get()方法和trim()方法,代码如下: //获取对应的对象--function函数. function get(id) { return document.getElementById(id); } //去掉所有空格--String

锋利的js之验证身份证号

我们在做互联网网站时,注册个人资料时,经常要用到身份证号,我们需要对身份证进验证,不然别人随便输个号码就通过,让你感觉这个网站做得很shit. 身份证号是有规则的. 结构和形式 1.号码的结构  公民身份号码是特征组合码,由十七位数字本体码和一位校验码组成.排列顺序从左至右依次为:六位数字地址码,八位数字出生日期码,三位数字顺序码和一位数字校验码.  2.地址码  表示编码对象常住户口所在县(市.旗.区)的行政区划代码,按GB/T2260的规定执行.  3.出生日期码  表示编码对象出生的年.月

js事实验证身份证号

这里禁止了input框粘贴的功能. <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Document</title> <script src="http://ss.lamahui.com/js/base/pc/v1.0.js"></script> <scr

js实现完美身份证号有效性验证

最近需要对身份证合法性进行验证,实名验证是不指望了,不过原来的验证规则太过简单,只是简单的验证了身份证长度,现在业务需要加强下身份证验证规则,网上找到了不少资料,不过都不合偶的心意,无奈只好直接写一个,代码还是用自己的舒服哈 已实现功能:支持15位和18位身份证号,支持地址编码.出生日期.校验位验证 代码如下: /*根据[中华人民共和国国家标准 GB 11643-1999]中有关公民身份号码的规定,公民身份号码是特征组合码,由十七位数字本体码和一位数字校验码组成.排列顺序从左至右依次为:六位数字

身份证号正则校验(js校验+JAVA校验)

js校验身份证号[15位和18位] 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 8

证件类型为身份证号时进行身份证校验

需求:代办人身份证号改为代办人证件类型(默认为身份证号),后面跟着号码,房主和代办人的证件类型为身份证号时进行身份证校验 sf_ghgl_add.jsp <td class="labelCss">代办人证件类型:</td> <td><select id="zjlx" width="10px" class="easyui-combobox" data-options="url:

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

效果图: 根据身份证号自动写入出生年月 身份证号码校验: js代码部分: 1 $(function() { 2 jQuery.validator.addMethod("isIdCardNo", function (value, element) { 3 return this.optional(element) || isIdCardNo(value); 4 }, "请正确输入您的身份证号码"); 5 6 $.datepicker.setDefaults($.dat

js验证真实姓名与身份证号

最近的项目中用的需要调用实名认证的接口,实名认证接口价格相比短信而言高了不是几分钱,所以说调用实名认证的条件就要严格把关,因此用到js验证真实姓名与js验证身份证号. 进入正题 js验证真实姓名,是用的unicode字符的来进行匹配,而中国人的姓名长度一般都是2-4,所以重复匹配{2,4}次 1.js验证真实姓名 1 var regName =/^[\u4e00-\u9fa5]{2,4}$/; 2 if(!regName.test(name)){ 3 alert('真实姓名填写有误'); 4 r

身份证号生成,校验码计算

二代身份证号有18位,组成是: 6位地区码+8位出生年月日+3位顺序码+1位校验码 其中,校验码计算如下图,本范例按照红色计算方向走 第一步骤就是映射权重:第二步骤是求积:第三步骤相加求余:最后一个步骤就是查找码表得出最后1位字符 红色方向数字更小,计算更快. import randomimport time   # 地区区域码,此范例只列出3位areas = ('610622', '410901', '321281', '350581')# 身份证前17位权重w17 = (7, 9, 10,