身份证校验和获取身份证信息的方法

身份证基础校验

/*身份证基础校验*/
export function checkidcard(idcard) {
  var result = true;
  var area = {
    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 Y, JYM;
  var S, M;
  var idcard_array = new Array();
  idcard_array = idcard.split("");
  if (area[parseInt(idcard.substr(0, 2))] == null) {
    result = false;
  }
  var ereg = "";
  switch (idcard.length) {
    case 18:
      if (
        parseInt(idcard.substr(6, 4)) % 4 == 0 ||
        (parseInt(idcard.substr(6, 4)) % 100 == 0 &&
          parseInt(idcard.substr(6, 4)) % 4 == 0)
      ) {
        ereg = /^[1-9][0-9]{5}(19|20)[0-9]{2}((01|03|05|07|08|10|12)(0[1-9]|[1-2][0-9]|3[0-1])|(04|06|09|11)(0[1-9]|[1-2][0-9]|30)|02(0[1-9]|[1-2][0-9]))[0-9]{3}[0-9Xx]$/;
        // 闰年出生日期的合法性正则表达式
      } else {
        ereg = /^[1-9][0-9]{5}(19|20)[0-9]{2}((01|03|05|07|08|10|12)(0[1-9]|[1-2][0-9]|3[0-1])|(04|06|09|11)(0[1-9]|[1-2][0-9]|30)|02(0[1-9]|1[0-9]|2[0-8]))[0-9]{3}[0-9Xx]$/;
        // 平年出生日期的合法性正则表达式
      }
      if (ereg.test(idcard)) {
        S =
          (parseInt(idcard_array[0]) + parseInt(idcard_array[10])) * 7 +
          (parseInt(idcard_array[1]) + parseInt(idcard_array[11])) * 9 +
          (parseInt(idcard_array[2]) + parseInt(idcard_array[12])) * 10 +
          (parseInt(idcard_array[3]) + parseInt(idcard_array[13])) * 5 +
          (parseInt(idcard_array[4]) + parseInt(idcard_array[14])) * 8 +
          (parseInt(idcard_array[5]) + parseInt(idcard_array[15])) * 4 +
          (parseInt(idcard_array[6]) + parseInt(idcard_array[16])) * 2 +
          parseInt(idcard_array[7]) * 1 +
          parseInt(idcard_array[8]) * 6 +
          parseInt(idcard_array[9]) * 3;
        Y = S % 11;
        M = "F";
        JYM = "10X98765432";
        M = JYM.substr(Y, 1);
        if (M == idcard_array[17]) {
          result = true;
        } else {
          result = false;
        }
      } else {
        result = false;
      }
      break;
    case 15:
      if (
        (parseInt(idcard.substr(6, 2)) + 1900) % 4 == 0 ||
        ((parseInt(idcard.substr(6, 2)) + 1900) % 100 == 0 &&
          (parseInt(idcard.substr(6, 2)) + 1900) % 4 == 0)
      ) {
        ereg = /^[1-9][0-9]{5}[0-9]{2}((01|03|05|07|08|10|12)(0[1-9]|[1-2][0-9]|3[0-1])|(04|06|09|11)(0[1-9]|[1-2][0-9]|30)|02(0[1-9]|[1-2][0-9]))[0-9]{3}$/; // 测试出生日期的合法性
      } else {
        ereg = /^[1-9][0-9]{5}[0-9]{2}((01|03|05|07|08|10|12)(0[1-9]|[1-2][0-9]|3[0-1])|(04|06|09|11)(0[1-9]|[1-2][0-9]|30)|02(0[1-9]|1[0-9]|2[0-8]))[0-9]{3}$/; // 测试出生日期的合法性
      }

      if (ereg.test(idcard)) {
        result = true;
      } else {
        result = false;
      }
      break;
    default:
      result = false;
      break;
  }
  return result;
}

通过身份证号获取生日,性别

/**
 * 通过身份证号获取生日,性别
 * 返回:{birth:",sex:"}
 * getBirthByCid 通过身份证号获取生日,性别
 * @param {str}   身份证号码
 * @return {obj}  {birth: ", sex: "}
 */
export function getInfoByIdcard(idcard) {
  var rel = {};
  var tmpStr = "";
  var sexStr = "";
  idcard = idcard.replace(/\s*/g, "");
  if (isDefined(idcard) && idcard.length == 18) {
    tmpStr = idcard.substring(6, 14);
    tmpStr =
      tmpStr.substring(0, 4) +
      "-" +
      tmpStr.substring(4, 6) +
      "-" +
      tmpStr.substring(6);
    sexStr = parseInt(idcard.substr(16, 1), 10) % 2 ? "男" : "女";
  } else if (isDefined(idcard) && idcard.length == 15) {
    tmpStr = idcard.substring(6, 12);
    var year = tmpStr.substring(0, 2);
    if (parseInt(year) < 20) {
      tmpStr = "20" + tmpStr;
    } else {
      tmpStr = "19" + tmpStr;
    }
    tmpStr =
      tmpStr.substring(0, 4) +
      "-" +
      tmpStr.substring(4, 6) +
      "-" +
      tmpStr.substring(6);
    sexStr = parseInt(idcard.substr(14, 1), 10) % 2 ? "男" : "女";
  } else {
    tmpStr = "";
    sexStr = "";
  }
  rel.birth = tmpStr;
  rel.sex = sexStr;
  return rel;
}

根据身份证号判断性别

/**
 * getSexByIdcard  根据身份证号判断性别
 * @param {str}  idcard  身份证号
 * @return {str} "男"/"女"
 */
export function getSexByIdcard(idcard) {
  if (parseInt(idcard.substr(16, 1)) % 2 == 1) {
    return "男";
  } else {
    return "女";
  }
}

根据出生日期获取年龄

/**
 * getAgeByBirth 根据出生日期获取年龄
 * @param {str} birthday 出生日期 2018-02-08
 * @return {num} 年龄
 */
export function getAgeByBirth(birthday) {
  var r = birthday.match(/^(\d{1,4})(-|\/)(\d{1,2})\2(\d{1,2})$/);
  if (r == null) {
    return false;
  }
  var birth = new Date(r[1], r[3] - 1, r[4]);
  if (
    birth.getFullYear() == r[1] &&
    birth.getMonth() + 1 == r[3] &&
    birth.getDate() == r[4]
  ) {
    var today = new Date();
    today.setDate(today.getDate() + 1);
    var age = today.getFullYear() - r[1];
    if (today.getMonth() > birth.getMonth()) {
      return age;
    }
    if (today.getMonth() == birth.getMonth()) {
      if (today.getDate() >= birth.getDate()) {
        return age;
      } else {
        return age - 1;
      }
    }
    if (today.getMonth() < birth.getMonth()) {
      return age - 1;
    }
  }
  return age;
}

通过身份证号获取年龄

/**
 * 通过身份证号获取年龄
 * @param {str} idcard:身份证号
 * @return {num} age 年龄
 */
export function getAgeByIdcard(idcard) {
  var age = "";
  var tmpStr = "";
  idcard = trimAll(idcard);
  if (idcard.length == 15) {
    tmpStr = idcard.substring(6, 12);
    var year = tmpStr.substring(0, 2);
    if (parseInt(year) < 20) {
      tmpStr = "20" + tmpStr;
    } else {
      tmpStr = "19" + tmpStr;
    }
    tmpStr =
      tmpStr.substring(0, 4) +
      "-" +
      tmpStr.substring(4, 6) +
      "-" +
      tmpStr.substring(6);
  } else {
    tmpStr = idcard.substring(6, 14);
    tmpStr =
      tmpStr.substring(0, 4) +
      "-" +
      tmpStr.substring(4, 6) +
      "-" +
      tmpStr.substring(6);
  }
  age = getAgeByBirth(tmpStr);
  return age;
}

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值