js實現社會安全號碼碼驗證的簡單一實例

來源:互聯網
上載者:User

js實現社會安全號碼碼驗證的簡單一實例

 本篇文章主要是對js實現社會安全號碼碼驗證的簡單一實例進行了介紹,需要的朋友可以過來參考下,希望對大家有所協助

以下是根據社會安全號碼碼編碼規則,使用JS對其進行有效性驗證代碼

 

IdCard-Validate.js代碼如下: 

 

 代碼如下:

/**

 * 身份證15位編碼規則:dddddd yymmdd xx p 

 * dddddd:地區碼 

 * yymmdd: 出生年月日 

 * xx: 順序類編碼,無法確定 

 * p: 性別,奇數為男,偶數為女

 * <p />

 * 身份證18位編碼規則:dddddd yyyymmdd xxx y 

 * dddddd:地區碼 

 * yyyymmdd: 出生年月日 

 * xxx:順序類編碼,無法確定,奇數為男,偶數為女 

 * y: 校正碼,該位元值可通過前17位計算獲得

 * <p />

 * 18位號碼加權因子為(從右至左) 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為社會安全號碼碼從右往左數的 2...18 位; Y_P為腳丫校正碼所在校正碼數組位置

 * 

 */

 

var Wi = [ 7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2, 1 ];// 加權因子

var ValideCode = [ 1, 0, 10, 9, 8, 7, 6, 5, 4, 3, 2 ];// 身份證驗證位值.10代表X

function IdCardValidate(idCard) {

 idCard = trim(idCard.replace(/ /g, ""));

 if (idCard.length == 15) {

  return isValidityBrithBy15IdCard(idCard);

 } else if (idCard.length == 18) {

  var a_idCard = idCard.split("");// 得到身份證數組

  if(isValidityBrithBy18IdCard(idCard)&&isTrueValidateCodeBy18IdCard(a_idCard)){

   return true;

  }else {

   return false;

  }

 } else {

  return false;

 }

}

/**

 * 判斷社會安全號碼碼為18位時最後的驗證位是否正確

 * @param a_idCard 社會安全號碼碼數組

 * @return

 */

function isTrueValidateCodeBy18IdCard(a_idCard) {

 var sum = 0; // 聲明加權求和變數

 if (a_idCard[17].toLowerCase() == 'x') {

  a_idCard[17] = 10;// 將最後位為x的驗證碼替換為10方便後續操作

 }

 for ( var i = 0; i < 17; i++) {

  sum += Wi[i] * a_idCard[i];// 加權求和

 }

 valCodePosition = sum % 11;// 得到驗證碼所位置

 if (a_idCard[17] == ValideCode[valCodePosition]) {

  return true;

 } else {

  return false;

 }

}

/**

 * 通過身份證判斷是男是女

 * @param idCard 15/18位社會安全號碼碼 

 * @return 'female'-女、'male'-男

 */

function maleOrFemalByIdCard(idCard){

 idCard = trim(idCard.replace(/ /g, ""));// 對社會安全號碼碼做處理。包括字元間有空格。

 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;

 }

// 可對傳入字元直接當作數組來處理

// 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;

// }

}

 /**

  * 驗證18位元社會安全號碼碼中的生日是否是有效生日

  * @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;

 }

}

  /**

   * 驗證15位元社會安全號碼碼中的生日是否是有效生日

   * @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));

   // 對於老身份證中的你年齡則不需考慮千年蟲問題而使用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, "");

}

 

 

對於上述代碼中,關於性別的判斷在實際使用中,可加入首先判斷身份證是否有效。在本程式碼範例中並未進行該種判斷,有點雞肋的感覺,可在實際使用中根據情況進行豐滿。

 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.