18位社會安全號碼碼檢驗JS指令碼函數修正

來源:互聯網
上載者:User

function CheckIDCard(StrNumber)
{
//判斷社會安全號碼碼格式函數
//公民身份號碼是特徵組合碼,
//排列順序從左至右依次為:六位元字地址碼,八位元字出生日期碼,三位元字順序碼和一位元字校正碼

//社會安全號碼碼長度判斷
if(StrNumber.length<15||StrNumber.length==16||StrNumber.length==17||StrNumber.length>18)
{
alert("填寫的社會安全號碼碼長度不正確,請重新填寫!");
return false;
}
//社會安全號碼碼最後一位可能是超過100歲老年人的X.X也可以代表是阿拉伯數字10的意思
//所以排除掉最後一位元字進行數字格式測試,最後一位元字有最後一位元字的演算法

var Ai;
if(StrNumber.length==18)
{
Ai = StrNumber.substring(0,17);
}
else
{
Ai =StrNumber.substring(0,6)+"19"+StrNumber.substring(6,9);
}
//調用數字判斷函數IsNumeric()
if(IsNumeric(Ai)==false)
{
alert("社會安全號碼碼數字字串不正確,請重新填寫!");
return false;
}

var strYear,strMonth,strDay,strBirthDay;
strYear = parseInt(Ai.substr(6,4));
strMonth = parseInt(Ai.substr(10,2)) ;
strDay = parseInt(Ai.substr(12,2));
//調用日期判斷函數IsValidDate()
if (IsValidDate(strYear,strMonth,strDay)==false)
{
alert("社會安全號碼碼"+Ai+"日期格式年份"+strYear+"月份"+strMonth+"日"+strDay+"不正確,請重新填寫!");
return false;
}

var arrVerifyCode = new Array("1","0","x","9","8","7","6","5","4","3","2");
var Wi = new Array(7,9,10,5,8,4,2,1,6,3,7,9,10,5,8,4,2);
var k,TotalmulAiWi=0;
for (k=0; k<17;k++)
 {
 TotalmulAiWi = TotalmulAiWi + parseInt(Ai.substr(k,1)) * Wi[k];
 
  }
//alert("社會安全號碼碼最後一位的識別碼是:"+TotalmulAiWi);
var modValue =TotalmulAiWi % 11 ;
var strVerifyCode = arrVerifyCode[modValue];
Ai = Ai+strVerifyCode;
//alert("社會安全號碼碼"+StrNumber+"與正確的號碼"+Ai+"一致!");
if((StrNumber.length==18)&&(StrNumber!=Ai))
{
alert("社會安全號碼碼"+StrNumber+"與正確的號碼"+Ai+"不一致,請重新填寫!");
return false;
}
return true;

}
//數字判斷函數IsNumeric()
function IsNumeric(oNum)
{
  if(!oNum) return false;
  var strP=/^/d+(/./d+)?$/;
  if(!strP.test(oNum)) return false;
  try{
  if(parseFloat(oNum)!=oNum) return false;
  }
  catch(ex)
  {
   return false;
  }
  return true;
}
//有效年份判斷函數IsValidYear()
function IsValidYear(psYear)
{
    var sYear = new String(psYear);

    if(psYear==null)
    {
        alert("社會安全號碼碼出生日期中年份為Null,請重新填寫!");
  return false;
    }

    if(isNaN(psYear)==true)
    {
        alert("社會安全號碼碼出生日期中年份必須為數字,請重新填寫!");
  return false;
    }

    if(sYear == "")
    {
  alert("社會安全號碼碼出生日期中年份為空白,請重新填寫!");
        return true;
    }

    if(sYear.match(/[^0-9]/g)!=null)
    {
        alert("社會安全號碼碼出生日期中年份必須為0-9之間的數字組成,請重新填寫!");
  return false;
    }

    var nYear = parseInt(sYear,10);

    if((nYear < 0) || (9999 < nYear))
    {
        alert(nYear +"社會安全號碼碼出生日期中年份必須為正常的正整數,請重新填寫!");
  return false;
    }

    return true;
}

//有效月份判斷函數IsValidMonth()
function IsValidMonth(psMonth)
{
    var sMonth = new String(psMonth);

    if(psMonth==null)
    {
        return false;
    }

    if(isNaN(psMonth)==true)
    {
        return false;
    }

    if(sMonth == "")
    {
        return true;
    }

    if(sMonth.match(/[^0-9]/g)!=null)
    {
        return false;
    }

    var nMonth = parseInt(sMonth,10);

    if((nMonth < 0) || (12 < nMonth))
    {
        return false;
    }

    return true;
}

//有效日判斷函數IsValidDay()
function IsValidDay(psDay)
{
    var sDay  = new String(psDay);

    if(psDay==null)
    {
        return false;
    }

    if(isNaN(psDay)==true)
    {
        return false;
    }

    if(sDay == "")
    {
        return true;
    }

    if(sDay.match(/[^0-9]/g)!=null)
    {
        return false;
    }

    var nDay = parseInt(psDay, 10);

    if((nDay < 0) || (31 < nDay))
    {
        return false;
    }

    return true;
}

//有效日期判斷函數IsValidDate()
function IsValidDate(psYear, psMonth, psDay)
{
    if(psYear==null || psMonth==null || psDay==null)
    {
        return false;
    }

    var sYear  = new String(psYear);
    var sMonth = new String(psMonth);
    var sDay   = new String(psDay);

    if(IsValidYear(sYear)==false)
    {
        return false;
    }

    if(IsValidMonth(sMonth)==false)
    {
        return false;
    }

    if(IsValidDay(sDay)==false)
    {
        return false;
    }

    var nYear  = parseInt(sYear,  10);
    var nMonth = parseInt(sMonth, 10);
    var nDay   = parseInt(sDay,   10);

    if(sYear=="" &&  sMonth=="" && sDay=="")
    {
        return true;
    }

    if(sYear=="" || sMonth=="" || sDay=="")
    {
        return false;
    }
  
    if(nMonth < 1 || 12 < nMonth)
    {
        return false;
    }
    if(nDay < 1 || 31 < nDay)
    {
        return false;
    }

    if(nMonth == 2)
    {
        if((nYear % 400 == 0) || (nYear % 4 == 0) && (nYear % 100 != 0))
        {
            if((nDay < 1) || (nDay > 29))
            {
                return false;
            }
        }
        else
        {
            if((nDay < 1) || (nDay > 28))
            {
                return false;
            }
        }
    }
    else if((nMonth == 1)  ||
            (nMonth == 3)  ||
            (nMonth == 5)  ||
            (nMonth == 7)  ||
            (nMonth == 8)  ||
            (nMonth == 10) ||
            (nMonth == 12))
    {
        if((nDay < 1) || (31 < nDay))
        {
            return false;
        }
    }
    else
    {
        if((nDay < 1) || (30 < nDay))
        {
            return false;
        }
    }

    return true;

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.