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 动态为textbox添加下拉框数据源的方法
Apr 24 Javascript
jquery简单插件制作(fn.extend)完整实例
May 24 Javascript
JavaScript 闭包机制详解及实例代码
Oct 10 Javascript
JS区分Object与Aarry的六种方法总结
Feb 27 Javascript
jQuery图片瀑布流的简单实现代码
Mar 15 Javascript
浅谈Angular4中常用管道
Sep 27 Javascript
JS实现的简单表单验证功能完整实例
Oct 14 Javascript
vue使用axios时关于this的指向问题详解
Dec 22 Javascript
基于Vue渲染与插件的加载顺序的问题详解
Mar 05 Javascript
VUE2.0中Jsonp的使用方法
May 22 Javascript
微信小程序实现注册登录功能(表单校验、错误提示)
Dec 10 Javascript
Nest.js环境变量配置与序列化详解
Feb 21 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
层叠菜单的动态生成
2006/10/09 PHP
php连接mysql数据库代码
2009/03/10 PHP
克隆一个新项目的快捷方式
2013/04/10 PHP
PHP实现的封装验证码类详解
2013/06/18 PHP
php调整gif动画图片尺寸示例代码分享
2013/12/05 PHP
PHP 应用容器化以及部署方法
2018/02/12 PHP
js 全兼容可高亮二级缓冲折叠菜单
2010/06/04 Javascript
Web Inspector:关于在 Sublime Text 中调试Js的介绍
2013/04/18 Javascript
浅析showModalDialog数据缓存问题(用禁止浏览器缓存解决)
2013/07/09 Javascript
jquery向上向下取整适合分页查询
2014/09/06 Javascript
jquery使用hide方法隐藏指定id的元素
2015/03/30 Javascript
jquery实现图片随机排列的方法
2015/05/04 Javascript
AngularJS的内置过滤器详解
2015/05/14 Javascript
jquery+css3实现网页背景花瓣随机飘落特效
2015/08/17 Javascript
需要牢记的JavaScript基础知识
2016/09/25 Javascript
简单的js计算器实现
2016/10/26 Javascript
React Native基础入门之调试React Native应用的一小步
2018/07/02 Javascript
详解写好JS条件语句的5条守则
2019/02/28 Javascript
Layui实现带查询条件的分页
2019/07/27 Javascript
[01:00:35]2018DOTA2亚洲邀请赛3月30日B组 EffcetVSMineski
2018/03/31 DOTA
介绍Python的Urllib库的一些高级用法
2015/04/30 Python
在Python中等距取出一个数组其中n个数的实现方式
2019/11/27 Python
python Tensor和Array对比分析
2020/01/08 Python
vue学习笔记之动态组件和v-once指令简单示例
2020/02/29 Python
Python基于smtplib模块发送邮件代码实例
2020/05/29 Python
python 提高开发效率的5个小技巧
2020/10/19 Python
史泰博(Staples)中国官方网站:办公用品一站式采购
2016/09/05 全球购物
美团网旗下网上订餐平台:美团外卖
2020/03/05 全球购物
软件工程专业推荐信
2013/10/28 职场文书
临床护士自荐信
2014/01/31 职场文书
《我的信念》教学反思
2014/02/15 职场文书
租房协议书
2014/09/12 职场文书
员工评语范文
2014/12/31 职场文书
Jsonp劫持学习
2021/04/01 PHP
css3 利用transform-origin 实现圆点分布在大圆上布局及旋转特效
2021/04/29 HTML / CSS
JavaScript与JQuery框架基础入门教程
2021/07/15 Javascript