JS前后端实现身份证号验证代码解析


Posted in Javascript onJuly 23, 2020

前言

实名制是许多网站都必备的功能,因此用户经常需要输入身份证号,但是我们无法连通公安局的数据库进行验证身份证和姓名地址是否匹配,因此可以根据身份证生成的规则来进行身份证格式的验证,以下仅介绍二代身份证的验证。

计算公式

公民身份号码是特征组合码,由十七位数字本体码和一位校验码组成。

排列顺序从左至右依次为:六位数字地址码,八位数字出生日期码,三位数字顺序码和一位校验码。

1、地址码:表示编码对象常住户口所在县(市、旗、区)的行政区域划分代码,按GB/T2260的规定执行。

2、出生日期码:表示编码对象出生的年、月、日,按GB/T7408的规定执行,年、月、日代码之间不用分隔符。

3、顺序码:表示在同一地址码所标识的区域范围内,对同年、同月、同日出生的人编定的顺序号,顺序码的奇数分配给男性,偶数分配给女性。

4、校验码计算步骤:

(1)十七位数字本体码加权求和公式:

S = Sum(Ai * Wi), i = 0, … , 16 ,先对前17位数字的权求和;

Ai:表示第i位置上的身份证号码数字值(0~9);

Wi:7 9 10 5 8 4 2 1 6 3 7 9 10 5 8 4 2 (表示第i位置上的加权因子);

(2)计算模:Y = mod(S, 11);

(3)根据模,查找得到对应的校验码:Y: 0 1 2 3 4 5 6 7 8 9 10

校验码: 1 0 X 9 8 7 6 5 4 3 2;

前端验证

const weight = [7,9,10,5,8,4,2,1,6,3,7,9,10,5,8,4,2];//十七位数字本体码权重
const validate = ['1','0','X','9','8','7','6','5','4','3','2'];//mod11,对应校验码字符值

function getValidateCode(id17){
 let sum = 0;
 let mode = 0;
 [...id17].forEach((elem,i) => {
  sum=sum+parseInt(elem)*weight[i];
 });
 mode = sum % 11;
 return validate[mode];
}
console.log("该身份证验证码:"+ getValidateCode("14230219700101101"));//该身份证验证码:3

后端验证(Java)

public class Id18 {
 int[] weight={7,9,10,5,8,4,2,1,6,3,7,9,10,5,8,4,2};//十七位数字本体码权重
 char[] validate={ '1','0','X','9','8','7','6','5','4','3','2'};//mod11,对应校验码字符值  
 
 public char getValidateCode(String id17){
   int sum = 0;
   int mode = 0;
   for(int i = 0; i < id17.length(); i++){
     sum=sum+Integer.parseInt(String.valueOf(id17.charAt(i)))*weight[i];
   }
   mode = sum % 11;
   return validate[mode];
 }
 
 public static void main(String[] args){
   Id18 tes t= new Id18();
   System.out.println("该身份证验证码:"+test.getValidateCode("14230219700101101"));//该身份证校验码:3
 }
}

总结

身份证验证和手机号邮箱等格式验证是一样的,都要做前后端双重验证,前端验证不通过就不劳烦后端验证,减轻服务器的压力;

至于一代身份证的验证大家也可以查询下相关的算法,在原基础上改改即可,我感觉现在好像也没有一代身份证了,亦或者用一代身份证的人都不怎么上网,因此这里就不写了。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
js 深拷贝函数
Dec 04 Javascript
js switch case default 的用法示例介绍
Oct 23 Javascript
JS 去除Array中的null值示例代码
Nov 20 Javascript
node.js中的favicon.ico请求问题处理
Dec 15 Javascript
jQuery插件bxSlider实现响应式焦点图
Apr 12 Javascript
JS实现alert中显示换行的方法
Dec 17 Javascript
js计算系统当前日期是星期几的方法
Jul 14 Javascript
微信小程序中子页面向父页面传值实例详解
Mar 20 Javascript
自定义vue全局组件use使用、vuex的使用详解
Jun 14 Javascript
JS对象与JSON互转换、New Function()、 forEach()、DOM事件流等js开发基础小结
Aug 10 Javascript
js判断节假日实例代码
Dec 27 Javascript
js 索引下标之li集合绑定点击事件
Jan 12 Javascript
vue实现用户长时间不操作自动退出登录功能的实现代码
Jul 23 #Javascript
在vue中封装的弹窗组件使用队列模式实现方法
Jul 23 #Javascript
基于JS实现计算24点算法代码实例解析
Jul 23 #Javascript
javascript递归函数定义和用法示例分析
Jul 22 #Javascript
简单了解vue 插值表达式Mustache
Jul 22 #Javascript
详解node.js 事件循环
Jul 22 #Javascript
jQuery+ThinkPHP实现图片上传
Jul 23 #jQuery
You might like
PHP版自动生成文章摘要
2008/07/23 PHP
隐性调用php程序的方法
2009/03/09 PHP
php 阴历-农历-转换类代码
2012/01/16 PHP
关于php 接口问题(php接口主要也就是运用curl,curl函数)
2013/07/01 PHP
php阻止页面后退的方法分享
2014/02/17 PHP
腾讯CMEM的PHP扩展编译安装方法
2015/09/25 PHP
分享PHP守护进程类
2015/12/30 PHP
PHP 中使用ajax时一些常见错误总结整理
2017/02/27 PHP
解决php extension 加载顺序问题
2019/08/16 PHP
基于jQuery的前端数据通用验证库
2011/08/08 Javascript
Javascript/Jquery——简单定时器的多种实现方法
2013/07/03 Javascript
jQuery设置div一直在页面顶部显示的方法
2013/10/24 Javascript
父页面显示遮罩层弹出半透明状态的dialog
2014/03/04 Javascript
JavaScript制作的可折叠弹出式菜单示例
2014/04/04 Javascript
Jquery中offset()和position()的区别分析
2015/02/05 Javascript
jquery带下拉菜单和焦点图代码分享
2015/08/24 Javascript
javascript日期操作详解(脚本之家整理)
2015/09/05 Javascript
js实现交通灯效果
2017/01/13 Javascript
使用vue构建移动应用实战代码
2017/08/02 Javascript
你可能不知道的JSON.stringify()详解
2017/08/17 Javascript
浅谈NodeJs之数据库异常处理
2017/10/25 NodeJs
python 中的divmod数字处理函数浅析
2017/10/17 Python
Flask实现跨域请求的处理方法
2018/09/27 Python
python 提取key 为中文的json 串方法
2018/12/31 Python
python从zip中删除指定后缀文件(推荐)
2019/12/05 Python
Python使用扩展库pywin32实现批量文档打印实例
2020/04/09 Python
HTML5、Select下拉框右边加图标的实现代码(增进用户体验)
2017/10/16 HTML / CSS
End Clothing美国站:英国男士潮牌商城
2018/04/20 全球购物
宿舍卫生检讨书
2014/01/16 职场文书
父亲追悼会答谢词
2014/01/17 职场文书
环保志愿者活动方案
2014/08/14 职场文书
教师反腐倡廉演讲稿
2014/09/03 职场文书
2015年元旦演讲稿
2014/09/12 职场文书
2014年政教处工作总结
2014/12/20 职场文书
2015年化妆品销售工作总结
2015/05/11 职场文书
春季运动会加油词
2015/07/18 职场文书