js身份证校验
通过js实现对15位或者18位身份证格式校验:
通过调用idCardNoUtil.checkeIdCardNo(idCardNo)传入身份证号码,实现校验。
var idCardNoUtil = {
/*省,直辖市代码表*/
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: "国外"
},
/*每位加权因子*/
powers: ["7", "9", "10", "5", "8", "4", "2", "1", "6", "3", "7", "9", "10", "5", "8", "4", "2"],
/*第18位校检码*/
parityBit: ["1", "0", "X", "9", "8", "7", "6", "5", "4", "3", "2"],
/*性别*/
genders: { male: "男", female: "女" },
/*校验地址码*/
checkAddressCode: function(addressCode) {
var check = /^[1-9]\d{5}$/.test(addressCode);
if (!check) return false;
if (idCardNoUtil.provinceAndCitys[parseInt(addressCode.substring(0, 2))]) {
return true;
} else {
return false;
}
},
/*校验日期码*/
checkBirthDayCode: function(birDayCode) {
var check = /^[1-9]\d{3}((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;
}
},
/*计算校检码*/
getParityBit: function(idCardNo) {
var id17 = idCardNo.substring(0, 17);
/*加权 */
var power = 0;
for (var i = 0; i < 17; i++) {
power += parseInt(id17.charAt(i), 10) * parseInt(idCardNoUtil.powers[i]);
}
/*取模*/
var mod = power % 11;
return idCardNoUtil.parityBit[mod];
},
/*验证校检码*/
checkParityBit: function(idCardNo) {
var parityBit = idCardNo.charAt(17).toUpperCase();
if (idCardNoUtil.getParityBit(idCardNo) == parityBit) {
return true;
} else {
return false;
}
},
/*校验15位或18位的身份证号码*/
checkIdCardNo: function(idCardNo) {
//15位和18位身份证号码的基本校验
var check = /^\d{15}|(\d{17}(\d|x|X))$/.test(idCardNo);
if (!check) return false;
//判断长度为15位或18位
if (idCardNo.length == 15) {
return idCardNoUtil.check15IdCardNo(idCardNo);
} else if (idCardNo.length == 18) {
return idCardNoUtil.check18IdCardNo(idCardNo);
} else {
return false;
}
},
//校验15位的身份证号码
check15IdCardNo: function(idCardNo) {
//15位身份证号码的基本校验
var check = /^[1-9]\d{7}((0[1-9])|(1[0-2]))((0[1-9])|([1-2][0-9])|(3[0-1]))\d{3}$/.test(idCardNo);
if (!check) return false;
//校验地址码
var addressCode = idCardNo.substring(0, 6);
check = idCardNoUtil.checkAddressCode(addressCode);
if (!check) return false;
var birDayCode = '19' + idCardNo.substring(6, 12);
//校验日期码
return idCardNoUtil.checkBirthDayCode(birDayCode);
},
//校验18位的身份证号码
check18IdCardNo: function(idCardNo) {
//18位身份证号码的基本格式校验
var check = /^[1-9]\d{5}[1-9]\d{3}((0[1-9])|(1[0-2]))((0[1-9])|([1-2][0-9])|(3[0-1]))\d{3}(\d|x|X)$/.test(idCardNo);
if (!check) return false;
//校验地址码
var addressCode = idCardNo.substring(0, 6);
check = idCardNoUtil.checkAddressCode(addressCode);
if (!check) return false;
//校验日期码
var birDayCode = idCardNo.substring(6, 14);
check = idCardNoUtil.checkBirthDayCode(birDayCode);
if (!check) return false;
//验证校检码
return idCardNoUtil.checkParityBit(idCardNo);
},
formateDateCN: function(day) {
var yyyy = day.substring(0, 4);
var mm = day.substring(4, 6);
var dd = day.substring(6);
return yyyy + '-' + mm + '-' + dd;
},
//获取信息
getIdCardInfo: function(idCardNo) {
var idCardInfo = {
gender: "", //性别
birthday: "" // 出生日期(yyyy-mm-dd)
};
if (idCardNo.length == 15) {
var aday = '19' + idCardNo.substring(6, 12);
idCardInfo.birthday = idCardNoUtil.formateDateCN(aday);
if (parseInt(idCardNo.charAt(14)) % 2 == 0) {
idCardInfo.gender = idCardNoUtil.genders.female;
} else {
idCardInfo.gender = idCardNoUtil.genders.male;
}
} else if (idCardNo.length == 18) {
var aday = idCardNo.substring(6, 14);
idCardInfo.birthday = idCardNoUtil.formateDateCN(aday);
if (parseInt(idCardNo.charAt(16)) % 2 == 0) {
idCardInfo.gender = idCardNoUtil.genders.female;
} else {
idCardInfo.gender = idCardNoUtil.genders.male;
}
}
return idCardInfo;
},
/*18位转15位*/
getId15: function(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位*/
getId18: function(idCardNo) {
if (idCardNo.length == 15) {
var id17 = idCardNo.substring(0, 6) + '19' + idCardNo.substring(6);
var parityBit = idCardNoUtil.getParityBit(id17);
return id17 + parityBit;
} else if (idCardNo.length == 18) {
return idCardNo;
} else {
return null;
}
}
};
js身份证校验的更多相关文章
- 一个完整的 JS 身份证校验代码
一个完整的 JS 身份证校验代码 身份证号码是由 18 位数字组成的,它们分别表示: (1) 前 1.2 位数字表示: 所在省份的代码; (2) 第 3.4 位数字表示: 所在城市的代码; (3) 第 ...
- 篇二:JS身份证校验
身份证校验 function identityCodeValid(code) { var city={11:"北京",12:"天津",13:"河北&q ...
- 完美实现身份证校验 js正则
注意: 1.只针对18为身份证号码进行校验,现在15位的应该很少了, 2.不区分xX大小写, 3.出生年份1900-2099,每月的天数也进行相关验证(考虑的闰月的情况), 4.校验规则详见,这个写的 ...
- 最严格的身份证校验(JavaScript版)
在JavaWeb研发过程中为了获取有效的用户信息,校验其数据的有效性非常是必要,以下贴出在项目中用到的关于身份证的校验: <!DOCTYPE HTML PUBLIC "-//W3C// ...
- JS常用校验方法(判断输入框是否为空,数字,电话,邮件,四舍五入等)
JS常用校验方法: 1.判断输入框是否为空,为空时弹出提示框 2.关闭窗口 3.检查输入字符串是否为数字 4.强制把大写转换成小写 5.手机号码校验,长度为11位数字. 6.电子邮件校验 7.电话号码 ...
- Powerbuilder编写身份证校验码
public function boolean of_calc_cardid_verifycode (string as_cardid, ref string as_verifycode); /* 计 ...
- jQuery Validate 表单验证插件----利用jquery.metadata.js将校验规则直接写在class属性里面并定义错误信息的提示
一.下载依赖包 网盘下载:https://yunpan.cn/cryvgGGAQ3DSW 访问密码 f224 二. 添加一个另外一个插件jquery.metadata.js 并把校验规则写在控件里面 ...
- java实现身份证校验
原文来自:java教程网 题目:身份证校验 身份证校验 如果让你设计个程序,用什么变量保存身份证号码呢?长整数可以吗?不可以! 因为有人的身份证最后一位是"X" 实 ...
- 身份证校验程序(下)- 零基础入门学习Delphi49
身份证校验程序 让编程改变世界 Change the world by program [caption id="attachment_2699" align="alig ...
随机推荐
- [算法练习]String to Integer (atoi)
题目说明: Implement atoi to convert a string to an integer. Hint: Carefully consider all possible input ...
- javascript之 原生document.querySelector和querySelectorAll方法
querySelector和querySelectorAll是W3C提供的新的查询接口,其主要特点如下: 1.querySelector只返回匹配的第一个元素,如果没有匹配项,返回null. 2.q ...
- 软工读书笔记 week 5 ——《构建之法》
本周主要对<构建之法>中的一部分进行阅读. 一.软件与软件工程究竟是什么? 本书的概论部分就指出“软件 = 程序 + 软件工程”.而我们这门课的名字就叫“现代软件工程”.其实在上课之前,我 ...
- Windows下部署ElasticSearch5.0以下版本
Windows下部署ElasticSearch分ElasticSearch5.0以上版本(包括5.0)和ElasticSearch5.0以下版本两种情况,这两种安装方式有很大不同.今天首先说Elast ...
- ActiveMQ5.8.0安装及启动
一.下载 官网地址:http://activemq.apache.org/download.html Windows版本:apache-activemq-5.8.0-bin.zip Linux版本:a ...
- 远程桌面到 Ubuntu 虚拟机
安装 Ubuntu 虚拟机,创建端口号为 3389 的 Endpoint. 安装 Gnome 桌面 复制 sudo apt-get update sudo apt-get install ubuntu ...
- Java笔记-添加自定义公共类库
大型项目,为了方便团队开发,需要建立公共类库,提高类库的重用性和维护性步骤如下: --如果朋友您想转载本文章请注明转载地址"http://www.cnblogs.com/XHJT/p/387 ...
- LeetCode33 搜索旋转排序数组
搜索旋转排序数组 题目描述: 假设按照升序排序的数组在预先未知的某个点上进行了旋转. ( 例如,数组 [0,1,2,4,5,6,7] 可能变为 [4,5,6,7,0,1,2] ). 搜索一个给定的目标 ...
- CAMediaTimingFunction的使用
CAMediaTimingFunction的使用 CAMediaTimingFunction可以用在POP动画的自定义动画当中,算是非常实用的工具,当然,系统的动画也是可以使用的. 效果: 需要用到的 ...
- css实现文字裁切效果
<!DOCTYPE html> <html> <head lang="en"> <meta charset="UTF-8&quo ...