/*
根据〖中华人民共和国国家标准 GB 11643-1999〗中有关公民身份号码的规定,公民身份号码是特征组合码,由十七位数字本体码和一位数字校验码组成。排列顺序从左至右依次为:六位数字地址码,八位数字出生日期码,三位数字顺序码和一位数字校验码。
地址码表示编码对象常住户口所在县(市、旗、区)的行政区划代码。出生日期码表示编码对象出生的年、月、日,其中年份用四位数字表示,年、月、日之间不用分隔符。
顺序码表示同一地址码所标识的区域范围内,对同年、月、日出生的人员编定的顺序号。顺序码的奇数分给男性,偶数分给女性。
校验码是根据前面十七位数字码,按照ISO 7064:1983.MOD 11-2校验码计算出来的检验码。
出生日期计算方法。
15位的身份证编码首先把出生年扩展为4位,简单的就是增加一个19或18,这样就包含了所有1800-1999年出生的人;
2000年后出生的肯定都是18位的了没有这个烦恼,至于1800年前出生的,那啥那时应该还没身份证号这个东东,⊙﹏⊙b汗...
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($){
$.extend({
idCardValidate:function(){
var idcard=‘’; /**身份证号码*/
var num1=‘’; /**前6位*/
var num2=‘’; /**7到14位*/
var num3=‘’;/**18位*/
var paritybit = ['1', '0', 'X', '9', '8', '7', '6', '5', '4', '3', '2']; /**校验位取值*/
var power_list = [7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2]; /**加权因子*/
/**省、直辖市代码*/
var provincesAndCities=['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'];
function validate(id) {
idcard = id.toString().toUpperCase(); /**将末位的x装换成X*/
/**身份证号码为15位或者18位,15位时全为数字,18位前17位为数字,最后一位是校验位,可能为数字或字符X*/
if(!(/(^\d{15}$)|(^\d{17}([0-9]|X)$)/i.test(idcard))){
return ‘身份证号格式错误’;
}
/**15位转18位*/
if(15 == idcard.length){
idcard = fifteenToEighteen(idcard);
}
num1 = idcard.substr(0,6);
num2 = idcard.substr(6,8);
num3 = idcard.charAt(17);
/**验证6位地址码(前6位)*/
if(!locationValidation()){
return ‘地址码有误’;
}
/**验证8位生日数字(7到14位)*/
if(!birthdayValidation()) {
return ‘出生日期有误’;
}
/**验证1位校验码(18位)*/
if(!checkcodeValidation(idcard)) {
return ‘校验码有误’;
}
return ‘’;
}
function fifteenToEighteen(id)
{
var s = 0;
var newid = id;
newid =newid.substring(0,6)+'19'+newid.substring(6,id.length);
for (var i=0;i< newid.length;i++ ){
var j= parseInt(newid.substring(i,i+1))*power_list[i];
s=s+j;
}
newid=newid+paritybit[s%11];
return newid;
}
/**验证6位地址码(前6位)*/
function locationValidation(){
var flag = false;
var pro = num1.substr(0,2); /**省、直辖市代码*/
for(var v=0;v<provincesAndCities.length;v++){
if(pro == provincesAndCities[v]){
flag = true;
}
}
return flag;
}
/**验证8位生日数字(7到14位)*/
function birthdayValidation()
{
var flag = true;
var year = num2.substr(0,4);
var month = num2.substr(4,2);
var day = num2.substr(6,2);
var birthday = year+'-'+month+'-'+day;
var date = new Date(year,parseInt(month)-1,day);
/**大于等于当前日期 或 小于1900年1月1日*/
if(date >= new Date() || date <= Date(1900,0,1))
flag = false;
var dd = date.Format( 'yyyy-MM-dd');
if(dd!=birthday)
flag = false;
return flag;
}
/**验证1位校验码(18位)*/
function checkcodeValidation(idcard)
{
var flag = true;
var s = 0;
var ai = 0;
var wi = 0;
for (var i=0;iidcard.length-1;i++ ) {
ai = parseInt(idcard[i]);
wi = power_list[i];
s+=ai*wi;
}
if(paritybit[s % 11] != idcard[17]){
flag = false;
}
return flag;
}
Date.prototype.Format = function (fmt) { //author: meizz
var o = {
'M+': this.getMonth() + 1, //月份
'd+': this.getDate(), //日
'h+': this.getHours(), //小时
'm+': this.getMinutes(), //分
's+': this.getSeconds(), //秒
'q+': Math.floor((this.getMonth() + 3) / 3), //季度
'S': this.getMilliseconds() //毫秒
};
if (/(y+)/.test(fmt)){
fmt = fmt.replace(RegExp.$1, (this.getFullYear() +'').substr(4 - RegExp.$1.length));
}
for (var k in o){
if (new RegExp('(' + k + ')').test(fmt)){
fmt = fmt.replace(RegExp.$1, (RegExp.$1.length == 1) ? (o[k]) : (('00' + o[k]).substr((''+ o[k]).length)));
}
}
return fmt;
};
return {idvalidate:validate};
}
});
})(jQuery);
var c = '130981199312253466';
$.idCardValidate().idvalidate(c)
相关推荐
新中新第二代身份证验证系统结构紧凑、操作简便,可广泛应用于公安、民政、银行、宾馆、民航、邮局、证券、超市、网吧等部门或行业的窗口、柜台。新中新第二代身份证阅读器随机软件功能齐全、界面简洁美观、操作简便...
在IT行业中,身份证验证器是一种常见的实用工具,主要用于验证个人身份证号码的合法性,并根据有效身份证号码解析出对应的身份信息,如出生日期、性别以及户籍所在地等。本项目以C#编程语言实现,提供了用户友好的...
这份《sdtapi.dll居民身份证验证安全控制模块接口API使用手册》详细介绍了如何使用广东东信智能科技有限公司提供的居民身份证验证安全控制模块接口API,版本号为*.*.*.*。以下是从手册内容中提炼出的IT知识点。 ###...
本文将深入探讨如何使用JavaScript进行身份证验证,包括有效性检查和区域信息识别。 身份证验证是确保用户输入的有效身份证号码的关键步骤,这对于很多需要用户身份验证的场景非常重要,如注册、实名认证等。在中国...
本项目"身份证验证器.zip"是一个基于C#编程语言开发的身份信息验证工具,它旨在帮助开发者快速实现对中国大陆居民身份证号码的合法性和真实性的检查。下面我们将详细探讨这个工具的相关知识点。 1. **C#编程语言**:...
神思二代身份证验证机具接口函数说明
将神思第二代身份证验证机具连接到计算机。 SS628(100)型是RS232(串行)通讯方式。随机附带的通讯线一端是Mini-B型 接口,另一端是RS232的DB9接口,并且附带了一个USB接口,用于从计算机的USB接 口给验证机具...
神思二代身份证验证机具接口控件说明.pdf
根据提供的信息,我们可以详细解析与C#中国身份证验证相关的知识点,包括省份验证和校验码验证,确保符合GB11643-1999标准。 ### 一、身份证号码结构 中国的身份证号码有两种格式:15位和18位。 #### 15位身份证...
GA 467-2013居民身份证验证安全控制模块接口技术规范,清晰扫描版,行业标准。 GA 467-2013居民身份证验证安全控制模块接口技术规范,清晰扫描版,行业标准。
【身份证验证器】是一款用于身份证真伪查询的软件工具,主要功能是帮助用户验证中国居民身份证的合法性。在日常生活中,我们可能需要确认个人身份信息的真实性,例如在租房、招聘、网络交易等场合,该工具就能派上...
根据给定的文件信息,我们可以总结出以下关于C#中身份证验证的知识点: ### C#身份证验证算法解析 #### 身份证结构 身份证号码在中国分为两种格式:15位和18位。 - **15位身份证**:由6位地区码、6位出生日期...
身份证验证,正则表达式的应用,除了有出生年月日验证,还有校验码的验证,省份的验证
通过对上述代码的理解,我们可以看出,这是一个简单的身份证验证函数的实现。在实际项目中,还需要进一步完善校验码的计算逻辑,并且考虑到各种特殊情况,如旧版身份证号码等。此外,由于涉及敏感信息处理,还需注意...
java身份证验证程序--可以用来做实验用
JS身份证验证(最全),包括15位和18位,算法判断最后一位。我在几个项目中都用的这个,在此共享给大家
在IT行业中,身份证验证是常见的身份验证手段,尤其是在开发涉及个人信息的系统时,如会员注册、实名认证等。在Java Web开发中,使用JSP(JavaServer Pages)结合Java后端逻辑,我们可以实现对身份证合法性的有效...
### 正则表达式 JS 身份证验证详解 身份证号码在中国大陆地区具有唯一性,是个人身份的重要标识。为了确保信息安全和个人隐私保护,在很多应用系统中都需要对身份证号码进行合法性和格式性的验证。本文将详细阐述...
这个压缩包中的"身份证验证程序.html"文件是一个使用JavaScript编写的HTML页面,它用于验证输入的身份证号码是否合法。以下是对这个知识点的详细阐述: 1. **HTML(超文本标记语言)**:HTML是构建网页的基础,它...
身份证验证在IT行业中是一项基础但重要的任务,尤其是在涉及到个人信息安全和身份识别的系统中。17位身份证(在大陆通常指的是第二代居民身份证)是中国公民的主要身份证明,它包含了持证人的出生日期、性别以及地区...