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小技巧
Jul 21 Javascript
javascript 写类方式之五
Jul 05 Javascript
jQuery实现折线图的方法
Feb 28 Javascript
JS绘制微信小程序画布时钟
Dec 24 Javascript
Node.js连接MongoDB数据库产生的问题
Feb 08 Javascript
微信小程序 仿猫眼实现实例代码
Mar 14 Javascript
Vuex之理解Getters的用法实例
Apr 19 Javascript
JavaScript实用代码小技巧
Aug 23 Javascript
JS使用Dijkstra算法求解最短路径
Jan 17 Javascript
解析JS在获取当前月的最后一天遇到的坑
Aug 30 Javascript
jQuery实现聊天对话框
Feb 08 jQuery
vue中解决chrome浏览器自动播放音频和MP3语音打包到线上的实现方法
Oct 09 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使用ODBC连接数据库的方法
2015/07/18 PHP
培养自己的php编码规范
2015/09/28 PHP
如何使用微信公众平台开发模式实现多客服
2016/01/06 PHP
RR vs IO BO3 第一场2.13
2021/03/10 DOTA
一个符号插入器 中用到的js代码
2007/09/04 Javascript
JavaScript 基础问答三
2008/12/03 Javascript
JavaScript实现动态增加文件域表单
2009/02/12 Javascript
弹出最简单的模式化遮罩层的js代码
2013/12/04 Javascript
JS之Date对象和获取系统当前时间详解
2014/01/13 Javascript
JS如何将数字类型转化为没3个一个逗号的金钱格式
2014/01/27 Javascript
AngularJs页面筛选标签小功能
2016/08/01 Javascript
手机端图片缩放旋转全屏查看PhotoSwipe.js插件实现
2016/08/25 Javascript
Query常用DIV操作获取和设置长度宽度的实现方法
2016/09/19 Javascript
解决html-jquery/js引用外部图片时遇到看不了或出现403的问题
2017/09/22 jQuery
bootstrap-table实现表头固定以及列固定的方法示例
2019/03/07 Javascript
js实现百度淘宝搜索功能
2020/02/17 Javascript
[07:09]2014DOTA2国际邀请赛-Newbee再次发威成功晋级决赛
2014/07/19 DOTA
python查找第k小元素代码分享
2013/12/18 Python
python和shell实现的校验IP地址合法性脚本分享
2014/10/23 Python
浅谈python内置变量-reversed(seq)
2017/06/21 Python
解决python3 json数据包含中文的读写问题
2018/05/10 Python
python读取图片任意范围区域
2019/01/23 Python
django之从html页面表单获取输入的数据实例
2020/03/16 Python
python+excel接口自动化获取token并作为请求参数进行传参操作
2020/11/10 Python
Pycharm如何自动生成头文件注释
2020/11/14 Python
python中的对数log函数表示及用法
2020/12/09 Python
高街生活方式全球在线商店:AZBRO
2017/08/26 全球购物
美国益智玩具购物网站:Fat Brain Toys
2017/11/03 全球购物
MyHeritage美国:家族史研究和DNA测试的领先服务
2019/05/27 全球购物
应届生护士求职信
2013/11/01 职场文书
大学生入党思想汇报
2014/01/01 职场文书
公安学专业求职信
2014/07/27 职场文书
作风大整顿心得体会
2014/09/10 职场文书
新员工考核评语
2014/12/31 职场文书
2015年图书馆个人工作总结
2015/05/26 职场文书
2019最新企业员工考勤管理制度(通用版)!
2019/07/02 职场文书