/*
根据〖中华人民共和国国家标准 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)
相关推荐
新中新第二代身份证验证系统结构紧凑、操作简便,可广泛应用于公安、民政、银行、宾馆、民航、邮局、证券、超市、网吧等部门或行业的窗口、柜台。新中新第二代身份证阅读器随机软件功能齐全、界面简洁美观、操作简便...
sdtapi.dll居民身份证验证安全控制模块接口 API 使用手册
将神思第二代身份证验证机具连接到计算机。 SS628(100)型是RS232(串行)通讯方式。随机附带的通讯线一端是Mini-B型 接口,另一端是RS232的DB9接口,并且附带了一个USB接口,用于从计算机的USB接 口给验证机具...
神思二代身份证验证机具接口函数说明
输入您的省份证号,可以判断身份证的正确性,如果身份证正确,可以解析出身份证所在地址。
C#身份证验证.txtC#身份证验证.txtC#身份证验证.txt
身份证验证,正则表达式的应用,除了有出生年月日验证,还有校验码的验证,省份的验证
C#中国身份证验证,包括省份验证和校验码验证,符合GB11643-1999标准
java身份证验证程序--可以用来做实验用
学习C#身份证验证的代码的笔记总结,仅供参考
JS身份证验证(最全),包括15位和18位,算法判断最后一位。我在几个项目中都用的这个,在此共享给大家
GA 467-2013居民身份证验证安全控制模块接口技术规范,清晰扫描版,行业标准。 GA 467-2013居民身份证验证安全控制模块接口技术规范,清晰扫描版,行业标准。
正则表达式 JS 身份证验证 正则表达式 JS 身份证验证 正则表达式 JS 身份证验证
关于身份证验证的工具类,身份证号码验证 1、号码的结构 公民身份号码是特征组合码,由十七位数字本体码和一位校验码组成。排列顺序从左至右依次为:六位数字地址码 八位数字出生日期码,三位数字顺序码和一位数字...
GA-T 467-2019最新国标
最新js算法,验证身份证有效性、区域等(含减肥版)
用于注册时验证身份证是否正确 可以支持验证真伪 根据验证省份
身份证验证(仅限十八位),包含位数,生日,地区,
js日期验证和身份证验证 两个函数 身份证验证了生日,性别,位数 支持15和18位的
身份证验证在很多小程序中已经成为必不可少的一部分,它能有效的判断出身份证是否存在,是否输入错误,以防不良人士恶意攻击。 判断一个身份证是否合法的身份证号码有以下几个步骤需要验证 ①:身份证18位数 ②:前...