Regexp-Utils:身份证号校验
ylbtech-Regexp-Utils:身份证号校验 |
1.返回顶部 |
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)
province: idCardNoUtil.provinceAndCitys[parseInt(idCardNo.substring(0, 2))]
};
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;
}
}
}; utils.idCardNoUtil = window.idCardNoUtil = idCardNoUtil;
if (!utils.idCardNoUtil.checkIdCardNo($("#CardNO").val())) {
mui.toast("输入身份证格式不正确,请检查!");
return false;
}
2.返回顶部 |
3.返回顶部 |
4.返回顶部 |
5.返回顶部 |
6.返回顶部 |
![]() |
作者:ylbtech 出处:http://ylbtech.cnblogs.com/ 本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。 |
Regexp-Utils:身份证号校验的更多相关文章
- 使用 python 进行身份证号校验
使用 python 代码进行身份证号校验 先说,还有很多可以优化的地方. 1.比如加入15位身份证号的校验,嗯哼,15位的好像没有校验,那就只能提取个出生年月日啥的了. 2.比如判断加入地址数据库,增 ...
- 身份证号校验原理及JavaScript实现
在网站中,总有各种各样的表单,用户使用表单来向服务器发送数据,进行交互. 然而,代代相传的经验是,永远不要信任用户的输入,一定要对数据进行验证.如果使用不经验证的表单,轻则会有大量无效提交 ...
- Javascript 香港身份证号校验
<!DOCTYPE html> <html> <head> <title>香港身份证校验码计算</title> </head> ...
- java身份证号校验
package com.pt.modules.contract.utils; import java.text.ParseException; import java.text.SimpleDateF ...
- 锋利的js之验证身份证号
我们在做互联网网站时,注册个人资料时,经常要用到身份证号,我们需要对身份证进验证,不然别人随便输个号码就通过,让你感觉这个网站做得很shit. 身份证号是有规则的. 结构和形式 1.号码的结构 公民 ...
- Java实现身份证号码校验
二话不说,直接上代码. package hope.identitycodecheck.demo; import java.text.DateFormat; import java.text.Simpl ...
- JS校验身份证号的合法性
前端表单中有身份证号的校验,下边是用JS来校验身份证号的合法性. 中国居民身份证号码编码规则 第一.二位表示省(自治区.直辖市.特别行政区). 第三.四位表示市(地级市.自治州.盟及国家直辖市所属市辖 ...
- java中身份证号和的银行卡的深度校验
一: 身份证号: package com.mobile.utils; import java.text.SimpleDateFormat; import java.util.Calendar; imp ...
- 身份证号正则校验(js校验+JAVA校验)
js校验身份证号[15位和18位] 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 3 ...
随机推荐
- week2 notebook2
Beginning day2: 1.基础数据类型宏观: 1.1.整型:int:1,2,3 1.2.字符串:str:‘anthony’ 1.2.1: 索引:索引即下标,就是字符串组成的元素从第一个开始, ...
- 文件操作:Directory,File,FielStream、StreamRead和StreamWriter的使用
Directory文件类,File,FielStream.StreamRead和StreamWriter的使用 (转载) 创建一个新文件 Directory.CreateDirectory(@&quo ...
- JavaScript数组的操作
<html> <head> <meta charset="utf-8"> <title>无标题文档</title> &l ...
- 微信小程序开发之animation动画实现
1. 创建动画实例 wx.createAnimation(OBJECT) 创建一个动画实例animation.调用实例的方法来描述动画.最后通过动画实例的export方法导出动画数据传递给组件的ani ...
- WCF - NetCtP 双工错误列表
1. 在服务 Transfer 实现的协定列表中找不到协定名称 "IMetadataExchange" 将 ServiceMetadataBehavior 添加到配置文件或直接添加 ...
- Caffe: Caffe的Python接口
官方参考:http://caffe.berkeleyvision.org/installation.html 官方介绍是这样的: Python The main requirements are nu ...
- 杭电 2088 Box of Bricks
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2088 解题思路:一堆高度不同的砖块,需要把它们砌成一堵墙,即每一堆砖的高度相同(即砖的总数除以砖的堆数 ...
- oc的属性
Declared property A declared property provides a syntactical shorthand for declaring a class’s acces ...
- Alios-Things的学习与使用(1)
目录 Alios-Things的学习与使用 1.简介 1.1 为什么要学alios-Things 2. 环境搭建 2.1 使用docker toolbox安装docker 2.2 测试使用dockde ...
- C++基础 (10) 第十天 C++中类型转换 异常 栈解旋 io操作
1之前内容的回顾 C语言中的类型转换(int)a 强转可读性太差了 C++把()拆分成了四种转换方式 static_cast static_cast在编译器编译阶段就进行转换了 2.dynamic_ ...