• 身份证号码结构
    • 组成说明
    • 计算方法
  • 代码验证

身份证号码结构

组成说明

公民身份号码是特征组合码,由十七位数字本体码和一位数字校验码组成。

  1. 前6位为地址码,以数字1-9开头,后5位为0-9的数字;
  2. 第7位至14位为出生日期码,此码由6位数改为8位数,其中年份用4位数表示;
  3. 第15位至17位为顺序码,是县、区级政府所辖派出所的分配码;
  4. 第18位为校验码,主要是为了校验计算机输入公民身份证号码的前17位数字是否正确,其取值范围是0至10,当值等于10时,用罗马数字符X表示。

注: 一代身份证(15位)已经不能使用,需要换领二代身份证(18位)。

计算方法

  1. 将前面的身份证号码17位数分别乘以不同的系数。从第一位到第十七位的系数分别为:7-9-10-5-8-4-2-1-6-3-7-9-10-5-8-4-2。
  2. 将这17位数字和系数相乘的结果相加。
  3. 用加出来和除以11,看余数是多少?
  4. 余数只可能有0-1-2-3-4-5-6-7-8-9-10这11个数字。其分别对应的最后一位身份证的号码为1-0-X -9-8-7-6-5-4-3-2。(即余数0对应1,余数1对应0,余数2对应X…)
  5. 通过上面得知如果余数是3,就会在身份证的第18位数字上出现的是9。如果对应的数字是2,身份证的最后一位号码就是罗马数字X。

举个例子: 某男性的身份证号码为【53010219200508011X】, 我们看看这个身份证是不是符合计算规则的身份证?

首先我们得出前17位的乘积和【(57)+(39)+(010)+(15)+(08)+(24)+(12)+(91)+(26)+(03)+(07)+(59)+(010)+(85)+(08)+(14)+(1*2)】是189,然后用189除以11得出的结果是189÷11=17余下2,187÷11=17,还剩下2不能被除尽,也就是说其余数是2。最后通过对应规则就可以知道余数2对应的检验码是X。所以,可以判定这是一个正确的身份证号码.

代码验证

现在身份证号码基本都是18位的(本文不对15位身份证做验证处理)。
当身份证号码为15位时,全部都是数字。当为18位时,前17位全部为数字后1位为检验位,可能为数字,也可能为字母X。

/*** 验证身份证号码* @param { String } code 身份证号码* @returns {*   isPass, // 验证是否通过,默认通过,为true,否则为false*   errorMessage, // 错误信息,isPass为true则为''* }* */
export function identityIDCard(code) {// 身份证号前两位代表区域const city = {11: '北京',12: '天津',13: '河北',14: '山西',15: '内蒙古',21: '辽宁',22: '吉林',23: '黑龙江 ',31: '上海',32: '江苏',33: '浙江',34: '安徽',35: '福建',36: '江西',37: '山东',41: '河南',42: '湖北 ',43: '湖南',44: '广东',45: '广西',46: '海南',50: '重庆',51: '四川',52: '贵州',53: '云南',54: '西藏 ',61: '陕西',62: '甘肃',63: '青海',64: '宁夏',65: '新疆',71: '台湾',81: '香港',82: '澳门',91: '国外 ',};const idCardReg = /^[1-9]\d{5}(19|20)?\d{2}(0[1-9]|1[012])(0[1-9]|[12]\d|3[01])\d{3}(\d|X)$/i; // 身份证格式正则表达式let isPass = true; // 身份证验证是否通过(true通过、false未通过)let errorMessage = ''; // 错误提示信息// 如果身份证不满足格式正则表达式if (!code) {errorMessage = '请输入身份证号码';isPass = false;} else if (!code.match(idCardReg)) {errorMessage = '请输入正确的身份证号码';isPass = false;} else if (!city[code.substr(0, 2)]) {// 区域数组中不包含需验证的身份证前两位errorMessage = '请输入正确的身份证号码';isPass = false;} else if (code.length === 18) {// 18位身份证需要验证最后一位校验位code = code.split('');// ∑(ai×Wi)(mod 11)// 加权因子const factor = [7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2];// 校验位const parity = [1, 0, 'X', 9, 8, 7, 6, 5, 4, 3, 2];let sum = 0;let ai = 0;let wi = 0;for (let i = 0; i < 17; i++) {ai = parseInt(code[i]);wi = factor[i];sum += ai * wi; // 开始计算并相加}const last = parity[sum % 11]; // 求余if (last.toString() !== code[17]) {errorMessage = '请输入正确的身份证号码';isPass = false;}}return {errorMessage,isPass,}
}

js验证身份证号的真实性相关推荐

  1. 使用js验证身份证号格式以及身份证号中的生日验证

    由于不管是测试项目练手还是实际项目开发,都应该考虑数据的严密性和软件的通俗易懂的实用性,下面是我用js实现的验证身份证号格式以及身份证号中的生日验证代码 //生日移出点击事件验证身份证号中的生日验证 ...

  2. js验证身份证号,超准确

    看程序前先来了解下身份证号的构成:身份证号分为两种,旧的为15位,新的为18位.身份证15位编码规则:dddddd yymmdd xx p    其中 dddddd:地区码    yymmdd: 出生 ...

  3. js 验证身份证号,根据身份证获取出生年月/性别

    用到的input <input id="idCard" name="idCard" class="form-control" type ...

  4. JS验证身份证号地区码及最后一位校验码

    /* 参数为身份证号 返回正确校验码 */ function getjy(id) {     var arr = new Array();//分别取出身份证的前17位加入到这个数组     var a ...

  5. JS验证身份证号输入是否正确,身份证号码正则表达式

    const correctFormat = '511622199908281958';const inCorrectFormat = '1212121212121212121';// 身份证号码为15 ...

  6. js进阶正则表达式15验证身份证号(|符号的使用:var reg=/^\d{17}[\d|X]$|^\d{15}$/)(str的方法substr)...

    js进阶正则表达式15验证身份证号(|符号的使用:var reg=/^\d{17}[\d|X]$|^\d{15}$/)(str的方法substr) 一.总结 1.|符号的使用:var reg=/^\d ...

  7. js 验证身份证号码正确性

    今天找半天js验证身份证的,从网上找了很多,自己也总结了一下,在此记录,以便以后使用查询方便,也供大家参考. 代码如下,可直接用 function isIdCardNo(num) { num = nu ...

  8. angularjs 验证身份证格式 和 一般JS验证身份证格式

    1:angularjs 验证身份证格式 1.1 定义身份证验证指令: .directive('cardCheck',['$http','$rootScope',function($http,$root ...

  9. js验证身份证号码是否正确(整理)

    使用:/(^\d{15}$)|(^\d{18}$)|(^\d{17}(\d|X|x)$)/ if(!(/(^\d{15}$)|(^\d{18}$)|(^\d{17}(\d|X|x)$)/.test(v ...

最新文章

  1. 'This NSPersistentStoreCoordinator has no persistent stores 报错
  2. 2018-3-9 论文(网络评论中非结构化信息表示与研究)笔记---模糊认知图的形式化表示
  3. “我辞职了,决定全职去开发我的操作系统!”
  4. 浅析网站SEO优化对长尾关键词保持好感度的四大技巧
  5. [转]PetShop的系统架构设计
  6. 把所有的谎言献给你β
  7. Qt文档阅读笔记-QWindow的进一步认识
  8. 【Kafka】Kafka如何通过源码实现监控
  9. ThinkPHP邮件发送函数示例
  10. python怎么读单词和古文_Python 实现文言文词频统计
  11. FileZilla Server使用实践
  12. 【反射机制】与 【xml解析 】之 巧夺天工 —————— 开开开山怪
  13. Linux主机安全加固方法使用开源软件fail2ban防护主机
  14. 关闭谷歌Chrome浏览器历史记录提示
  15. mysql查询结果百分比表示_MySQL 查询结果以百分比显示简单实现
  16. 谷歌浏览器打包扩展程序(记录扩展程序根目录)
  17. 离散时间信号和系统的时域分析
  18. 6、因子分解机FM介绍
  19. php适应浏览器显示,浏览器变动时进行自适应代码分享
  20. Android 颜色使用总结

热门文章

  1. [HPM] Error occurred while trying to proxy request /account/login/ from localhost:3000 to http://127
  2. 洗地机什么品牌质量好耐用?洗地机家用质量好的牌子推荐
  3. h5+、mui创建手机APP,华为等手机底部虚拟按键问题
  4. 在AWS EC2上搭建jenkins并且整合git+maven+docker自动化部署环境(一)
  5. 华为snmp连接esight服务器配置案例
  6. 神经网络入门基本问题
  7. Jmeter socket接口测试
  8. 解决请求 413 Request Entity Too Large
  9. vscode格式化代码不换行
  10. 多人开发 Git 分支管理详解