javascript 驗(yàn)證身份證號(hào)

/**
 * 身份證15位編碼規(guī)則:dddddd yymmdd xx p 
 * dddddd:地區(qū)碼 
 * yymmdd: 出生年月日 
 * xx: 順序類編碼矢渊,無法確定 
 * p: 性別猿涨,奇數(shù)為男救斑,偶數(shù)為女
 * <p />
 * 身份證18位編碼規(guī)則:dddddd yyyymmdd xxx y 
 * dddddd:地區(qū)碼 
 * yyyymmdd: 出生年月日 
 * xxx:順序類編碼徊件,無法確定,奇數(shù)為男灸蟆,偶數(shù)為女 
 * y: 校驗(yàn)碼炎疆,該位數(shù)值可通過前17位計(jì)算獲得
 * <p />
 * 18位號(hào)碼加權(quán)因子為(從右到左) Wi = [ 7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2,1 ]
 * 驗(yàn)證位 Y = [ 1, 0, 10, 9, 8, 7, 6, 5, 4, 3, 2 ] 
 * 校驗(yàn)位計(jì)算公式:Y_P = mod( ∑(Ai×Wi),11 ) 
 * i為身份證號(hào)碼從右往左數(shù)的 2...18 位; Y_P為腳丫校驗(yàn)碼所在校驗(yàn)碼數(shù)組位置
 * 
 */

var Wi = [ 7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2, 1 ];// 加權(quán)因子
var ValideCode = [ 1, 0, 10, 9, 8, 7, 6, 5, 4, 3, 2 ];// 身份證驗(yàn)證位值.10代表X
function IdCardValidate(idCard) {
    idCard = trim(idCard);
    if (idCard.length == 15) {
        return isValidityBrithBy15IdCard(idCard);
    } else if (idCard.length == 18) {
        var a_idCard = idCard.split("");// 得到身份證數(shù)組
        if(isValidityBrithBy18IdCard(idCard)&&isTrueValidateCodeBy18IdCard(a_idCard)){
            return true;
        }else {
            return false;
        }
    } else {
        return false;
    }
}
/**
 * 判斷身份證號(hào)碼為18位時(shí)最后的驗(yàn)證位是否正確
 * @param a_idCard 身份證號(hào)碼數(shù)組
 * @return
 */
function isTrueValidateCodeBy18IdCard(a_idCard) {
    var sum = 0; // 聲明加權(quán)求和變量
    if (a_idCard[17].toLowerCase() == 'x') {
        a_idCard[17] = 10;// 將最后位為x的驗(yàn)證碼替換為10方便后續(xù)操作
    }
    for ( var i = 0; i < 17; i++) {
        sum += Wi[i] * a_idCard[i];// 加權(quán)求和
    }
    valCodePosition = sum % 11;// 得到驗(yàn)證碼所位置
    if (a_idCard[17] == ValideCode[valCodePosition]) {
        return true;
    } else {
        return false;
    }
}
/**
 * 通過身份證判斷是男是女
 * @param idCard 15/18位身份證號(hào)碼 
 * @return 'female'-女泌射、'male'-男
 */
function maleOrFemalByIdCard(idCard){
    idCard = trim(idCard.replace(/ /g, ""));// 對(duì)身份證號(hào)碼做處理。包括字符間有空格鞠苟。
    if(idCard.length==15){
        if(idCard.substring(14,15)%2==0){
            return 'female';
        }else{
            return 'male';
        }
    }else if(idCard.length ==18){
        if(idCard.substring(14,17)%2==0){
            return 'female';
        }else{
            return 'male';
        }
    }else{
        return null;
    }
//  可對(duì)傳入字符直接當(dāng)作數(shù)組來處理
// if(idCard.length==15){
// alert(idCard[13]);
// if(idCard[13]%2==0){
// return 'female';
// }else{
// return 'male';
// }
// }else if(idCard.length==18){
// alert(idCard[16]);
// if(idCard[16]%2==0){
// return 'female';
// }else{
// return 'male';
// }
// }else{
// return null;
// }
}
 /**
  * 驗(yàn)證18位數(shù)身份證號(hào)碼中的生日是否是有效生日
  * @param idCard 18位書身份證字符串
  * @return
  */
function isValidityBrithBy18IdCard(idCard18){
    var year =  idCard18.substring(6,10);
    var month = idCard18.substring(10,12);
    var day = idCard18.substring(12,14);
    var temp_date = new Date(year,parseFloat(month)-1,parseFloat(day));
    // 這里用getFullYear()獲取年份乞榨,避免千年蟲問題
    if(temp_date.getFullYear()!=parseFloat(year)
          ||temp_date.getMonth()!=parseFloat(month)-1
          ||temp_date.getDate()!=parseFloat(day)){
            return false;
    }else{
        return true;
    }
}
  /**
   * 驗(yàn)證15位數(shù)身份證號(hào)碼中的生日是否是有效生日
   * @param idCard15 15位書身份證字符串
   * @return
   */
  function isValidityBrithBy15IdCard(idCard15){
      var year =  idCard15.substring(6,8);
      var month = idCard15.substring(8,10);
      var day = idCard15.substring(10,12);
      var temp_date = new Date(year,parseFloat(month)-1,parseFloat(day));
      // 對(duì)于老身份證中的你年齡則不需考慮千年蟲問題而使用getYear()方法
      if(temp_date.getYear()!=parseFloat(year)
              ||temp_date.getMonth()!=parseFloat(month)-1
              ||temp_date.getDate()!=parseFloat(day)){
                return false;
        }else{
            return true;
        }
  }
//去掉字符串頭尾空格
function trim(str) {   
    return str.replace(/(^\s*)|(\s*$)/g, "");   
}  
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市偶妖,隨后出現(xiàn)的幾起案子姜凄,更是在濱河造成了極大的恐慌,老刑警劉巖趾访,帶你破解...
    沈念sama閱讀 221,888評(píng)論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件态秧,死亡現(xiàn)場離奇詭異,居然都是意外死亡扼鞋,警方通過查閱死者的電腦和手機(jī)申鱼,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,677評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門愤诱,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人捐友,你說我怎么就攤上這事淫半。” “怎么了匣砖?”我有些...
    開封第一講書人閱讀 168,386評(píng)論 0 360
  • 文/不壞的土叔 我叫張陵科吭,是天一觀的道長。 經(jīng)常有香客問我猴鲫,道長对人,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 59,726評(píng)論 1 297
  • 正文 為了忘掉前任拂共,我火速辦了婚禮牺弄,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘宜狐。我一直安慰自己势告,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,729評(píng)論 6 397
  • 文/花漫 我一把揭開白布抚恒。 她就那樣靜靜地躺著咱台,像睡著了一般。 火紅的嫁衣襯著肌膚如雪柑爸。 梳的紋絲不亂的頭發(fā)上吵护,一...
    開封第一講書人閱讀 52,337評(píng)論 1 310
  • 那天,我揣著相機(jī)與錄音表鳍,去河邊找鬼馅而。 笑死,一個(gè)胖子當(dāng)著我的面吹牛譬圣,可吹牛的內(nèi)容都是我干的瓮恭。 我是一名探鬼主播,決...
    沈念sama閱讀 40,902評(píng)論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼厘熟,長吁一口氣:“原來是場噩夢啊……” “哼屯蹦!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起绳姨,我...
    開封第一講書人閱讀 39,807評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤登澜,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后飘庄,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體脑蠕,經(jīng)...
    沈念sama閱讀 46,349評(píng)論 1 318
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,439評(píng)論 3 340
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了谴仙。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片迂求。...
    茶點(diǎn)故事閱讀 40,567評(píng)論 1 352
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖晃跺,靈堂內(nèi)的尸體忽然破棺而出揩局,到底是詐尸還是另有隱情,我是刑警寧澤掀虎,帶...
    沈念sama閱讀 36,242評(píng)論 5 350
  • 正文 年R本政府宣布凌盯,位于F島的核電站,受9級(jí)特大地震影響涩盾,放射性物質(zhì)發(fā)生泄漏十气。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,933評(píng)論 3 334
  • 文/蒙蒙 一春霍、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧叶眉,春花似錦址儒、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,420評(píng)論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至饱溢,卻和暖如春喧伞,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背绩郎。 一陣腳步聲響...
    開封第一講書人閱讀 33,531評(píng)論 1 272
  • 我被黑心中介騙來泰國打工潘鲫, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人肋杖。 一個(gè)月前我還...
    沈念sama閱讀 48,995評(píng)論 3 377
  • 正文 我出身青樓溉仑,卻偏偏與公主長得像,于是被迫代替她去往敵國和親状植。 傳聞我的和親對(duì)象是個(gè)殘疾皇子浊竟,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,585評(píng)論 2 359

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