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 相关文章推荐
JavaScript CSS修改学习第三章 修改样式表
Feb 19 Javascript
JavaScript浏览器选项卡效果
Aug 25 Javascript
JS对外部文件的加载及对IFRMAME的加载的实现,当加载完成后,指定指向方法(方法回调)
Jul 04 Javascript
jQuery自定义事件的简单实现代码
Jan 27 Javascript
浅析node连接数据库(express+mysql)
Nov 30 Javascript
AngularJS模块学习之Anchor Scroll
Jan 19 Javascript
jquery实现图片切换代码
Oct 13 Javascript
深入浅析Node环境和浏览器的区别
Aug 14 Javascript
详解SPA中前端路由基本原理与实现方式
Sep 12 Javascript
vue+echarts实现可拖动节点的折线图(支持拖动方向和上下限的设置)
Apr 12 Javascript
通过实例解析js简易模块加载器
Jun 17 Javascript
vue使用i18n实现国际化的方法详解
Sep 05 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验证码函数的使用示例
2013/05/03 PHP
PHP调用VC编写的COM组件实例
2014/03/29 PHP
PHP ajax 异步执行不等待执行结果的处理方法
2015/05/27 PHP
php7基于递归实现删除空文件夹的方法示例
2017/06/15 PHP
Laravel框架路由和控制器的绑定操作方法
2018/06/12 PHP
解决Laravel blade模板转义html标签的问题
2019/09/03 PHP
php实现简易计算器
2020/08/28 PHP
网页自动跳转代码收集
2009/09/27 Javascript
UserData用法总结 lanyu出品
2010/07/01 Javascript
jQuery替换字符串(实例代码)
2013/11/13 Javascript
input链接页面、打开新网页等等的具体实现
2013/12/30 Javascript
JS调试必备的5个debug技巧
2014/03/07 Javascript
使用CSS3的scale实现网页整体缩放
2014/03/18 Javascript
js实现图片在未加载完成前显示加载中字样
2014/09/03 Javascript
JQuery的Ajax中Post方法传递中文出现乱码的解决方法
2014/10/21 Javascript
jQuery实现3D文字特效的方法
2015/03/10 Javascript
jQuery实现自动切换播放的经典滑动门效果
2015/09/12 Javascript
原生JS实现图片轮播与淡入效果的简单实例
2016/08/21 Javascript
footer定位页面底部(代码分享)
2017/03/07 Javascript
给Easyui-Datebox设置隐藏或者不可用的解决方法
2017/05/26 Javascript
AngularJS中table表格基本操作示例
2017/10/10 Javascript
如何利用Node.js与JSON搭建简单的动态服务器
2020/06/16 Javascript
[01:44]Ti10举办地公布
2019/08/25 DOTA
[46:42]DOTA2-DPC中国联赛正赛 Aster vs Magma BO3 第二场 3月5日
2021/03/11 DOTA
python读取Android permission文件
2013/11/01 Python
基于Python 的进程管理工具supervisor使用指南
2016/09/18 Python
使用python itchat包爬取微信好友头像形成矩形头像集的方法
2019/02/21 Python
Python解析命令行读取参数之argparse模块
2019/07/26 Python
python3代码中实现加法重载的实例
2020/12/03 Python
SmartBuyGlasses英国:购买太阳镜和眼镜
2018/01/29 全球购物
房展策划方案
2014/06/07 职场文书
电子商务专业应届毕业生求职信
2014/06/21 职场文书
经费申请报告范文
2015/05/18 职场文书
天河观后感
2015/06/11 职场文书
《草虫的村落》教学反思
2016/02/20 职场文书
2019年怎样才能撰写出优秀的自荐信
2019/03/25 职场文书