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 查找select ,并触发事件的实现代码
Mar 30 Javascript
基于jquery的固定表头和列头的代码
May 03 Javascript
基于jquery的滚动条滚动固定div(附演示下载)
Oct 29 Javascript
使用jQuery中的when实现多个AJAX请求对应单个回调的例子分享
Apr 23 Javascript
jQuery对指定元素中指定字符串进行替换的方法
Mar 17 Javascript
Mongoose学习全面理解(推荐)
Jan 21 Javascript
react-native封装插件swiper的使用方法
Mar 20 Javascript
浅谈TypeScript 用 Webpack/ts-node 运行的配置记录
Oct 11 Javascript
Windows上node.js的多版本管理工具用法实例分析
Nov 06 Javascript
vue-cli单页面预渲染seo-prerender-spa-plugin操作
Aug 10 Javascript
JS面向对象实现飞机大战
Aug 26 Javascript
vue router-link 默认a标签去除下划线的实现
Nov 06 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 iconv 函数转gb2312的bug解决方法
2009/10/11 PHP
如何使用PHP实现javascript的escape和unescape函数
2013/06/29 PHP
php上传文件问题汇总
2015/01/30 PHP
php观察者模式应用场景实例详解
2017/02/03 PHP
Yii框架小部件(Widgets)用法实例详解
2020/05/15 PHP
JS通过分析userAgent属性来判断浏览器的类型及版本
2014/03/28 Javascript
浅谈jquery.fn.extend与jquery.extend区别
2015/07/13 Javascript
JavaScript程序中的流程控制语句用法总结
2016/05/23 Javascript
ionic由于使用了header和subheader导致被遮挡的问题的两种解决方法
2016/09/22 Javascript
简单实现JavaScript图片切换效果
2016/11/28 Javascript
jquery 判断是否支持Placeholder属性的方法
2017/02/07 Javascript
nodejs个人博客开发第一步 准备工作
2017/04/12 NodeJs
java和js实现的洗牌小程序
2019/09/30 Javascript
原生js实现点击轮播切换图片
2020/02/11 Javascript
原生JS实现九宫格抽奖
2020/09/13 Javascript
Python使用cookielib模块操作cookie的实例教程
2016/07/12 Python
Python编程对列表中字典元素进行排序的方法详解
2017/05/26 Python
Python处理命令行参数模块optpars用法实例分析
2018/05/31 Python
Python 3.3实现计算两个日期间隔秒数/天数的方法示例
2019/01/07 Python
Python函数中不定长参数的写法
2019/02/13 Python
Python使用指定字符长度切分数据示例
2019/12/05 Python
Python基础之高级变量类型实例详解
2020/01/03 Python
pytorch查看通道数 维数 尺寸大小方式
2020/05/26 Python
Python中如何引入第三方模块
2020/05/27 Python
Python脚本调试工具安装过程
2021/01/11 Python
css3如何绘制一个圆圆的loading转圈动画
2018/01/09 HTML / CSS
HTML最新标准HTML5总结(必看)
2016/06/13 HTML / CSS
广州地球村科技数据库题目
2016/04/25 面试题
介绍一下Java中标识符的命名规则
2014/02/03 面试题
乡镇信息公开实施方案
2014/03/23 职场文书
志愿者活动总结范文
2014/04/26 职场文书
三方股东合作协议书范本
2014/09/28 职场文书
python 自动化偷懒的四个实用操作
2021/04/11 Python
Python list列表删除元素的4种方法
2021/11/01 Python
Python自动化工具之实现Excel转Markdown表格
2022/04/08 Python
Mongodb 迁移数据块的流程介绍分析
2022/04/18 MongoDB