使用JS 校驗15或18位身份證的合法性以及得到所屬地區(qū),出生日期圃阳,性別

/**

*?身份證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ū)

性別

生日

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末滤蝠,一起剝皮案震驚了整個濱河市豌熄,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌物咳,老刑警劉巖锣险,帶你破解...
    沈念sama閱讀 217,185評論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異览闰,居然都是意外死亡芯肤,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,652評論 3 393
  • 文/潘曉璐 我一進店門压鉴,熙熙樓的掌柜王于貴愁眉苦臉地迎上來崖咨,“玉大人,你說我怎么就攤上這事油吭』鞫祝” “怎么了署拟?”我有些...
    開封第一講書人閱讀 163,524評論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長歌豺。 經(jīng)常有香客問我推穷,道長,這世上最難降的妖魔是什么类咧? 我笑而不...
    開封第一講書人閱讀 58,339評論 1 293
  • 正文 為了忘掉前任馒铃,我火速辦了婚禮,結(jié)果婚禮上轮听,老公的妹妹穿的比我還像新娘。我一直安慰自己岭佳,他們只是感情好血巍,可當(dāng)我...
    茶點故事閱讀 67,387評論 6 391
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著珊随,像睡著了一般述寡。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上叶洞,一...
    開封第一講書人閱讀 51,287評論 1 301
  • 那天鲫凶,我揣著相機與錄音,去河邊找鬼衩辟。 笑死螟炫,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的艺晴。 我是一名探鬼主播昼钻,決...
    沈念sama閱讀 40,130評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼封寞!你這毒婦竟也來了然评?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 38,985評論 0 275
  • 序言:老撾萬榮一對情侶失蹤狈究,失蹤者是張志新(化名)和其女友劉穎碗淌,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體抖锥,經(jīng)...
    沈念sama閱讀 45,420評論 1 313
  • 正文 獨居荒郊野嶺守林人離奇死亡亿眠,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,617評論 3 334
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了磅废。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片缕探。...
    茶點故事閱讀 39,779評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖还蹲,靈堂內(nèi)的尸體忽然破棺而出爹耗,到底是詐尸還是另有隱情耙考,我是刑警寧澤,帶...
    沈念sama閱讀 35,477評論 5 345
  • 正文 年R本政府宣布潭兽,位于F島的核電站倦始,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏山卦。R本人自食惡果不足惜鞋邑,卻給世界環(huán)境...
    茶點故事閱讀 41,088評論 3 328
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望账蓉。 院中可真熱鬧枚碗,春花似錦、人聲如沸铸本。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,716評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽箱玷。三九已至怨规,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間锡足,已是汗流浹背波丰。 一陣腳步聲響...
    開封第一講書人閱讀 32,857評論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留舶得,地道東北人掰烟。 一個月前我還...
    沈念sama閱讀 47,876評論 2 370
  • 正文 我出身青樓,卻偏偏與公主長得像沐批,于是被迫代替她去往敵國和親媚赖。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,700評論 2 354

推薦閱讀更多精彩內(nèi)容

  • 背景 一年多以前我在知乎上答了有關(guān)LeetCode的問題, 分享了一些自己做題目的經(jīng)驗珠插。 張土汪:刷leetcod...
    土汪閱讀 12,744評論 0 33
  • 一惧磺、 1、請用Java寫一個冒泡排序方法 【參考答案】 public static void Bubble(int...
    獨云閱讀 1,369評論 0 6
  • var regexEnum = { intege : "^-?[1-9]\\d*$", // 整數(shù) intege1...
    nick2046閱讀 308評論 0 2
  • var regexEnum = { intege : "^-?[1-9]\\d*$", // 整數(shù) intege1...
    a_foo閱讀 1,216評論 0 4
  • 1. 跟往常一樣捻撑,擠上回家的公交車磨隘,前門進不去,只能從后門擠上去顾患。 不一樣的是番捂,有一位老人在我們擠上去后數(shù)了下,上...
    安兒CC閱讀 119評論 0 0