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 相关文章推荐
jQuery基础框架浅入剖析
Dec 27 Javascript
Javascript中 关于prototype属性实现继承的原理图
Apr 16 Javascript
javascript中encodeURI和decodeURI方法使用介绍
May 06 Javascript
js实现数字每三位加逗号的方法
Feb 05 Javascript
谈谈基于iframe、FormData、FileReader三种无刷新上传文件的方法
Dec 03 Javascript
jquery.validate表单验证插件使用详解
Jun 21 jQuery
详解JS数据类型的值拷贝函数(深拷贝)
Jul 13 Javascript
JS实现浏览上传文件的代码
Aug 23 Javascript
jQuery实现的点击显示隐藏下拉菜单功能完整示例
May 17 jQuery
详解从vue-loader源码分析CSS Scoped的实现
Sep 23 Javascript
Javascript异步执行不按顺序解决方案
Apr 30 Javascript
Vue Element-ui表单校验规则实现
Jul 09 Vue.js
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自动注册登录验证机制实现代码
2011/12/20 PHP
php下载excel无法打开的解决方法
2013/12/24 PHP
总结PHP如何获取当前主机、域名、网址、路径、端口和参数等
2016/09/09 PHP
Javascript写了一个清除“logo1_.exe”的杀毒工具(可扫描目录)
2007/02/09 Javascript
学习YUI.Ext第五日--做拖放Darg&amp;Drop
2007/03/10 Javascript
为JavaScript添加重载函数的辅助方法
2010/07/04 Javascript
JS链式调用的实现方法
2013/03/07 Javascript
简单的两种Extjs formpanel加载数据的方式
2013/11/09 Javascript
jquery实现瀑布流效果分享
2014/03/26 Javascript
jquery实现可自动判断位置的弹出层效果代码
2015/10/12 Javascript
JavaScript操作URL的相关内容集锦
2015/10/29 Javascript
easyui 中的datagrid跨页勾选问题的实现方法
2017/01/18 Javascript
Vue 过渡实现轮播图效果
2017/03/27 Javascript
利用node.js本地搭建HTTP服务器
2017/04/19 Javascript
jQuery+HTML5实现WebGL高性能烟花绽放动画效果【附demo源码下载】
2017/08/18 jQuery
angularjs路由传值$routeParams详解
2020/09/05 Javascript
JS限制输入框输入的实现代码
2018/07/02 Javascript
vue中的watch监听数据变化及watch中各属性的详解
2018/09/11 Javascript
Vue2.x中利用@font-size引入字体图标报错的解决方法
2018/09/28 Javascript
Vue源码探究之虚拟节点的实现
2019/04/17 Javascript
jQuery实现轮播图效果
2019/11/26 jQuery
Python文档生成工具pydoc使用介绍
2015/06/02 Python
python3.4实现邮件发送功能
2018/05/28 Python
Python 正则表达式匹配字符串中的http链接方法
2018/12/25 Python
python栈的基本定义与使用方法示例【初始化、赋值、入栈、出栈等】
2019/10/24 Python
CSS3实现时间轴效果
2016/07/11 HTML / CSS
HTML5引入的新数组TypedArray介绍
2012/12/24 HTML / CSS
怎样声明一个匿名的内部类
2016/06/01 面试题
个人求职简历的自我评价范文
2013/10/09 职场文书
廉洁校园实施方案
2014/05/25 职场文书
物流管理系毕业生求职信
2014/06/03 职场文书
我的大学四年规划书范文2014
2014/09/26 职场文书
2014年加油站站长工作总结
2014/12/23 职场文书
格列佛游记读书笔记
2015/06/30 职场文书
2021-4-5课程——SQL Server查询【3】
2021/04/05 SQL Server
常用的MongoDB查询语句的示例代码
2021/07/25 MongoDB