一. 需求

后台管理系统项目,展示用户传入身份证号码。现需要验证用户输入的身份证号码的真实性,以及对身份证号码进行模糊显示。

二. 代码验证

2.1 验证身份证号码的真实性

参考的这篇文章:https://www.cnblogs.com/zpblogs/p/11239597.html#/cnblog/works/article/11239597

//身份证真实性验证
function testIdCard(value) {var vcity = {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: "国外"};// 判断是否为空isEmpty = function (card) {if (/^\s*$/.test(card) === true) {return true;}}//检查号码是否符合规范,包括长度,类型  isCardNo = function (card) {if (isEmpty(card)) {return true;}//这个代码表示身份证可以为空//身份证号码为15位或者18位,15位时全为数字,18位前17位为数字,最后一位是校验位,可能为数字或字符X  var reg = /(^\d{15}$)|(^\d{17}(\d|X)$)/;if (reg.test(card) === false) {return false;}return true;};//取身份证前两位,校验省份  checkProvince = function (card) {if (isEmpty(card)) {return true;}var province = card.substr(0, 2);if (vcity[province] == undefined) {return false;}return true;};//检查生日是否正确  checkBirthday = function (card) {if (isEmpty(card)) {return true;}var len = card.length;//身份证15位时,次序为省(3位)市(3位)年(2位)月(2位)日(2位)校验位(3位),皆为数字  if (len == '15') {var re_fifteen = /^(\d{6})(\d{2})(\d{2})(\d{2})(\d{3})$/;var arr_data = card.match(re_fifteen);var year = arr_data[2];var month = arr_data[3];var day = arr_data[4];var birthday = new Date('19' + year + '/' + month + '/' + day);return verifyBirthday('19' + year, month, day, birthday);}//身份证18位时,次序为省(3位)市(3位)年(4位)月(2位)日(2位)校验位(4位),校验位末尾可能为X  if (len == '18') {var re_eighteen = /^(\d{6})(\d{4})(\d{2})(\d{2})(\d{3})([0-9]|X)$/;var arr_data = card.match(re_eighteen);var year = arr_data[2];var month = arr_data[3];var day = arr_data[4];var birthday = new Date(year + '/' + month + '/' + day);return verifyBirthday(year, month, day, birthday);}return false;};//校验日期  verifyBirthday = function (year, month, day, birthday) {var now = new Date();var now_year = now.getFullYear();//年月日是否合理  if (birthday.getFullYear() == year && (birthday.getMonth() + 1) == month && birthday.getDate() == day) {//判断年份的范围(3岁到100岁之间)  var time = now_year - year;if (time >= 3 && time <= 100) {return true;}return false;}return false;};//校验位的检测  checkParity = function (card) {if (isEmpty(card)) {return true;}//15位转18位  card = changeFivteenToEighteen(card);var len = card.length;if (len == '18') {var arrInt = new Array(7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2);var arrCh = new Array('1', '0', 'X', '9', '8', '7', '6', '5', '4', '3', '2');var cardTemp = 0, i, valnum;for (i = 0; i < 17; i++) {cardTemp += card.substr(i, 1) * arrInt[i];}valnum = arrCh[cardTemp % 11];if (valnum == card.substr(17, 1)) {return true;}return false;}return false;};//15位转18位身份证号  changeFivteenToEighteen = function (card) {if (isEmpty(card)) {return true;}if (card.length == '15') {var arrInt = new Array(7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2);var arrCh = new Array('1', '0', 'X', '9', '8', '7', '6', '5', '4', '3', '2');var cardTemp = 0, i;card = card.substr(0, 6) + '19' + card.substr(6, card.length - 6);for (i = 0; i < 17; i++) {cardTemp += card.substr(i, 1) * arrInt[i];}card += arrCh[cardTemp % 11];return card;}return card;};var card = value;//校验长度,类型  if (isCardNo(card) === false) {//alert('您输入的身份证号码不正确,请重新输入');//document.getElementById('card_no').focus;return false;}//检查省份  if (checkProvince(card) === false) {return false;}//校验生日  if (checkBirthday(card) === false) {return false;}//检验位的检测  if (checkParity(card) === false) {return false;}return true;
}

该方法可以通过传入的身份证号码,校验其长度、省份、出生日期以及最后一位校验码的真实性。

例:通过身份证号码的前17位,就可以算出最后一位校验码的值,来比对和传入的是否相等。

我输入的身份证号码为510125********253X(真实的),通过打断点,上面链接里面的方法计算出来的最后一位验证码就是X

✲ 该方法有个漏洞,当传入的值为空时,依然会被审核通过,所以需要在进入函数时加个限制条件,如下:

function testIdCard(value) {if (!value) return false.........
}

也建议在进入该函数前就进行判断,当身份证号的值为空时,弹框提醒填身份证。

2.2 对身份证号码进行模糊显示

1.刚开始,我拿到的身份证号码校验位不是X

userIdCard = '510129198507152316'

处理如下:

userIdCard.replace(/^(\d{6})\d+(\d{4})$/, "\$1********\$2")

效果如下:

2.后面一个新的测试数据,校验位是X,上面的正则就不行了,需要换个通用的

userIdCard = '51072119730605754X'

处理如下:

 userIdCard.replace(/^(.{6})\d+(.{4})$/, "\$1********\$2")userIdCard.replace(/^(.{6}).+(.{4})$/, "\$1********\$2")userIdCard.replace(/^(\d{6})\w+(.{4})$/, "\$1********\$2")userIdCard.replace(/^(.{6})(?:\w+)(.{4})$/, "\$1********\$2")userIdCard.replace(/^(.{6})(?:\d+)(.{4})$/, "\$1********\$2")userIdCard.replace(/^(.{6})(?:.+)(.{4})$/, "\$1********\$2")

效果如下:

3.由于知晓身份证前17位只能数字,最后一位校验码可能是数字或者X,所以最好的写法为:

userIdCard.replace(/^(\d{6})\d+(\w{4})$/, "\$1********\$2")^(\d{6})  表示从首位开始匹配,匹配6位数字\d+       表示从当前位置开始,至少匹配一个数字(\w{4})$  表示从末位开始匹配,匹配4位单字字符(字母、数字或者下划线)\$1       表示第一个小括号里面匹配的内容,指^(\d{6})这部分********  表示中间的内容部分,指\d+\$2       表示第二个小括号里面匹配的内容,指(\w{4})$这部分

4.对于电话号码的替换,改变匹配位数就行了

tel = '18145556555'tel.replace(/^(\d{3})\d+(\d{4})$/, '\$1****\$2')

效果如下:

三. 结尾

以上对身份证号码真实性的验证,也只是验证号码是否符合国家标准,无法确认是否为本人。对于用户传入的姓名,前端也可

以验证,不过也只是验证是否为2-4位的中文字符;无法确认姓名与身份证号码是否为同一个人,要确认是否为本人的话需要调国

家实名认证的接口,但这个也就不需要前端来做了。

前端对用户身份证号码进行验证以及模糊显示相关推荐

  1. 国内身份证号码的验证

    本方法主要用于国内身份证号码的验证,支持15位与最新的18位身份证号码. function is_idcard( $id ){$id = strtoupper($id);$regx = "/ ...

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

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

  3. 【JS】Js二代身份证号码正则验证

    Js二代身份证号码正则验证代码: export function checkIDCard(idcode) {// 加权因子var weight_factor = [7,9,10,5,8,4,2,1,6 ...

  4. VS2022身份证号码信息验证器

    (- -)功能说明: 要求:根据以下规则对身份证号码进行验证,运行效果如图3-7所示. (1)号码长度18 位. (2) 18位全是数字. (3)第7~ 10位是出生的年. (4)倒数第2位号码,奇数 ...

  5. 15位或18位长度身份证号码JS验证

    免责声明:身份证号为随机组合而成,不会涉及任何隐私泄密问题,也非现实生活中真实的身份证号码:身份证号码所属年龄均为18岁以上,均已通过校验. var IdNum1 = "3205831986 ...

  6. JAVA 输入身份证号码进行验证正误,15位转18位,并解析出生日、当前年龄、地区代码、性别

    我们的身份证号码包含很多的信息,下面的代码提供了身份证的解析功能,具体看注释吧,已经写全了 import java.text.SimpleDateFormat; import java.util.Da ...

  7. Jquery 对 身份证号码的验证 (15/18位)

    //欢迎验证.给予指正错误,从好多地方查来的资料修改的...已用本人身份证验证... 由于以前修改的问题无法验证带 X 的身份证号码,已修复!//为值添加0function Append_zore(t ...

  8. python 身份证号码有效性验证

    先声明以下代码不是全部原创,网上找了前辈的一些代码,经过自己的部分加工,有了如下的身份证有效性验证代码: #!/usr/bin/env python3 # -*- coding: utf-8 -*-i ...

  9. JAVA 身份证号码有效性验证

    本文转自:http://www.blogjava.net/zeroline/archive/2011/01/03/342227.html </pre><pre name=" ...

最新文章

  1. 情人节|致爱丽丝……
  2. java File类笔记
  3. 8.ubuntu下设置自定义快捷键
  4. torch.ge,torch.gt,torch.le
  5. JAVA解决生产消费者_Java常用三种方式解决生产者消费者问题(详细)
  6. 如何指南:Apache Drill入门
  7. 【学习笔记】网络层——无分类编址CIDR、ARP协议、DHCP协议和ICMP协议
  8. 物联网初步之电阻性电路分析 第三部分 电路分析方法和电路原理
  9. android支付 form表单,支付宝小程序表单组件 表单·Form
  10. codeforces 369C Valera and Elections
  11. Say“No”,你学会了吗?
  12. Have Fun with Numbers及循环链表(约瑟夫问题)
  13. 网络安全实验室 综合关 解析
  14. 网易云接口获取音乐(转载练习)
  15. matlab 声纹识别,识别模型论文,关于基于MATLAB的声纹识别系统软件的设计相关参考文献资料-免费论文范文...
  16. movielens处理代码
  17. [渝粤教育] 西南科技大学 刑法学 在线考试复习资料
  18. windows7系统的“ .exe”图标显示不正常解决办法
  19. 推荐几个长期有效的免费服务器和免费vps游戏服务器亲测再用
  20. 计算机云台示意图,智能语音识别云台转动模块电路设计—电路图天天读(70)...

热门文章

  1. WebRTC源码研究(47)WebRCT传输非音视频数据
  2. 思科路由器重置密码并保存设置重置密码
  3. uniapp + HbuliderX更新日志
  4. 基于单片机MAX30100血氧、心率检测系统设计-整套资料
  5. 微软下载中心使用Silverlight搜索
  6. 关于如何调节Mahony AHRS算法的参数
  7. i5 10500h和i5 10300h有什么区别i510500h和i510300h差距大不大
  8. 抖音同款口红机 微信口红机 在线游戏口红机开发代码 分析
  9. Web services详解 :入门必看 | WSDL、SOAP
  10. error:LNK2005 已经在*.obj文件中定义的解决办法