/**
*?身份證15位編碼規(guī)則:dddddd?yymmdd?xx?p
*?dddddd:地區(qū)碼
*?yymmdd:?出生年月日
*?xx:?順序類編碼厌衔,無法確定
*?p:?性別,奇數(shù)為男捍岳,偶數(shù)為女
*?
*?身份證18位編碼規(guī)則:dddddd?yyyymmdd?xxx?y
*?dddddd:地區(qū)碼
*?yyyymmdd:?出生年月日
*?xxx:順序類編碼富寿,無法確定,奇數(shù)為男锣夹,偶數(shù)為女
*?y:?校驗碼作喘,該位數(shù)值可通過前17位計算獲得
*?
*?18位號碼加權(quán)因子為(從右到左)?wi?=?[?7,?9,?10,?5,?8,?4,?2,?1,?6,?3,?7,?9,?10,?5,?8,?4,?2,1?]
*?驗證位?Y?=?[?1,?0,?10,?9,?8,?7,?6,?5,?4,?3,?2?]
*?校驗位計算公式:Y_P?=?mod(?∑(Ai×wi),11?)
*?i為身份證號碼從右往左數(shù)的?2...18?位;?Y_P為校驗碼所在校驗碼數(shù)組位置
*
*/
//?加權(quán)因子
varwi?=?[7,?9,?10,?5,?8,?4,?2,?1,?6,?3,?7,?9,?10,?5,?8,?4,?2,?1];
//?身份證驗證位值.10代表X
varvalideCodeArr?=?[1,?0,?10,?9,?8,?7,?6,?5,?4,?3,?2];
//?區(qū)域ID
varareaMap?=?{11:"北京",12:"天津",13:"河北",14:"山西",15:"內(nèi)蒙古",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:"國外"};
//?男女ID
varsexMap?=?{0:"女",1:"男"};
//錯誤信息
varstatus?=newArray("true","身份證號碼位數(shù)不對!","身份證號碼出生日期超出范圍或含有非法字符!","身份證號碼校驗錯誤!","身份證地區(qū)非法!");
/**
*?驗證ID,正確返回“true”晕城,錯誤則返回錯誤信息
*?@param?{Object}?idCard
*/
functioncheckIdCard(idCard){
//去掉首尾空格
idCard?=?trim(idCard.replace(/?/g,""));
if(idCard.length?==?15||idCard.length?==?18)?{
if(!checkArea(idCard))?{
returnstatus[4];
}elseif(!checkBrith(idCard)){
returnstatus[2];
}elseif(idCard.length?==?18?&&?!check18Code(idCard)){
returnstatus[3];
}else{
returnstatus[0];
}
}else{
//不是15或者18泞坦,位數(shù)不對
returnstatus[1];
}
}
/**
*?顯示解析出的信息
*?@param?{Object}?idCard?正確的ID號
*?@param?{Object}?sexId?性別要顯示的Input的id
*?@param?{Object}?birthId?生日要顯示的Input的id
*?@param?{Object}?areaId?地區(qū)要顯示的Input的id
*/
functionshowIDInfo(idCard,areaId,sexId,?birthId){
//?對身份證號碼做處理。包括字符間有空格砖顷。
idCard?=?trim(idCard.replace(/?/g,""));
//?性別
$("#"+sexId).val(getSex(idCard));
//?地區(qū)
$("#"+areaId).val(getArea(idCard));
//生日
$("#"+birthId).val(getBirthday(idCard));
}
/**
*?得到地區(qū)碼代表的地區(qū)
*?@param?{Object}?idCard?正確的15/18位身份證號碼
*/
functiongetArea(idCard){
returnareaMap[parseInt(idCard.substr(0,?2))];
}
/**
*?通過身份證得到性別
*?@param?idCard?正確的15/18位身份證號碼
*?@return?女贰锁、男
*/
functiongetSex(idCard){
if(idCard.length?==?15)?{
returnsexMap[idCard.substring(14,?15)?%?2];
}elseif(idCard.length?==?18)?{
returnsexMap[idCard.substring(14,?17)?%?2];
}else{
//不是15或者18,null
returnnull;
}
}
/**
*?得到生日"yyyy-mm-dd"
*?@param?{Object}?idCard?正確的15/18位身份證號碼
*/
functiongetBirthday(idCard){
varbirthdayStr;
if(15?==?idCard.length)?{
birthdayStr?=?idCard.charAt(6)?+?idCard.charAt(7);
if(parseInt(birthdayStr)?<?10)?{
birthdayStr?='20'+?birthdayStr;
}else{
birthdayStr?='19'+?birthdayStr;
}
birthdayStr?=?birthdayStr?+'-'+?idCard.charAt(8)?+?idCard.charAt(9)?+'-'+?idCard.charAt(10)?+?idCard.charAt(11);
}elseif(18?==?idCard.length)?{
birthdayStr?=?idCard.charAt(6)?+?idCard.charAt(7)?+?idCard.charAt(8)?+?idCard.charAt(9)?+'-'+?idCard.charAt(10)?+?idCard.charAt(11)?+'-'+?idCard.charAt(12)?+?idCard.charAt(13);
}
returnbirthdayStr;
}
/**
*?驗證身份證的地區(qū)碼
*?@param?{Object}?idCard?身份證字符串
*/
functioncheckArea(idCard){
if(areaMap[parseInt(idCard.substr(0,?2))]?==null){
returnfalse;
}else{
returntrue;
}
}
/**
*?驗證身份證號碼中的生日是否是有效生日
*?@param?idCard?身份證字符串
*?@return
*/
functioncheckBrith(idCard){
varresult?=true;
if(15?==?idCard.length)?{
varyear?=?idCard.substring(6,?8);
varmonth?=?idCard.substring(8,?10);
varday?=?idCard.substring(10,?12);
vartemp_date?=newDate(year,?parseFloat(month)?-?1,?parseFloat(day));
//?對于老身份證中的你年齡則不需考慮千年蟲問題而使用getYear()方法
if(temp_date.getYear()?!=?parseFloat(year)?||?temp_date.getMonth()?!=?parseFloat(month)?-?1?||?temp_date.getDate()?!=?parseFloat(day))?{
result?=false;
}
}elseif(18?==?idCard.length)?{
varyear?=?idCard.substring(6,?10);
varmonth?=?idCard.substring(10,?12);
varday?=?idCard.substring(12,?14);
vartemp_date?=newDate(year,?parseFloat(month)?-?1,?parseFloat(day));
//?這里用getFullYear()獲取年份,避免千年蟲問題
if(temp_date.getFullYear()?!=?parseFloat(year)?||?temp_date.getMonth()?!=?parseFloat(month)?-?1?||?temp_date.getDate()?!=?parseFloat(day))?{
result?=false;
}
}else{
result?=false;
}
returnresult;
}
/**
*?判斷身份證號碼為18位時最后的驗證位是否正確
*?@param?idCardArr?身份證號碼數(shù)組
*?@return
*/
functioncheck18Code(idCardArr){
varsum?=?0;//?聲明加權(quán)求和變量
if(idCardArr[17].toLowerCase()?=='x')?{
idCardArr[17]?=?10;//?將最后位為x的驗證碼替換為10方便后續(xù)操作
}
for(vari?=?0;?i?<?17;?i++)?{
sum?+=?wi[i]?*?idCardArr[i];//?加權(quán)求和
}
varvalCodePosition?=?sum?%?11;//?得到驗證碼所位置
if(idCardArr[17]?==?valideCodeArr[valCodePosition])?{
returntrue;
}else{
returnfalse;
}
}
//去掉字符串頭尾空格
functiontrim(str){
returnstr.replace(/(^\s*)|(\s*$)/g,"");
}
==================== 下面是頁面代碼 =====================
[html]view plaincopy
CordBirthday
function?validite(){
varid=?$("#idCard").val();
varresultstr=checkIdCard(id);
if?(resultstr==?"true")?{
showIDInfo(id,"area"?,"sex",?"birthday");
}?else?{
$('#sex').val("");
$('#birthday').val("");
$('#area').val("");
alert(resultstr);
}
}
身份證
地區(qū)
性別
生日