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客户端将指定区域导出到Word、Excel的代码
Oct 22 Javascript
js 学习笔记(三)
Dec 29 Javascript
JavaScript中的细节分析
Jun 30 Javascript
以Python代码实例展示kNN算法的实际运用
Oct 26 Javascript
knockoutjs动态加载外部的file作为component中的template数据源的实现方法
Sep 01 Javascript
基于JS实现回到页面顶部的五种写法(从实现到增强)
Sep 03 Javascript
深入浅析Vue组件开发
Nov 25 Javascript
详解JS几种变量交换方式以及性能分析对比
Nov 25 Javascript
js 发布订阅模式的实例讲解
Sep 10 Javascript
js的对象与函数详解
Jan 21 Javascript
axios实现文件上传并获取进度
Mar 25 Javascript
Ajax异步刷新功能及简单案例
Nov 20 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
Laravel中log无法写入问题的解决
2017/06/17 PHP
PHP注释语法规范与命名规范详解篇
2018/01/21 PHP
Thinkphp5.0 框架的请求方式与响应方式分析
2019/10/14 PHP
如何取得中文输入的真实长度?
2006/06/24 Javascript
javascript dom 基本操作小结
2010/04/11 Javascript
javascript分页代码(当前页码居中)
2012/09/20 Javascript
如何在node的express中使用socket.io
2014/12/15 Javascript
使用js实现的简单拖拽效果
2015/03/18 Javascript
js实现登陆遮罩效果的方法
2015/07/28 Javascript
js滑动提示效果代码分享
2016/03/10 Javascript
jQuery隐藏和显示效果实现
2016/04/06 Javascript
非常漂亮的相册集 使用jquery制作相册集
2016/04/28 Javascript
JS事件添加和移出的兼容写法示例
2016/06/20 Javascript
jQuery实现键盘回车搜索功能
2017/07/25 jQuery
vue列表单项展开收缩功能之this.$refs的详解
2019/05/05 Javascript
[54:56]DOTA2上海特级锦标赛主赛事日 - 5 总决赛Liquid VS Secret第三局
2016/03/06 DOTA
Python实现批量将word转html并将html内容发布至网站的方法
2015/07/14 Python
详解K-means算法在Python中的实现
2017/12/05 Python
用Python实现数据的透视表的方法
2018/11/16 Python
python PyAutoGUI 模拟鼠标键盘操作和截屏功能
2019/08/04 Python
Python进程间通信multiprocess代码实例
2020/03/18 Python
Python3 ffmpeg视频转换工具使用方法解析
2020/08/10 Python
PyCharm 2020.2 安装详细教程
2020/09/25 Python
以太网Ethernet IEEE802.3
2013/08/05 面试题
综合办公室主任职责
2013/12/16 职场文书
法制宣传标语集锦
2014/06/25 职场文书
小学兴趣小组活动总结
2014/07/07 职场文书
政府会议通知范文
2015/04/15 职场文书
2015年预防青少年违法犯罪工作总结
2015/05/22 职场文书
电影建党伟业观后感
2015/06/01 职场文书
小学生组织委员竞选稿
2015/11/21 职场文书
2016年中秋节慰问信
2015/12/01 职场文书
2016年员工年度考核评语
2015/12/02 职场文书
2016年11月份红领巾广播稿
2015/12/21 职场文书
Python如何配置环境变量详解
2021/05/18 Python
MySQL中一条SQL查询语句是如何执行的
2022/04/08 MySQL