vue js 校验身份证 是否规则

Posted 流星蝴蝶没有剑

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了vue js 校验身份证 是否规则相关的知识,希望对你有一定的参考价值。

1. 校验15位或18位的身份证号码

/*校验15位或18位的身份证号码*/
function checkIdCardNo(idCardNo) 
  //15位和18位身份证号码的基本校验
  var check = /^\\d15|(\\d17(\\d|x|X))$/.test(idCardNo);
  if (!check) return false;
  //判断长度为15位或18位
  if (idCardNo.length == 15) 
    return check15IdCardNo(idCardNo);
   else if (idCardNo.length == 18) 
    return check18IdCardNo(idCardNo);
   else 
    return false;
  

2. 校验15位的身份证号码

function check15IdCardNo(idCardNo) 
  //15位身份证号码的基本校验
  var check = /^[1-9]\\d7((0[1-9])|(1[0-2]))((0[1-9])|([1-2][0-9])|(3[0-1]))\\d3$/.test(idCardNo);
  if (!check) return false;
  //校验地址码
  var addressCode = idCardNo.substring(0, 6);
  check = checkAddressCode(addressCode);
  if (!check) return false;
  var birDayCode = '19' + idCardNo.substring(6, 12);
  //校验日期码
  return checkBirthDayCode(birDayCode);

3. 校验18位的身份证号码

function check18IdCardNo(idCardNo) 
  //18位身份证号码的基本格式校验
  var check = /^[1-9]\\d5[1-9]\\d3((0[1-9])|(1[0-2]))((0[1-9])|([1-2][0-9])|(3[0-1]))\\d3(\\d|x|X)$/.test(idCardNo);
  if (!check) return false;
  //校验地址码
  var addressCode = idCardNo.substring(0, 6);
  check = checkAddressCode(addressCode);
  if (!check) return false;
  //校验日期码
  var birDayCode = idCardNo.substring(6, 14);
  check = checkBirthDayCode(birDayCode);
  if (!check) return false;
  //验证校检码
  return checkParityBit(idCardNo);

4. 15 位 18 位身份证 互转

/*18位转15位*/
function getId15(idCardNo) 
  if (idCardNo.length == 15) 
    return idCardNo;
   else if (idCardNo.length == 18) 
    return idCardNo.substring(0, 6) + idCardNo.substring(8, 17);
   else 
    return null;
  


/*15位转18位*/
function getId18(idCardNo) 
  if (idCardNo.length == 15) 
    var id17 = idCardNo.substring(0, 6) + '19' + idCardNo.substring(6);
    var parityBit = getParityBit(id17);
    return id17 + parityBit;
   else if (idCardNo.length == 18) 
    return idCardNo;
   else 
    return null;
  

5. 完整代码测试

  1. 新建文件 isCard.js
  2. vue 导入 isCard.js 调用

VUE 测试:http://wx0725.top/index.php/219.html

<template></template>
<script>
import isCardTools from "@/utils/isCard";
export default 
  mounted: function () 
    let s = "142301200002093119";
    console.log(isCardTools.checkIdCardNo(s)); // 是否合格
    console.log(isCardTools.getIdCardInfo(s)); // 获取身份证信息
    console.log(isCardTools.getId15(s)); // 18 转为 15
    console.log(isCardTools.getId18(s)); // 15 转为 18
  ,
;
</script>

isCard.js 源码:

//身份证号合法性校验
/*省,直辖市代码表*/
var provinceAndCitys = 
  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 xz_arr = [
  "name": "水瓶座",
  "l": "0120",
  "r": "0218"
,

  "name": "双鱼座",
  "l": "0219",
  "r": "0320"
,

  "name": "白羊座",
  "l": "0321",
  "r": "0419"
,

  "name": "金牛座",
  "l": "0420",
  "r": "0520"
,

  "name": "双子座",
  "l": "0521",
  "r": "0621"
,

  "name": "巨蟹座",
  "l": "0622",
  "r": "0722"
,

  "name": "狮子座",
  "l": "0723",
  "r": "0822"
,

  "name": "处女座",
  "l": "0823",
  "r": "0922"
,

  "name": "天秤座",
  "l": "0923",
  "r": "1023"
,

  "name": "天蝎座",
  "l": "1024",
  "r": "1122"
,

  "name": "射手座",
  "l": "1123",
  "r": "1221"
,

  "name": "摩羯座",
  "l": "1222",
  "r": "0119"
,
];


/*每位加权因子*/
var powers = ["7", "9", "10", "5", "8", "4", "2", "1", "6", "3", "7", "9", "10", "5", "8", "4", "2"]

/*第18位校检码*/
var parityBit = ["1", "0", "X", "9", "8", "7", "6", "5", "4", "3", "2"]

/*性别*/
var genders =  male: "男", female: "女" 

/*校验地址码*/
function checkAddressCode(addressCode) 
  var check = /^[1-9]\\d5$/.test(addressCode);
  if (!check) return false;
  if (provinceAndCitys[parseInt(addressCode.substring(0, 2))]) 
    return true;
   else 
    return false;
  


/*校验日期码*/
function checkBirthDayCode(birDayCode) 
  var check = /^[1-9]\\d3((0[1-9])|(1[0-2]))((0[1-9])|([1-2][0-9])|(3[0-1]))$/.test(birDayCode);
  if (!check) return false;
  var yyyy = parseInt(birDayCode.substring(0, 4), 10);
  var mm = parseInt(birDayCode.substring(4, 6), 10);
  var dd = parseInt(birDayCode.substring(6), 10);
  var xdata = new Date(yyyy, mm - 1, dd);
  if (xdata > new Date()) 
    return false; //生日不能大于当前日期
   else if ((xdata.getFullYear() == yyyy) && (xdata.getMonth() == mm - 1) && (xdata.getDate() == dd)) 
    return true;
   else 
    return false;
  


/*计算校检码*/
function getParityBit(idCardNo) 
  var id17 = idCardNo.substring(0, 17);
  /*加权 */
  var power = 0;
  for (var i = 0; i < 17; i++) 
    power += parseInt(id17.charAt(i), 10) * parseInt(powers[i]);
  
  /*取模*/
  var mod = power % 11;
  return parityBit[mod];


/*验证校检码*/
function checkParityBit(idCardNo) 
  var parityBit = idCardNo.charAt(17).toUpperCase();
  if (getParityBit(idCardNo) == parityBit) 
    return true;
   else 
    return false;
  


/*校验15位或18位的身份证号码*/
function checkIdCardNo(idCardNo) 
  //15位和18位身份证号码的基本校验
  var check = /^\\d15|(\\d17(\\d|x|X))$/.test(idCardNo);
  if (!check) return false;
  //判断长度为15位或18位
  if (idCardNo.length == 15) 
    return check15IdCardNo(idCardNo);
   else if (idCardNo.length == 18) 
    return check18IdCardNo(idCardNo);
   else 
    return false;
  


//校验15位的身份证号码
function check15IdCardNo(idCardNo) 
  //15位身份证号码的基本校验
  var check = /^[1-9]\\d7((0[1-9])|(1[0-2]))((0[1-9])|([1-2][0-9])|(3[0-1]))\\d3$/.test(idCardNo);
  if (!check) return false;
  //校验地址码
  var addressCode = idCardNo.substring(0, 6);
  check = checkAddressCode(addressCode);
  if (!check) return false;
  var birDayCode = '19' + idCardNo.substring(6, 12);
  //校验日期码
  return checkBirthDayCode(birDayCode);


//校验18位的身份证号码
function check18IdCardNo(idCardNo) 
  //18位身份证号码的基本格式校验
  var check = /^[1-9]\\d5[1-9]\\d3((0[1-9])|(1[0-2]))((0[1-9])|([1-2][0-9])|(3[0-1]))\\d3(\\d|x|X)$/.test(idCardNo);
  if (!check) return false;
  //校验地址码
  var addressCode = idCardNo.substring(0, 6);
  check = checkAddressCode(addressCode);
  if (!check) return false;
  //校验日期码
  var birDayCode = idCardNo.substring(6, 14);
  check = checkBirthDayCode(birDayCode);
  if (!check) return false;
  //验证校检码
  return checkParityBit(idCardNo);


function formateDateCN(day) 
  var yyyy = day.substring(0, 4);
  var mm = day.substring(4, 6);
  var dd = day.substring(6);
  return yyyy + '-' + mm + '-' + dd;


//获取信息
function getIdCardInfo(idCardNo) 
  var idCardInfo = 
    gender: "", //性别
    birthday: "", // 出生日期(yyyy-mm-dd)
    xz: "" // 星座
  ;
  if (idCardNo.length == 15) 
    var aday = '19' + idCardNo.substring(6, 12);
    idCardInfo.birthday = formateDateCN(aday);
    if (parseInt(idCardNo.charAt(14)) % 2 == 0) 
      idCardInfo.gender = genders.female;
     else 
      idCardInfo.gender = genders.male;
    
   else if (idCardNo.length == 18) 
    var aday = idCardNo.substring(6, 14);
    idCardInfo.birthday = formateDateCN(aday);
    if (parseInt(idCardNo.charAt(16)) % 2 == 0) 
      idCardInfo.gender = genders.female;
     else 
      idCardInfo.gender = genders.male

以上是关于vue js 校验身份证 是否规则的主要内容,如果未能解决你的问题,请参考以下文章

vue js 校验身份证 是否规则

vue js 校验身份证 是否规则

居民身份证号码组成规则

身份证 银行卡校验

C零基础视频-26-身份证号校验程序

18位身份证的编码规则是: 前12位数字表示:所在省(直辖市自治区)的代码 第34位数字表示:所在地级市(自治州)的代码 第56位数字表示:所在区(县自治县县级市)的代码; 第7—14位数