js身份证号有效性验证

1.简述

最近做的系统有用到实名验证的,起初对于用户身份证号只是简单地使用正则表达式进行验证,

很多无效的身份证号就成了漏网之鱼。

导致后台存表里很多无效的身份证号,随便输入用户名和身份证号就可以实名成功,这样就存在很多的弊端。

最终我们决定对身份证号进行有效性验证,严谨的剖析身份证号的组成,研究它的生成算法。

当然网上也有很多资源供做参考。https://www.jianshu.com/p/07c7ee44579c(组成规则)

我们就不详细介绍组成规则了,直接用js代码来进行有效性验证。

首先我们要明白现在我们的身份证号有两种:15位和18位,最常见的也就是18位的。但是15位的有效性验证也要兼顾。

2.面向对象的验证方法

//==面向对象方法===验证身份证号是否真实有效function IdentityCodeValid(id){this.aCity = { 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: "国外" };this.iSum     = 0;//计算校验位this.pass     = true;//身份证号是否有效标识this.tip      = '';//身份证号无效提示//console.log(this.sSex) ;//地址,出生年月,性别this.judgmentIdLength(id);//开始验证
        }//检验18位身份证号是否真实有效==面向对象方法IdentityCodeValid.prototype={judgmentIdLength:function(code){/**===如果是15位则将其转换为18位再进行验证===15位身份证号码各位的含义: 1-2位省、自治区、直辖市代码; 3-4位地级市、盟、自治州代码; 5-6位县、县级市、区代码; 7-12位出生年月日,比如670401代表1967年4月1日,与18位的第一个区别; 13-15位为顺序号,其中15位男为单数,女为双数; 与18位身份证号的第二个区别:没有最后一位的验证码。**/if(code.length==15){codeArr = code.split('');code = code.toString().substr(0,6)+"19"+code.toString().substr(6);var last = this.computeCheckBit(code);code = code + last;//console.log('code=='+code);//return this.id;this.codeValid(code);}else{this.codeValid(code);}},computeCheckBit:function(sId){//∑(ai×Wi)(mod 11)//加权因子var factor = [7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2];//校验位var parity = [1, 0, 'X', 9, 8, 7, 6, 5, 4, 3, 2];var sum = 0;var ai = 0;var wi = 0;for (var i = 0; i < 17; i++) {ai = sId[i];wi = factor[i];sum += ai * wi;}var last = parity[sum % 11];console.log(last);return last;},codeValid:function(sId){this.id       = $.trim(sId);//id去空格this.sBirthday= this.id.substr(6, 4) + "-" + Number(this.id.substr(10, 2)) + "-" + Number(this.id.substr(12, 2));//出生年月this.sSex     = this.aCity[parseInt(this.id.substr(0, 2))] + "," + this.sBirthday + "," + (this.id.substr(16, 1) % 2 ? "男" : "女");this.sDate    = new Date(this.sBirthday.replace(/-/g, "/"));this.sAddress = this.id.replace(/x$/i, "a");//地址var iSum;if(!sId || !/^\d{6}(18|19|20)?\d{2}(0[1-9]|1[012])(0[1-9]|[12]\d|3[01])\d{3}(\d|[xX])$/i.test(sId)){this.tip = "你输入的身份证长度或格式错误!";this.pass = false;}else if(this.aCity[parseInt(this.sAddress.substr(0, 2))] == null) {this.tip = "你的身份证地区非法!";this.pass = false;}else if(this.sBirthday != (this.sDate.getFullYear() + "-" + (this.sDate.getMonth() + 1) + "-" + this.sDate.getDate())) {this.tip = "身份证上的出生日期非法!";this.pass = false;}else{var factor = [7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2];//校验位var last = this.computeCheckBit(sId);console.log('==='+last);if(sId.substr(-1,1)!=last){console.log(1);this.tip = "你输入的身份证号校验位错误!";this.pass = false;}}if (!this.pass){//alert(this.tip);
                }return this.pass;}}

3.new对象进行验证

var idObj = new IdentityCodeValid(id);
console.log(idObj);//打印返回的信息即知是否通过验证

posted @ 2018-02-26 14:25 _只鱼 阅读(...) 评论(...) 编辑 收藏

js身份证号有效性验证相关推荐

  1. js实现完美身份证号有效性验证+身份证与姓名匹配

    /* 根据[中华人民共和国国家标准 GB 11643-1999]中有关公民身份号码的规定,公民身份号码是特征组合码,由十七位数字本体码和一位数字校验码组成.排列顺序从左至右依次为:六位数字地址码,八位 ...

  2. javascript实现完美身份证号有效性验证15位18位

    欢迎各位朋友!   前几天在开发中要求对用户的身份证号进行比较严格的校验,所以才有了这些代码, 下面的这些代码主要包括对身份证长度,地区,出生日期的校验. 方法在return时返回了一个是否通过以及提 ...

  3. JS 身份证号格式验证

    var idcard = data.field.idcard; if(!/(^\d{15}$)|(^\d{17}(x|X|\d)$)/.test(idcard)){ //验证身份证号15位或18位la ...

  4. 通过接口实现完美身份证号有效性验证+身份证与姓名匹配查询身份实名认证接口(实时)

    接口URL:请求类型:GET/POST开放时间:参数:key->密钥令牌 | lastname->真实姓 | firstname->真实名 | idcard->证件号码测试令牌 ...

  5. Js实现中国公民身份证号码有效性验证

    2019独角兽企业重金招聘Python工程师标准>>> 参考: Java实现中国公民身份证号码有效性验证 Php实现中国公民身份证号码有效性验证 本文将使用JavaScript实现中 ...

  6. 身份证号有效性检验代码 (python)

    身份证号码有效性检验: 输入:str类型的身份证号码 返回值: bool # 身份证号有效性验证 def id_number_valid(id_number):"""# ...

  7. JavaScript 身份证号有效验证详解及实例代码

    这篇文章主要介绍了JavaScript 身份证号有效验证详解及实例代码的相关资料,需要的朋友可以参考下 JavaScript验证身份证号 1 2 3 4 5 6 7 8 9 10 11 12 13 1 ...

  8. 身份证号的验证与解析

    最近参加一些招聘,很多时候时候身份证号都会作为表单的一部分,需要用户进行填写.有些表单在填写了身份证号之后,还需要用户手动填写籍贯.性别.出生年月.以及年龄等信息,其实这些信息都在身份证号里面包含了. ...

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

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

最新文章

  1. Winio驱动在64位windows下无法使用的解决方法
  2. MyEclipse搭建java Web项目开发环境
  3. 面试了57位数据分析师,我发现牛逼的人都有这4个特质
  4. 组态王c语言编程实例,组态王命令语言程序.doc
  5. python xlrd读取excel-使用Python xlrd模块读取Excel格式文件的方法
  6. js判断对象数组中是否存在某个对象
  7. 【Javascript 拾遗之三】Closure 闭包
  8. Mybatis 框架源码解读(详细流程图+时序图)
  9. matlab天线阵列分析,基于Matlab的阵列天线数值分析
  10. SD卡--摄像头中扩容卡原理及检测机制
  11. 前端开发思路-1.1
  12. 做一个小程序需要多少钱?
  13. 获取当前的格林尼治时间
  14. iOS自动自动隐藏软键盘
  15. eSIM终于来临,它将如何助力IoT的发展?
  16. 批量重命名 将中文名称翻译成英文名称的操作方法
  17. 2021国赛A题第三问 - 点关于三维直线的对称点 - 入射光的反射向量
  18. Spine新手基础教程
  19. 8位寄存器置位与清零操作
  20. discuz登陆首页后提示style_1_commen.css,Discuz!登录模板修改到顶部方法

热门文章

  1. 我收藏的一些下载资源的链接
  2. 数据库系统概念(机械工业出版社,第六版)复习——第三章:SQL
  3. 关于C语言课设学生管理系统的编写(简单版)
  4. C#自定义软键盘控件及应用
  5. DC算法竞赛——北京PM2.5浓度回归分析
  6. 如何给一个文字文本加圆或是加矩形呢?
  7. Linux(文件文档操作)
  8. C#代码:将MP4后缀名批量改为MP3
  9. 第六周ACM博客总结
  10. 币王Biking10月7日资讯