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. 完整代码测试
- 新建文件 isCard.js
- 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 校验身份证 是否规则的主要内容,如果未能解决你的问题,请参考以下文章
18位身份证的编码规则是: 前12位数字表示:所在省(直辖市自治区)的代码 第34位数字表示:所在地级市(自治州)的代码 第56位数字表示:所在区(县自治县县级市)的代码; 第7—14位数