//时间变成两位数
function toTwo(n) {return +n < 10 ? '0' + n : n + '';
};
function Type(obj) {var arr = ['null', 'nan', 'function', 'number', 'string', 'array', 'object'];if (obj === null) {return 'null';}if (obj !== obj) {return 'nan';}if (typeof Array.isArray === 'function') {if (Array.isArray(obj)) { //浏览器支持则使用isArray()方法return 'array';}} else { //否则使用toString方法if (Object.prototype.toString.call(obj) === '[object Array]') {return 'array';}}return (typeof obj).toLowerCase();
};
//正常化日期
function normalDate(oDate) {var oDate = oDate;var reg = /\-+/g;if (Type(oDate) == 'string') {oDate = oDate.split('.')[0]; //解决ie浏览器对yyyy-MM-dd HH:mm:ss.S格式的不兼容oDate = oDate.replace(reg, '/'); //解决苹果浏览器对yyyy-MM-dd格式的不兼容性}oDate = new Date(oDate);return oDate;
};
function dateFormat0(oDate, fmt) {var fmt = fmt || 'yyyy/MM/dd hh:mm:ss';var oDate = normalDate(oDate || new Date());var date = {'y+': oDate.getFullYear(), //年'M+': oDate.getMonth() + 1, //月'd+': oDate.getDate(), //日'h+': oDate.getHours(), //时'm+': oDate.getMinutes(), //分's+': oDate.getSeconds(), //秒'S': oDate.getMilliseconds(), //毫秒'q+': Math.ceil((oDate.getMonth() + 1) / 3), //季度,+3为了好取整};var result = '';var value = '';for (var attr in date) {if (new RegExp('(' + attr + ')').test(fmt)) {result = RegExp.$1;value = date[attr] + '';fmt = fmt.replace(result, result.length == 1 ? value : (attr == 'y+' ? value.substring(4 - result.length) : toTwo(value)));}}return fmt;
};
//根据出生日期获取年龄
function getAge(date, real) {var bDate = normalDate(date);var bYear = bDate.getFullYear();var bMonth = bDate.getMonth();var bDay = bDate.getDate();var nDate = new Date();var nYear = nDate.getFullYear();var nMonth = nDate.getMonth();var nDay = nDate.getDate();var dYear = nYear - bYear;var dMonth = (nMonth - bMonth) / 12;var dDay = (nDay - bDay) / 365;var diff = dYear + dMonth + dDay;var age = diff > 0 ? (real ? diff : Math.floor(diff)) : 0;return age;
};
var idCardNo = {citys: { 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'], //每位加权因子lastCodes: ['1', '0', 'X', '9', '8', '7', '6', '5', '4', '3', '2'], //第18位校检码normalIdCardNo: function (idCardNo) { //格式化15身份证号码为18位var id17 = idCardNo.substring(0, 6) + '19' + idCardNo.substring(6);return idCardNo.length == 15 ? id17 + this.getLastCode(id17) : idCardNo;},getLastCode: function (idCardNo) { //根据身份证前17位计算出最后一位校检码var idCardNo = this.normalIdCardNo(idCardNo);var id17 = idCardNo.substring(0, 17);var sum = 0;var codeIndex = 0;for (var i = 0; i < 17; i++) {sum += id17.charAt(i) * this.powers[i];}codeIndex = sum % 11;return this.lastCodes[codeIndex];},getIdCardNoInfo: function (idCardNo) { //获取身份证信息var idCardNo = this.normalIdCardNo(idCardNo);var cityCode = idCardNo.substring(0, 2);var dobCode = idCardNo.substring(6, 14);var sexCode = idCardNo.substring(idCardNo.length - 2, idCardNo.length - 1);var bYear = dobCode.substring(0, 4);var bMonth = dobCode.substring(4, 6);var bDay = dobCode.substring(6);var bDate = new Date(bYear, bMonth - 1, bDay);var dob = dateFormat0(bDate, 'yyyy-MM-dd');var ageCode = getAge(dob) + '';var idCardNoInfo = {city: this.citys[cityCode],dob: dob,sex: sexCode & 1 == 1 ? '男' : '女',age: getAge(dob) + '岁',cityCode: cityCode,dobCode: dobCode,sexCode: sexCode,ageCode: ageCode,};return this.checkIdCardNo(idCardNo) ? idCardNoInfo : this.getIdCardNoCheckInfo(idCardNo);},checkAddressCode: function (idCardNo) { //检查地址码var idCardNo = this.normalIdCardNo(idCardNo);var addressCode = idCardNo.substring(0, 6);var reg = /[1-8]\d{5}/;return reg.test(addressCode) && this.citys[addressCode.substring(0, 2)] ? true : false;},checkDobCode: function (idCardNo) { //检查日期码var idCardNo = this.normalIdCardNo(idCardNo);var dobCode = idCardNo.substring(6, 14);var reg = /[1-9]\d{3}(0[1-9]|1[0-2])(0[1-9]|[1-2]\d|3[0-1])/;var oDate = new Date();var bYear = dobCode.substring(0, 4);var bMonth = dobCode.substring(4, 6);var bDay = dobCode.substring(6);var bDate = new Date(bYear, bMonth - 1, bDay);var cYear = bDate.getFullYear();var cMonth = bDate.getMonth() + 1;var cDay = bDate.getDate();return reg.test(dobCode) && bDate <= oDate && cYear == bYear && cMonth == bMonth && cDay == bDay ? true : false;},checkLastCode: function (idCardNo) { //检查身份证最后一位校验码var idCardNo = this.normalIdCardNo(idCardNo);var lastCode = idCardNo.charAt(idCardNo.length - 1);return lastCode == this.getLastCode(idCardNo) ? true : false;},getIdCardNoCheckInfo: function (idCardNo) { //获取身份证号码校验信息var regTestResult = /^[1-8]\d{5}[1-9]\d{3}(0[1-9]|1[0-2])(0[1-9]|[1-2]\d|3[0-1])\d{3}[\dxX]$/.test(idCardNo);var idCardNo = this.normalIdCardNo(idCardNo);var checkResult = [regTestResult,this.checkAddressCode(idCardNo),this.checkDobCode(idCardNo),this.checkLastCode(idCardNo),];var posIndex = checkResult.indexOf(false);var result = ~posIndex ? posIndex : true;var msgJson = {'-1': '身份证号码校验通过','0': '身份证号码格式校验不通过','1': '地址码校验不通过','2': '日期码校验不通过','3': '最后一位校验码校验不通过',};return {pass: result === true,code: posIndex,msg: msgJson[posIndex],};},checkIdCardNo: function (idCardNo) { //检查身份证号码var result = this.getIdCardNoCheckInfo(idCardNo);return result.pass;},
};

最牛最全js身份证号校验方法相关推荐

  1. 最牛js身份证号校验方法

    最牛js身份证号校验方法: function IdCodeValid(code){ //身份证号合法性验证 //支持15位和18位身份证号 //支持地址编码.出生日期.校验位验证 var city={ ...

  2. js身份证号校验方法(转载我的请注明哈哈)

    //时间变成两位数 function toTwo(n) {return +n < 10 ? '0' + n : n + ''; }; function Type(obj) {var arr = ...

  3. 严格身份证格式校验,真实身份证号校验方法文件CheckIdCardUtil.js

    业务需求,需要用到非常严格的身份证号格式校验 这里校验方法经过测试真实身份证号码日期改一位都不行,必须完全真实号码 以下内容是项目中用到的校验方法,记录下来防止以后再用到 import check f ...

  4. JS身份证号码校验,JS根据身份证号码获取出生年月日,JS根据出生年月日获取年龄,JS根据身份证号码获取性别

    目录 1.JS身份证号码校验 2.JS根据身份证号码获取出生年月日 3.JS根据出生年月日获取年龄 4.JS根据身份证号码获取性别 1.JS身份证号码校验 /*** 身份证校验** @export* ...

  5. uniapp vue 身份证号校验

    在utils文件夹中创建一个文件   passid.js //身份证号严格校验 function identityIDCard(code) {//身份证号前两位代表区域var city = {11: ...

  6. C语言基础入门48篇_26_身份证号校验程序(以身份证的校验方式是实例加深对数组及函数封装的理解、字符-‘0‘得到字符对应的int类型数字)

    本篇根据以二代身份证的校验方式是实例加深对数组及函数封装的理解 1. 第二代身份证号的组成 第二代身份证号为18位,各位数字对应了不同的信息(以下顺序从左往右): AABBCCYYYYMMDDXXXV ...

  7. 用Python进行身份证号校验

    在日常应用中,经常需要输入身份证号,因为号码较长容易录错,因此需要进行实时校验,以尽可能保证输入正确.以下以Python为例,浅聊身份证号码校验的方法. 首先我们需要了解身份证号各个号段的意义.身份证 ...

  8. Java身份证号校验

    面向百度编程 package com.sinosoft.lf.util.common;import java.text.SimpleDateFormat; import java.util.Date; ...

  9. js身份证号有效性验证

    js身份证号有效性验证 1.简述 最近做的系统有用到实名验证的,起初对于用户身份证号只是简单地使用正则表达式进行验证, 很多无效的身份证号就成了漏网之鱼. 导致后台存表里很多无效的身份证号,随便输入用 ...

最新文章

  1. Java_压缩与解压工具类
  2. centos6.5安装hadoop2.6.4
  3. 算法与数据结构(一)
  4. java直接对list使用sql语句_Java和SQL语句阶段考试错题集
  5. 【Python】Magician“专属”神秘的“读心术”
  6. java etcd api_在java中如何使用etcd的v2 和v3 api获取配置,并且对配置的变化进行监控和监听...
  7. 守住你自己的“沉香”
  8. java中选择结构有哪些_Java中的选择结构
  9. hdu 4302 Holedox Eating
  10. 1.2 不停机升级困难
  11. 我的凸优化学习之路(转)
  12. 运维自动化之5 - 基于LVS实现4层负载均衡应用
  13. android file hascode,AndroidStudio集成Lombok
  14. “盈利为王”运营商财务管理沙盘--徐凌云老师
  15. 判定系数推导 — Coefficient of Determination Derivation
  16. 兮°Android下的屏幕适配问题的一点心得
  17. 我的世界(10)-快速建筑(创世神WorldEdit)
  18. Android之讯飞语音-文字转语音(不用另外安装语音合成包apk)遇到的问题
  19. Shopee首届跨境品牌峰会落幕,升级全链路赋能品牌出海劲增!
  20. 使用git在项目中的一些经验

热门文章

  1. OpenHarmony设备的开发环境搭建与工程管理(Ubuntu系统环境)
  2. 【C语言】利用循环输出菱形
  3. 2019年国际网络安全趋势
  4. 互相关函数的实际应用
  5. VR+全景播放器+头控讲解-06
  6. 计算机内存条是固定资产吗,服务器内存属于固定资产吗
  7. html5水调歌头代码,词牌名《水调歌头》5首
  8. Dubbo——协议详解
  9. 《数论概论(原书第4版)》一第2章 勾 股 数 组
  10. 使用神经网络训练iris数据集 —— Python数据工程No.7