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实现漂浮在网页右侧的qq在线客服插件示例
May 13 Javascript
js判断上传文件的类型和大小示例代码
Oct 18 Javascript
jQuery$命名冲突怎么办如何解决
Jan 16 Javascript
javascript实现依次输入input自动定焦
Dec 23 Javascript
jQuery实现最简单的切换图效果【可兼容IE6、火狐、谷歌、opera等】
Sep 04 Javascript
JS简单实现滑动加载数据的方法示例
Oct 18 Javascript
基于Swiper实现移动端页面图片轮播效果
Dec 28 Javascript
react 应用多入口配置及实践总结
Oct 17 Javascript
JavaScript中import用法总结
Jan 20 Javascript
详解微信小程序支付流程与梳理
Jul 16 Javascript
jQuery实现雪花飘落效果
Aug 02 jQuery
vue响应式原理与双向数据的深入解析
Jun 04 Vue.js
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
ThinkPHP独立分组使用的注意事项
2014/11/25 PHP
功能强大的PHP发邮件类
2016/08/29 PHP
浅谈PHP中的错误处理和异常处理
2017/02/04 PHP
Laravel框架实现的上传图片到七牛功能详解
2019/09/06 PHP
不错的新闻标题颜色效果
2006/12/10 Javascript
如何做到打开一个页面,过几分钟自动转到另一页面
2007/04/20 Javascript
javaScript让文本框内的最后一个文字的后面获得焦点实现代码
2013/01/06 Javascript
简单的分页代码js实现
2016/05/17 Javascript
JS数组排序方法实例分析
2016/12/16 Javascript
详解用webpack把我们的业务模块分开打包的方法
2017/07/20 Javascript
Node之简单的前后端交互(实例讲解)
2017/11/14 Javascript
详解封装基础的angular4的request请求方法
2018/06/05 Javascript
微信小程序搭建(mpvue+mpvue-weui+fly.js)的详细步骤
2018/09/18 Javascript
详解Vue-cli3.X使用px2rem遇到的问题
2019/08/09 Javascript
判断JavaScript中的两个变量是否相等的操作符
2019/12/21 Javascript
vue中使用v-for时为什么不能用index作为key
2020/04/04 Javascript
原生JS生成指定位数的验证码
2020/10/28 Javascript
vue+elementui通用弹窗的实现(新增+编辑)
2021/01/07 Vue.js
[01:34]传奇从这开始 2016国际邀请赛中国区预选赛震撼开启
2016/06/26 DOTA
[02:40]2018年度DOTA2最佳新人-完美盛典
2018/12/16 DOTA
Python中的is和id用法分析
2015/01/26 Python
Python中字符串的常见操作技巧总结
2016/07/28 Python
python flask实现分页效果
2017/06/27 Python
基于python的多进程共享变量正确打开方式
2018/04/28 Python
python3+selenium实现126邮箱登陆并发送邮件功能
2019/01/23 Python
python射线法判断一个点在图形区域内外
2019/06/28 Python
Python使用Numpy模块读取文件并绘制图片
2020/05/13 Python
Python压缩模块zipfile实现原理及用法解析
2020/08/14 Python
python实现画图工具
2020/08/27 Python
python 爬取英雄联盟皮肤并下载的示例
2020/12/04 Python
HTML5时代CSS设置漂亮字体取代图片
2014/09/04 HTML / CSS
CSS3中各种颜色属性的使用教程
2016/05/17 HTML / CSS
个人简历自我评价
2014/02/02 职场文书
篮球友谊赛通讯稿
2014/10/10 职场文书
MySQL下载安装配置详细教程 附下载资源
2022/09/23 MySQL