本篇文章是本人在网上搜集了一些验证,然后又个人进行一定修改的关于身份证的验证,欢迎修改指正。。。。。

function IdCardValidateRule(idCard) {

var tip;
    //1.传入15位或者18位身份证号码,18位号码末位可以为数字或X
    idCard = idCard.toUpperCase();
    //2.去掉身份证的左右空格
    idCard = trim(idCard);
    //3.判断输入的身份证长度
    if (!(/(^\d{15}$)|(^\d{17}([0-9]|X)$)/.test(idCard))) {
         tip = "身份证号长度不正确或不符合规定!";
         return false;
     }
    //4.验证前两位城市编码是否正确 
    var aCity = { 11: "北京", 12: "天津", 13: "河北", 14: "山西", 15: "内蒙古", 21: "辽宁", 22: "吉林", 23: "黑龙江 ", 31: "上海", 32: "江苏", 33: "浙江", 34: "安徽", 35: "福建", 36: "江西", 37: "山东", 41: "河南", 42: "湖北", 43: "湖南", 44: "广东", 45: "广西", 46: "海南", 50: "重庆",     51: "四川", 52: "贵州", 53: "云南", 54: "西藏", 61: "陕西", 62: "甘肃", 63: "青海", 64: "宁夏", 65: "新疆", 71: "台湾", 81: "香港", 82: "澳门", 91: "国外" };
    if (aCity[parseInt(idCard.substr(0, 2))] == null) {
         tip = "身份证号不正确或不符合规定!";
         return false;
     }
     //5.验证出生日期和校验位
     if (validId15(idCard) || validId18(idCard)) {
         return true;
     } else {
         return false;
     }
     //身份证18位号码验证
     function validId18(str) {
          if (str.length != 18) return false;//长度验证
          //1. 出生日期验证
          re = new RegExp(/^(\d{6})(\d{4})(\d{2})(\d{2})(\d{3})([0-9]|X)$/);
          //also re = /^(\d{6})(\d{4})(\d{2})(\d{2})(\d{3})([0-9]|X)$/;
          arrSplit = str.match(re); //检查生日日期是否正确 
          if (arrSplit != null) {
                if (!YearMonthDayValidate(arrSplit[2], arrSplit[3], arrSplit[4])) {
                     tip = "出生日期不正确";
                     return false;
                 }
           }
           else {
                     return false;
            }
           //2. 校验位验证
           iW = new Array(7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2, 1);//加权因子
           iSum = 0;
           for (i = 0; i < 17; i++) {
              iC = str.charAt(i);
              iVal = parseInt(iC);
              iSum += iVal * iW[i];
            }
            iJYM = iSum % 11;//取模
            var sJYM = '';
           //获取的模查找对应的校验码字符值
          if (iJYM == 0) sJYM = "1";
          else if (iJYM == 1) sJYM = "0";
          else if (iJYM == 2) sJYM = "x";
          else if (iJYM == 3) sJYM = "9";
          else if (iJYM == 4) sJYM = "8";
          else if (iJYM == 5) sJYM = "7";
          else if (iJYM == 6) sJYM = "6";
          else if (iJYM == 7) sJYM = "5";
          else if (iJYM == 8) sJYM = "4";
          else if (iJYM == 9) sJYM = "3";
          else if (iJYM == 10) sJYM = "2";
          var cCheck = str.charAt(17).toLowerCase();
          if (cCheck != sJYM) {
              return false;
           }
              return true;
          }

//身份证15位(1984-2004)身份验证 
          function validId15(str) {
               if (str.length != 15) return false;
           //1. 出生日期验证
           re = new RegExp(/^(\d{6})(\d{2})(\d{2})(\d{2})(\d{3})$/);
           arrSplit = str.match(re); //检查生日日期是否正确 
            if (arrSplit != null) {
                if (parseInt(arrSplit[2].substr(1)) > 0) {
                      arrSplit[2] = "19" + arrSplit[2];
                } else {
                      arrSplit[2] = "20" + arrSplit[2]
                }
               if (!YearMonthDayValidate(arrSplit[2], arrSplit[3], arrSplit[4])) {
                      tip = "出生日期不正确";
                      return false;
                }
             } else {
                      return false;
                     }
           return true;
        }

//出生日期的年月日验证
         function YearMonthDayValidate(year, month, day) {
             year = parseInt(year); //年
             month = parseInt(month);//月
             day = parseInt(day);//日
             //判断年,月,日是否为空
            if (isNaN(year) || isNaN(month) || isNaN(day)) return false;
            //判断月是否是在1-12月之间
            if (month < 1 || month > 12) return false;
            //返回当月的最后一天
            var date = new Date(year, month, 0);
            //判断是否超过天数范围
             if (day < 1 || day > date.getDate()) return false;
          return true;
        }

//去掉字符串两端左右空格
         function trim(strs) {
            return strs.replace(/(^\s*)|(\s*$)/g, ""); //使用js正则表达式方法
         }
}

js验证15位或18位身份证的更多相关文章

  1. Js验证15/18身份证

    var vcity={ 11:"北京",12:"天津",13:"河北",14:"山西",15:"内蒙古&quo ...

  2. 18位身份证验证--java实现,正则表达式

    简单的正则表达式: (1)preg_match("/^(\d{18,18}|\d{15,15}|\d{17,17}x)$/",$id_card)(2)preg_match(&quo ...

  3. php验证18位身份证,准到必须输入正确的身份证号,

    /** * 验证18位身份证(计算方式在百度百科有) * @param string $id 身份证 * return boolean */ function check_identity($id=' ...

  4. Java随机生成18位身份证号

    package com.ihome.data; import java.text.SimpleDateFormat; import java.util.Calendar; import java.ut ...

  5. Java实现18位身份证校验代码

    import java.util.Scanner; /** * 18位身份证校验 * @author [J.H] * */ public class Test { // 身份证校验 public st ...

  6. C#实现的18位身份证格式验证算法

    18位身份证标准在国家质量技术监督局于1999年7月1日实施的GB11643-1999<公民身份号码>中做了明确的规定. GB11643-1999<公民身份号码>为GB1164 ...

  7. 18位身份证验证(Java)加入身份证输入验证是否满足18位代码(修订稿)

    package day20181016; /** * 身份证的验证 34052419800101001X * */ import java.util.Scanner; public class Zuo ...

  8. 18位身份证验证(Java)

    我的代码: package day20181016;/** * 身份证的验证 34052419800101001X * */import java.util.Scanner;public class ...

  9. js正则判断实现18位数字

    js实现18位数字 var stuCardReg = /^[0-9]{18}/; var stuCard = $('.inp).val();//获取input框中的数值 if (!stuCardReg ...

随机推荐

  1. CSS 浅析position:relative/absolute定位方式

    ## 一.position:relative 相对定位 ## 分两种情况分析: · 无 position: relative: · 有 position: relative. 代码如下图: 显示效果如 ...

  2. Struts2 Action接收POST请求JSON数据及其实现解析

    一.认识JSON JSON是一种轻量级.基于文本.与语言无关的数据交换格式,可以用文本格式的形式来存储或表示结构化的数据. 二.POST请求与Content-Type: application/jso ...

  3. 基于spring多数据源动态调用及其事务处理

    需求: 有些时候,我们需要连接多个数据库,但是,在方法调用前并不知道到底是调用哪个.即同时保持多个数据库的连接,在方法中根据传入的参数来确定. 下图的单数据源的调用和多数据源动态调用的流程,可以看出在 ...

  4. Swift大写和小写字符串

    您可以通过字符串的 uppercaseString 和 lowercaseString 属性来访问一个字符串的大写/小写版本. 复制纯文本新窗口 let normal = "Could yo ...

  5. Socket实现-Socket I/O

    Socket层的核心是两个函数:sosend()和soreceive().这两个函数负责处理所有Socket层和协议层之间的I/O操作. select()系统调用的作用是监控文件描述符的状态.一般用于 ...

  6. Python对象类型及其运算

    Python对象类型及其运算 基本要点: 程序中储存的所有数据都是对象(可变对象:值可以修改 不可变对象:值不可修改) 每个对象都有一个身份.一个类型.一个值 例: >>> a1 = ...

  7. webpack1 新手入门教程

    本文github仓库地址: https://github.com/Rynxiao/webpack-tutorial ,里面包括了本教程的所有代码. [如果你觉得这篇文章写得不错,麻烦给本仓库一颗星:- ...

  8. Eclipse中常用快捷键

    Ctrl+C:复制. Ctrl+V:粘贴. Ctrl+X:剪切. Ctrl+S:保存. Ctrl+Z:撤销. Ctrl+A:全选. F3:快速定位光标位置的某个类.方法和属性. Ctrl+Q:跳到最后 ...

  9. 剖析touch事件在View中的传递

    话不多说,直奔主题,先来看一张图 版权申明:这是csdn上别人的图,我觉得有用,就拿过来了, 然后简单说明下: 总的来说,触摸事件是从最外层的ViewGroup,一级一级传递进来的 和这相关的每个Vi ...

  10. FreeRTOS——任务管理

    1. FreeRTOS 任务不允许以任何方式从实现函数中返回——他们绝不能有一条“return”语句,也不可能执行到函数的末尾.如果一个函数不需要,可以将其删除,如在任务中使用函数vTaskDelet ...