//
检验身份证信息
function CheckID(id)
{
var idNum = id;
// alert(idNum);
var errors = new Array
(
" 验证通过 " ,
" 身份证号码位数不对 " ,
" 身份证含有非法字符 " ,
" 身份证号码校验错误 " ,
" 身份证地区非法 "
);
// 身份号码位数及格式检验
var re;
var len = idNum.length;
// 身份证位数检验
if (len != 15 && len != 18 )
{
return errors[ 1 ];
}
else if (len == 15 )
{
re = new RegExp( /^ (d{ 6 })() ? (d{ 2 })(d{ 2 })(d{ 2 })(d{ 3 })$ / );
}
else
{
re = new RegExp( /^ (d{ 6 })() ? (d{ 4 })(d{ 2 })(d{ 2 })(d{ 3 })([ 0 - 9xX])$ / );
}
var area = { 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 idcard_array = new Array();
idcard_array = idNum.split( "" );
// 地区检验
if (area[parseInt(idNum.substr( 0 , 2 ))] == null )
{
return errors[ 4 ];
}
// 出生日期正确性检验
var a = idNum.match(re);
if (a != null )
{
if (len == 15 )
{
var DD = new Date( " 19 " + a[ 3 ] + " / " + a[ 4 ] + " / " + a[ 5 ]);
var flag = DD.getYear() == a[ 3 ] && (DD.getMonth() + 1 ) == a[ 4 ] && DD.getDate() == a[ 5 ];
}
else if (len == 18 )
{
var DD = new Date(a[ 3 ] + " / " + a[ 4 ] + " / " + a[ 5 ]);
var flag = DD.getFullYear() == a[ 3 ] && (DD.getMonth() + 1 ) == a[ 4 ] && DD.getDate() == a[ 5 ];
}
if ( ! flag)
{
return " 身份证出生日期不对! " ;
}
// 检验校验位
if (len == 18 )
{
S = (parseInt(idcard_array[ 0 ]) + parseInt(idcard_array[ 10 ])) * 7
+ (parseInt(idcard_array[ 1 ]) + parseInt(idcard_array[ 11 ])) * 9
+ (parseInt(idcard_array[ 2 ]) + parseInt(idcard_array[ 12 ])) * 10
+ (parseInt(idcard_array[ 3 ]) + parseInt(idcard_array[ 13 ])) * 5
+ (parseInt(idcard_array[ 4 ]) + parseInt(idcard_array[ 14 ])) * 8
+ (parseInt(idcard_array[ 5 ]) + parseInt(idcard_array[ 15 ])) * 4
+ (parseInt(idcard_array[ 6 ]) + parseInt(idcard_array[ 16 ])) * 2
+ parseInt(idcard_array[ 7 ]) * 1
+ parseInt(idcard_array[ 8 ]) * 6
+ parseInt(idcard_array[ 9 ]) * 3 ;
Y = S % 11 ;
M = " F " ;
JYM = " 10X98765432 " ;
M = JYM.substr(Y, 1 ); // 判断校验位
// 检测ID的校验位
if (M == idcard_array[ 17 ].toUpperCase())
{
return "" ;
}
else
{
return errors[ 3 ];
}
}
}
else
{
return errors[ 2 ];
}
return "" ;
}
// 得到生日和性别
function ShowBirthday(val,birthdayID,sexID)
{
var idCard = CheckID(val);
if (idCard != "" )
{
alert(idCard);
return false ;
}
var birthdayValue;
var sexValue;
// 15位身份证号码
if ( 15 == val.length)
{
birthdayValue = val.charAt( 6 ) + val.charAt( 7 );
if (parseInt(birthdayValue) < 10 )
{
birthdayValue = ' 20 ' + birthdayValue;
}
else
{
birthdayValue = ' 19 ' + birthdayValue;
}
birthdayValue = birthdayValue.toString() + ' - ' + val.charAt( 8 ) + val.charAt( 9 ) + ' - ' + val.charAt( 10 ) + val.charAt( 11 );
if (parseInt(val.charAt( 14 ) / 2 ) * 2 != val.charAt( 14 ))
sexValue = ' 男 ' ;
else
sexValue = ' 女 ' ;
}
// 18位身份证号码
if ( 18 == val.length)
{
birthdayValue = val.charAt( 6 ) + val.charAt( 7 ) + val.charAt( 8 ) + val.charAt( 9 ) + ' - ' + val.charAt( 10 ) + val.charAt( 11 ) + ' - ' + val.charAt( 12 ) + val.charAt( 13 );
if (parseInt(val.charAt( 16 ) / 2 ) * 2 != val.charAt( 16 ))
sexValue = ' 男 ' ;
else
sexValue = ' 女 ' ;
}
if (document.all[birthdayID] != undefined)
document.all[birthdayID].value = birthdayValue;
if (document.all[sexID] != undefined)
document.all[sexID].value = sexValue;
return true ;
}
// 去掉字符串的空格
// Trim() , Ltrim() , RTrim()
String.prototype.Trim = function ()
{
return this .replace( / ( ^ s * ) | (s * $) / g, "" );
}
String.prototype.LTrim = function ()
{
return this .replace( / ( ^ s * ) / g, "" );
}
String.prototype.RTrim = function ()
{
return this .replace( / (s * $) / g, "" );
}
function CheckID(id)
{
var idNum = id;
// alert(idNum);
var errors = new Array
(
" 验证通过 " ,
" 身份证号码位数不对 " ,
" 身份证含有非法字符 " ,
" 身份证号码校验错误 " ,
" 身份证地区非法 "
);
// 身份号码位数及格式检验
var re;
var len = idNum.length;
// 身份证位数检验
if (len != 15 && len != 18 )
{
return errors[ 1 ];
}
else if (len == 15 )
{
re = new RegExp( /^ (d{ 6 })() ? (d{ 2 })(d{ 2 })(d{ 2 })(d{ 3 })$ / );
}
else
{
re = new RegExp( /^ (d{ 6 })() ? (d{ 4 })(d{ 2 })(d{ 2 })(d{ 3 })([ 0 - 9xX])$ / );
}
var area = { 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 idcard_array = new Array();
idcard_array = idNum.split( "" );
// 地区检验
if (area[parseInt(idNum.substr( 0 , 2 ))] == null )
{
return errors[ 4 ];
}
// 出生日期正确性检验
var a = idNum.match(re);
if (a != null )
{
if (len == 15 )
{
var DD = new Date( " 19 " + a[ 3 ] + " / " + a[ 4 ] + " / " + a[ 5 ]);
var flag = DD.getYear() == a[ 3 ] && (DD.getMonth() + 1 ) == a[ 4 ] && DD.getDate() == a[ 5 ];
}
else if (len == 18 )
{
var DD = new Date(a[ 3 ] + " / " + a[ 4 ] + " / " + a[ 5 ]);
var flag = DD.getFullYear() == a[ 3 ] && (DD.getMonth() + 1 ) == a[ 4 ] && DD.getDate() == a[ 5 ];
}
if ( ! flag)
{
return " 身份证出生日期不对! " ;
}
// 检验校验位
if (len == 18 )
{
S = (parseInt(idcard_array[ 0 ]) + parseInt(idcard_array[ 10 ])) * 7
+ (parseInt(idcard_array[ 1 ]) + parseInt(idcard_array[ 11 ])) * 9
+ (parseInt(idcard_array[ 2 ]) + parseInt(idcard_array[ 12 ])) * 10
+ (parseInt(idcard_array[ 3 ]) + parseInt(idcard_array[ 13 ])) * 5
+ (parseInt(idcard_array[ 4 ]) + parseInt(idcard_array[ 14 ])) * 8
+ (parseInt(idcard_array[ 5 ]) + parseInt(idcard_array[ 15 ])) * 4
+ (parseInt(idcard_array[ 6 ]) + parseInt(idcard_array[ 16 ])) * 2
+ parseInt(idcard_array[ 7 ]) * 1
+ parseInt(idcard_array[ 8 ]) * 6
+ parseInt(idcard_array[ 9 ]) * 3 ;
Y = S % 11 ;
M = " F " ;
JYM = " 10X98765432 " ;
M = JYM.substr(Y, 1 ); // 判断校验位
// 检测ID的校验位
if (M == idcard_array[ 17 ].toUpperCase())
{
return "" ;
}
else
{
return errors[ 3 ];
}
}
}
else
{
return errors[ 2 ];
}
return "" ;
}
// 得到生日和性别
function ShowBirthday(val,birthdayID,sexID)
{
var idCard = CheckID(val);
if (idCard != "" )
{
alert(idCard);
return false ;
}
var birthdayValue;
var sexValue;
// 15位身份证号码
if ( 15 == val.length)
{
birthdayValue = val.charAt( 6 ) + val.charAt( 7 );
if (parseInt(birthdayValue) < 10 )
{
birthdayValue = ' 20 ' + birthdayValue;
}
else
{
birthdayValue = ' 19 ' + birthdayValue;
}
birthdayValue = birthdayValue.toString() + ' - ' + val.charAt( 8 ) + val.charAt( 9 ) + ' - ' + val.charAt( 10 ) + val.charAt( 11 );
if (parseInt(val.charAt( 14 ) / 2 ) * 2 != val.charAt( 14 ))
sexValue = ' 男 ' ;
else
sexValue = ' 女 ' ;
}
// 18位身份证号码
if ( 18 == val.length)
{
birthdayValue = val.charAt( 6 ) + val.charAt( 7 ) + val.charAt( 8 ) + val.charAt( 9 ) + ' - ' + val.charAt( 10 ) + val.charAt( 11 ) + ' - ' + val.charAt( 12 ) + val.charAt( 13 );
if (parseInt(val.charAt( 16 ) / 2 ) * 2 != val.charAt( 16 ))
sexValue = ' 男 ' ;
else
sexValue = ' 女 ' ;
}
if (document.all[birthdayID] != undefined)
document.all[birthdayID].value = birthdayValue;
if (document.all[sexID] != undefined)
document.all[sexID].value = sexValue;
return true ;
}
// 去掉字符串的空格
// Trim() , Ltrim() , RTrim()
String.prototype.Trim = function ()
{
return this .replace( / ( ^ s * ) | (s * $) / g, "" );
}
String.prototype.LTrim = function ()
{
return this .replace( / ( ^ s * ) / g, "" );
}
String.prototype.RTrim = function ()
{
return this .replace( / (s * $) / g, "" );
}
本文介绍了一个用于验证中国身份证号码有效性的JavaScript函数,并展示了如何从合法的身份证号码中提取出生日期和性别信息。

被折叠的 条评论
为什么被折叠?



