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 模仿vbs中的 DateAdd() 函数的代码
Aug 13 Javascript
javascript 简练的几个函数
Aug 29 Javascript
Javascript学习笔记之 对象篇(三) : hasOwnProperty
Jun 24 Javascript
jQuery实现鼠标滑过链接控制图片的滑动展开与隐藏效果
Oct 28 Javascript
jQuery实用技巧必备(上)
Nov 02 Javascript
js操作DOM--添加、删除节点的简单实例
Jul 08 Javascript
总结Javascript中的隐式类型转换
Aug 24 Javascript
jquery根据td给相同tr下其他td赋值的实现方法
Oct 05 Javascript
js实现兼容PC端和移动端滑块拖动选择数字效果
Feb 16 Javascript
微信小程序之选项卡的实现方法
Sep 29 Javascript
ES6使用Set数据结构实现数组的交集、并集、差集功能示例
Oct 31 Javascript
js里面的变量范围分享
Jul 18 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 setcookie设置Cookie用法(及设置无效的问题)
2011/07/13 PHP
PHP中数据类型转换的三种方式
2015/04/02 PHP
php实现的简易扫雷游戏实例
2015/07/09 PHP
php实现将Session写入数据库
2015/07/26 PHP
php编译安装php-amq扩展简明教程
2016/06/25 PHP
发布一个高效的JavaScript分析、压缩工具 JavaScript Analyser
2007/11/30 Javascript
javascript网页关键字高亮代码
2008/07/30 Javascript
用jQuery获取IE9下拉框默认值问题探讨
2013/07/22 Javascript
js实现基于正则表达式的轻量提示插件
2015/08/29 Javascript
jQuery实现商品活动倒计时
2015/10/16 Javascript
JavaScript绑定事件监听函数的通用方法
2016/05/14 Javascript
javascript完美实现给定日期返回上月日期的方法
2017/06/15 Javascript
vue.js-div滚动条隐藏但有滚动效果的实现方法
2018/03/03 Javascript
微信小程序实现美团菜单
2018/06/06 Javascript
vue自定义全局共用函数详解
2018/09/18 Javascript
vue 中 命名视图的用法实例详解
2019/08/14 Javascript
微信小程序自定义头部导航栏(组件化)
2019/11/15 Javascript
深度解读vue-resize的具体用法
2020/07/08 Javascript
js实现直播点击飘心效果
2020/08/19 Javascript
python用字典统计单词或汉字词个数示例
2014/04/22 Python
python3 模拟登录v2ex实例讲解
2017/07/13 Python
python 删除大文件中的某一行(最有效率的方法)
2017/08/19 Python
一个月入门Python爬虫学习,轻松爬取大规模数据
2018/01/03 Python
python中的随机函数小结
2018/01/27 Python
python实现斗地主分牌洗牌
2020/06/22 Python
解决Keras中循环使用K.ctc_decode内存不释放的问题
2020/06/29 Python
医药代表个人的求职信分享
2013/12/08 职场文书
个人授权委托书范本
2014/04/03 职场文书
建筑工地质量标语
2014/06/12 职场文书
2015年幼儿园元旦亲子活动方案
2014/12/09 职场文书
房产公证书样本
2015/01/23 职场文书
工作自我推荐信范文
2015/03/25 职场文书
python 如何在 Matplotlib 中绘制垂直线
2021/04/02 Python
Django如何与Ajax交互
2021/04/29 Python
Python中使用subprocess库创建附加进程
2021/05/11 Python
MybatisPlus EntityWrapper如何自定义SQL
2022/03/22 Java/Android