身份证、港澳居民来往内地通行证、港澳居民身份证、台湾居民来往大陆通行证、护照等正则

表单验证需要,百度了很多,综合了一下,如有错误,欢迎指出。

//身份证号合法性验证 
//支持15位和18位身份证号
//支持地址编码、出生日期、校验位验证
function IdentityCodeValid(code) { 
  var city={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:"国外 "};
  var tip = "";
  var pass= true;

  if(!code || !/^\d{6}(18|19|20)?\d{2}(0[1-9]|1[012])(0[1-9]|[12]\d|3[01])\d{3}(\d|X)$/i.test(code)){
      tip = "身份证输入错误";
      pass = false;
  }else if(!city[code.substr(0,2)]){
      tip = "身份证输入错误";
      pass = false;
  }
  else{
      //18位身份证需要验证最后一位校验位
      if(code.length == 18){
          code = code.split('');
          //∑(ai×Wi)(mod 11)
          //加权因子
          var factor = [ 7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2 ];
          //校验位
          var parity = [ 1, 0, 'X', 9, 8, 7, 6, 5, 4, 3, 2 ];
          var sum = 0;
          var ai = 0;
          var wi = 0;
          for (var i = 0; i < 17; i++)
          {
              ai = code[i];
              wi = factor[i];
              sum += ai * wi;
          }
          var last = parity[sum % 11];
          if(parity[sum % 11] != code[17]){
              tip = "身份证输入错误";
              pass =false;
          }
      }
  }
  if(!pass) layer.open({content: tip, skin: 'msg',time:2});
  return pass;
}

// 港澳居民来往内地通行证
// 规则:通行证证件号码共11位。第1位为字母,“H”字头签发给香港居民,“M”字头签发给澳门居民;
// 第2位至第11位为数字,前8位数字为通行证持有人的终身号,后2位数字表示换证次数,首次发证为00,此后依次递增。
// H/M + 8位或10位数字
// 样本: H12345678 或 H1234567801
function HMCardValid(data) {
    var reg = /^[H|h|M|m](\d{8}|\d{10})$/; 
    var tip = '', pass = true;
    if (!data) {
        tip = ' 港澳居民来往内地通行证号码不能为空';
        pass = false;
    } else if (!reg.test(data.trim())) {
        tip = ' 港澳居民来往内地通行证号码输入错误';
        pass = false;
    } 
    
    if(!pass) layer.open({content: tip, skin: 'msg',time:2});
    return pass;
}

// 香港  
// 规则: XYabcdef(z)表示。「X」可能是「空格」或是一个英文字母,「Y」则必定是英文字母。「abcdef」代表一个六位数字,而「z」是作为检码之用,它的可能选择是0, 1, 2, ... , 9, A(代表10)
// 样本: C668668(a)    X354670(0)    b354670(a)    g354670a
// reg = /^((\s?[A-Za-z])|([A-Za-z]{2}))\d{6}\(?[0−9aA]\)?$/;

// 澳门:
// 规则: 居民身份证号码由8个拉丁数字组成格式为XNNNNNN(Y)   
// 样本: 5215299(8) 
// reg = /^[1|5|7][0-9]{6}\(?[0-9Aa]\)?/;
function MacaoIdCardValid(data) {
    var reg = /^[1|5|7][0-9]{6}\(?[0-9Aa]\)?/;
    var tip = '', pass = true;
    if (!data) {
        tip = '澳门居民来身份证号码不能为空';
        pass = false;
    } else if (!reg.test(data.trim())) {
        tip = '澳门居民身份证号码输入错误';
        pass = false;
    } 
    
    if(!pass) layer.open({content: tip, skin: 'msg',time:2});
    return pass;
}

// 台湾居民来往大陆通行证
// 规则: 新版8位或18位数字, 旧版10位数字 + 英文字母
// 样本: 12345678 或 1234567890B  R122159007
function TWCardValid(data) {
     var reg = /^\d{8}|^[a-zA-Z0-9]{10}|^\d{18}$/;
     var tip = '', pass = true;
     if (!data) {
        tip = '台湾居民来往大陆通行证号码不能为空';
         pass = false;
     } else if (!reg.test(data.trim())) {
        tip = '台湾居民来往大陆通行证号码输入错误';
         pass = false;
     } 
    
     if(!pass) layer.open({content: tip, skin: 'msg',time:2});
     return pass;
}

// 护照
// 规则: 14/15开头 + 7位数字, G + 8位数字, P + 7位数字, S/D + 7或8位数字,等
// 样本: 141234567, G12345678, P1234567 
function PassPortCardValid(data) {
     var reg = /(^[EeKkGgDdSsPpHh]\d{8}$)|(^(([Ee][a-fA-F])|([DdSsPp][Ee])|([Kk][Jj])|([Mm][Aa])|(1[45]))\d{7}$)/ ;
     var tip = '', pass = true;
     if (!data) {
         tip = '护照号码不能为空';
         pass = false;
     } else if (!reg.test(data.trim())) {
         tip = '护照号码输入错误';
         pass = false;
     } 
    
     if(!pass) layer.open({content: tip, skin: 'msg',time:2});
     return pass;
}

// 军人/武警身份证件验证
// 规则: 军/兵/士/文/职/广/(其他中文) + "字第" + 4到8位字母或数字 + "号"
// 样本: 军字第2001988号, 士字第P011816X号
function SoldierCardValid(data) {
    var reg = /^[\u4E00-\u9FA5](字第)([0-9a-zA-Z]{4,8})(号?)$/;
    var tip = '', pass = true;
     if (!data) {
         tip = '军人/武警证件号码不能为空';
         pass = false;
     } else if (!reg.test(data.trim())) {
         tip = '军人/武警证件号码输入错误';
         pass = false;
     }

     if(!pass) layer.open({content: tip, skin: 'msg',time:2});
     return pass;
}

你可能感兴趣的:(身份证、港澳居民来往内地通行证、港澳居民身份证、台湾居民来往大陆通行证、护照等正则)