身份证件号码有效性校验
根据〖中华人民共和国国家标准 GB 11643-1999〗中有关公民身份号码的规定,公民身份号码是特征组合码,由十七位数字本体码和一位数字校验码组成。排列顺序从左至右依次为:六位数字地址码,八位数字出生日期码,三位数字顺序码和一位数字校验码。
地址码表示编码对象常住户口所在县(市、旗、区)的行政区划代码。
出生日期码表示编码对象出生的年、月、日,其中年份用四位数字表示,年、月、日之间不用分隔符。
顺序码表示同一地址码所标识的区域范围内,对同年、月、日出生的人员编定的顺序号。顺序码的奇数分给男性,偶数分给女性。
校验码是根据前面十七位数字码,按照ISO 7064:1983.MOD 11-2校验码计算出来的检验码。
出生日期计算方法。
15位的身份证编码首先把出生年扩展为4位,简单的就是增加一个19或18,这样就包含了所有1800-1999年出生的人;
2000年后出生的肯定都是18位的了没有这个烦恼,至于1800年前出生的,那啥那时应该还没身份证号这个东东,⊙﹏⊙b汗...
下面是正则表达式:
出生日期1800-2099 (18|19|20)?\d{2}(0[1-9]|1[12])(0[1-9]|[12]\d|3[01])
身份证正则表达式 /^\d{6}(18|19|20)?\d{2}(0[1-9]|1[012])(0[1-9]|[12]\d|3[01])\d{3}(\d|X)$/i
15位校验规则 6位地址编码+6位出生日期+3位顺序号
18位校验规则 6位地址编码+8位出生日期+3位顺序号+1位校验位
校验位规则 公式:∑(ai×Wi)(mod 11)……………………………………(1)
公式(1)中:
i----表示号码字符从由至左包括校验码在内的位置序号;
ai----表示第i位置上的号码字符值;
Wi----示第i位置上的加权因子,其数值依据公式Wi=2^(n-1)(mod 11)计算得出。
i 18 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1
Wi 7 9 10 5 8 4 2 1 6 3 7 9 10 5 8 4 2 1
function IdentityCodeValid (code) {var 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: "国外 " };var tip = "";var pass = true;if (!code || !/^\d{6}(18|19|20)?\d{2}(0[1-9]|1[012])(0[1-9]|[12]\d|3[01])\d{3}(\d|X)$/i.test(code)) {tip = "身份证号格式错误";pass = false;}else if (!city[code.substr(0, 2)]) {tip = "地址编码错误";pass = false;}else {//18位身份证需要验证最后一位校验位if (code.length == 18) {code = code.split('');//∑(ai×Wi)(mod 11)//加权因子var factor = [7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2];//校验位var parity = [1, 0, 'X', 9, 8, 7, 6, 5, 4, 3, 2];var sum = 0;var ai = 0;var wi = 0;for (var i = 0; i < 17; i++) {ai = code[i];wi = factor[i];sum += ai * wi;}var last = parity[sum % 11];if (parity[sum % 11] != code[17]) {tip = "校验位错误";pass = false;}}}if (!pass) alert(tip);return pass;}
身份证件号码有效性校验相关推荐
- MATLAB身份证件号码定位识别
题目:MATLAB身份证件号码定位识别 程序代码 %身份证识别程序.识别身份证上面的身份证号码,并且单独提取出来,形成一副仅剩身份证号码的二值区域图像 clc; clear all; close al ...
- vue+element 身份证号码以及有效性校验 适用 15位 或18位
data () {let idCardValidity = (rule, code, callback) => {var city = { 11: "北京", 12: &qu ...
- 常用的手机号,身份号正则校验
常用的手机号,身份号正则校验 手机号的正则校验: let tel = 12345678901; /^1[34578]\d{9}$/.test(tel): 返回值为true和false: functio ...
- python3实现身份证有效性校验
python3 实现身份证有效性校验 直接上代码 # --coding:utf-8-- W = [7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2 ...
- 【python】身份证号码有效性校验
1. 前言 中华人民共和国国家标准GB 11643-1999<公民身份号码>中规定:公民身份号码是特征组合码,由17位数字本体码和1位校验码组成. 18位数字组合的方式是: 其中,最后一位 ...
- c#代码实现GPS数据的有效性校验
用于校验GPS报文指令的有效性 很简单的代码,留存吧 public static bool Verify(string gpsInfo) { if (gpsIn ...
- rust之poem框架实践系列(一)grpc
本文将通过poem框架所提供的grpc功能来实现一个简单token provider服务 goem介绍 poem 是一个功能齐全且易于使用的 Web 框架,采用 Rust 编程语言. (git源码地址 ...
- Java 银行卡和身份证号根据校验位验证是否合法
1.银行卡号码的校验 /** * 校验银行卡卡号 * @param cardId * @return */ public static boolean checkBankCard(String car ...
- 二代身份证编码规则及校验代码实现
本文主要讨论的是二代身份证编码规则及其Java代码实现,下面的校验方式还不是特别严谨,由于只校验了前两位的省份信息,中间六位的出生日期信息和最后一位的校验码信息,故对于部分不满足要求的证件号码刚好同时 ...
- 任意用户密码重置(四):重置凭证未校验
在逻辑漏洞中,任意用户密码重置最为常见,可能出现在新用户注册页面,也可能是用户登录后重置密码的页面,或者用户忘记密码时的密码找回页面,其中,密码找回功能是重灾区.我把日常渗透过程中遇到的案例作了漏洞成 ...
最新文章
- ❤️手撕这十道HiveSQL题还不能吊打面试官,却能保你不被吊打❤️【推荐收藏】
- (七)渐变 矩形渐变 放射渐变
- Spring松耦合的实现
- 转:UNITY,如何为你的游戏选择正确的网络类型
- Matlab循环读取txt文件并对其中数据进行计算最后导出为excel
- 调度算法为何被阿里如此重视?
- Mybatis select元素返回List
- 分布式缓存应用(转载的)
- laravel安装laravel-ide-helper扩展进行代码提示(二)
- 全自动采集新闻站源码-单站自动采集新闻源码(seo标题伪原创)
- PTA5-53 两个有序序列的中位数
- 【JQuery】数据
- 程序员打产品经理事件:做不了的事情,直接推给主管
- Ragel-基于有限状态机用于产生源码的编译器
- react+ts+gulpjs将插件转成umd.js文件
- 怎么读取cf卡id_simotion读写CF卡,保存/读取变量
- 离线浏览工具webdup 可下载网站页面
- How to Become a Straight-A student
- 学生来看我,我自我满足...........
- 12-Web安全—基于SQL Server的报错注入——and,conver,cast