判断身份证号是否有效

检查省份代码 参考文档

华北:北京11,天津12,河北13,山西14,内蒙古15

东北: 辽宁21,吉林22,黑龙江23

华东: 上海31,江苏32,浙江33,安徽34,福建35,江西36,山东37

华中: 河南41,湖北42,湖南43

华南: 广东44,广西45,海南46

西南: 四川51,贵州52,云南53,西藏54,重庆50

西北: 陕西61,甘肃62,青海63,宁夏64,新疆65

特别:中国台湾71,中国香港81,中国澳门82

身份证号码说明

如果身份证号码是18位的,其中17位数字本体码和1位数字校验码组成。排列顺序从左至右依次为:6位数字地址码,8位数字出生日期码,3位数字顺序码和1位数字校验码。

地址码:常住户口所在县(市、旗、区)的行政区划代码。
顺序码:表示在同一地址码所标识的区域范围内,对同年同月同日出生的人编定的顺序号,顺序码的奇数分配给男性,偶数分配给女性。
校验码:将身份证号码的前17位数分别乘以不同的系数:7;9;10;5;8;4;2;1;6;3;7;9;10;5;8;4;2,将相乘的结果相加,再除以11并求出余数,余数是0-10这11个数字,分别对应身份证的末位:10X98765432,例如 0对应1,3对应X 。

地址码 生日码 顺序码 校验码
510722 19960102 322 9
完整的js代码如下
export function validateIDCardNumber (value) {if (value === null || (value.length !== 15 && value.length !== 18)) { return false }const areasArr = ['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']// 检测省份代码const valueStart2 = value.substr(0, 2)if (areasArr.indexOf(valueStart2) <= -1) { return false }let year = 0let reg = ''// 身份证长度为15位的if (value.length === 15) {year = parseInt(value.substr(6, 2)) + 1900if (year % 4 === 0 || (year % 100 === 0 && year % 4 === 0)) {reg = '^[1-9][0-9]{5}[0-9]{2}((01|03|05|07|08|10|12)(0[1-9]|[1-2][0-9]|3[0-1])|(04|06|09|11)(0[1-9]|[1-2][0-9]|30)|02(0[1-9]|[1-2][0-9]))[0-9]{3}$'} else {reg = '^[1-9][0-9]{5}[0-9]{2}((01|03|05|07|08|10|12)(0[1-9]|[1-2][0-9]|3[0-1])|(04|06|09|11)(0[1-9]|[1-2][0-9]|30)|02(0[1-9]|1[0-9]|2[0-8]))[0-9]{3}$'}let r = value.match(reg)return r !== null}// 身份证长度为18位的if (value.length === 18) {year = parseInt(value.substr(6, 4))if (year % 4 === 0 || (year % 100 === 0 && year % 4 === 0)) {reg = '^((1[1-5])|(2[1-3])|(3[1-7])|(4[1-6])|(5[0-4])|(6[1-5])|71|(8[12])|91)\\d{4}(((19|20)\\d{2}(0[13-9]|1[012])(0[1-9]|[12]\\d|30))|((19|20)\\d{2}(0[13578]|1[02])31)|((19|20)\\d{2}02(0[1-9]|1\\d|2[0-8]))|((19|20)([13579][26]|[2468][048]|0[048])0229))\\d{3}(\\d|X|x)?$'} else {reg = '^((1[1-5])|(2[1-3])|(3[1-7])|(4[1-6])|(5[0-4])|(6[1-5])|71|(8[12])|91)\\d{4}(((19|20)\\d{2}(0[13-9]|1[012])(0[1-9]|[12]\\d|30))|((19|20)\\d{2}(0[13578]|1[02])31)|((19|20)\\d{2}02(0[1-9]|1\\d|2[0-8]))|((19|20)([13579][26]|[2468][048]|0[048])0229))\\d{3}(\\d|X|x)?$'}let r = value.match(reg)if (r === null) {return false} else {let flag = falsefor (let i = 0; i < r.length; i++) {if (r[i] === value) {flag = truebreak}}if (flag === false) {return false}let S = parseInt(value.substr(0, 1)) * 7 + parseInt(value.substr(10, 1)) * 7 + parseInt(value.substr(1, 1)) * 9 +parseInt(value.substr(11, 1)) * 9 + parseInt(value.substr(2, 1)) * 10 + parseInt(value.substr(12, 1)) * 10 +parseInt(value.substr(3, 1)) * 5 + parseInt(value.substr(13, 1)) * 5 + parseInt(value.substr(5, 1)) * 4 +parseInt(value.substr(4, 1)) * 8 + parseInt(value.substr(14, 1)) * 8 + parseInt(value.substr(15, 1)) * 4 +parseInt(value.substr(6, 1)) * 2 + parseInt(value.substr(16, 1)) * 2 + parseInt(value.substr(7, 1)) * 1 +parseInt(value.substr(8, 1)) * 6 + parseInt(value.substr(9, 1)) * 3let Y = S % 11let M = 'F'let JYM = '10X98765432'M = JYM.substr(Y, 1)let lastStr = value.substr(17, 1)if (lastStr === 'x') {return M === 'X'} else {return M === lastStr}}}return false
}

web 前端判断身份证号码是否有效相关推荐

  1. 判断身份证号码的正确性源码

    判断身份证号码的正确性源码 根据[中华人民共和国国家标准   GB   11643-1999]中有关公民身份号码的规定,      '公民身份号码是特征组合码,由十七位数字本体码和一位数字校验码组成. ...

  2. Java判断身份证号码是否正确

    方法如下: public static final int IDENTITYCODE_OLD = 15; // 老身份证15位public static final int IDENTITYCODE_ ...

  3. Java判断身份证号码

    1.描述 用java语言判断身份证号码是否有效,地区码.出身年月.校验码等验证算法 2.源代码 ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 ...

  4. JS准确判断身份证号码

    JS准确判断身份证号码 附带示意图 以及使用方法 //校验年月日专用isDate8(sDate) {if (!/^[0-9]{8}$/.test(sDate)) {return false;}var ...

  5. iOS判断身份证号码是否正确

    ①根据百度百科中身份证号码的标准实现该方法 ②该方法只能判断18位身份证,且不能判断身份证号码和姓名是否对应(要看姓名和号码是否对应,应该有大量的数据库做对比才能实现) ③直接copy这段代码,就能通 ...

  6. 微信小程序 判断身份证号码正确(封装成公共方法并使用)

    1,在utils 文件夹的common.js 中复制粘贴以下代码 // 身份证号码验证 function identityCodeValid(code) {var city = {11: " ...

  7. python基础经典问题-判断身份证号码是否有效

    输入一个身份证号,判断其是否有效: 若不为18位,提示"长度错误": 若前17位不为数字,提示"有无效字符": 最后一位为校验码,若错误,提示"校验码 ...

  8. Python 实现判断身份证号码的有效性

    import redef check_id_card(id_card):errors = ['验证通过!', '身份证号码位数不对!', '身份证号码出生日期超出范围或含有非法字符!', '身份证号码 ...

  9. 前端js身份证号码和手机号码格式验证

    //手机号码验证 function phoneNO(num) {return /^1[3|4|5|6|7|8|9][0-9]\d{8}$/.test(num); return /^(https?|ft ...

最新文章

  1. 大名鼎鼎的Requests库用了什么编码风格?
  2. Spring MVC 环境搭建(一)
  3. [NOIP2012提高组]国王游戏
  4. 用文本指导文本:基于文本的自监督可控文本生成模型
  5. JS事件委托的概念和作用
  6. 安卓学习之路之如何显示一个listview列表视图
  7. 防数据泄密:是否应实施“多重认证”?
  8. 论文解读:ACL2021 NER | 基于模板的BART命名实体识别
  9. VC++如何计算一段代码的执行时间
  10. 自动驾驶的Pipline -- 如何打造自动驾驶的数据闭环?(中)
  11. C/C++ 飞机订票系统
  12. My God,CImage裁剪图片变成黑色了
  13. 算法:凸多边形最优三角剖分
  14. Dinky 0.6.2 已发布,优化 Flink 应用体验
  15. 一文看懂多模态大型语言模型GPT-4
  16. gnuplot 两点画线
  17. 移动硬盘插入笔记本会后,右下角有图标显示,但是我的电脑里面不显示,导致打不开硬盘
  18. 北京市工作居住证官方网站js报错不能使用解决办法
  19. qmake:变量手册
  20. Web大学生网页作业成品 基于HTML+CSS+JavaScript (刘德华9页 )

热门文章

  1. 【车载以太网】【测试】架构及测试工具
  2. BUMO:BU Firework超级节点实时竞选系统
  3. C#如何使用skinEngine控件换肤(更换皮肤)?
  4. 23种设计模式分析(4):结构型模式
  5. 多道批处理系统与分时系统:并发
  6. 海康威视产品的token更新
  7. Seventh5: YAML syntax Ansible Playbook Ansible variables summaries and QQS | Cloud computing
  8. python学习实验报告(第一周)
  9. 宝付国际跨境知识小课堂 | 人民币外汇市场是个啥?
  10. 电脑维护入门 GHOST 使用方法 图解说明