Javascript社會安全號碼校正

來源:互聯網
上載者:User

社會安全號碼碼的規則



1、15位社會安全號碼碼組成:


    ddddddyymmddxxs共15位,其中:

    dddddd為6位的地方代碼,根據這6位可以獲得該社會安全號碼所在地。

    yy為2位的年份代碼,是身份證持有人的出身年份。

    mm為2位的月份代碼,是身份證持有人的出身月份。

    dd為2位的日期代碼,是身份證持有人的出身日。

    這6位在一起組成了身份證持有人的出生日期。

    xx為2位的順序碼,這個是隨機數。

    s為1位的性別代碼,奇數代表男性,偶數代表女性。

2、18位社會安全號碼碼組成:


   

ddddddyyyymmddxxsp共18位,其中:


    其他部分都和15位的相同。

    年份代碼由原來的2位升級到4位。最後一位為校正位。


    校正規則是:


   1. 十七位元字本體碼加權求和公式

        S = Sum(Ai * Wi), i = 0, ... , 16
,先對前17位元字的權求和

        Ai:表示第i位置上的社會安全號碼碼數字值

        Wi:表示第i位置上的加權因子

        Wi: 7 9 10 5 8 4 2 1
6 3 7 9 10 5 8 4 2

    2. 計算模

       Y = mod(S, 11)

    3. 通過模得到對應的校正碼

       Y:        0 1 2 3 4 5 6 7 8 9 10

       校正碼: 1 0 X 9 8 7 6
5 4 3 2



       比如得到餘數為1則最後的校正位p應該為對應的0.如果校正位不是,則該社會安全號碼碼不正確。

/**<br />* 驗證是不是數字<br />*/<br />function isNumber(oNum) {<br /> if(!oNum) return false;<br /> var strP=/^/d+(/./d+)?$/;<br /> if(!strP.test(oNum)) return false;<br /> try{<br /> if(parseFloat(oNum)!=oNum) return false;<br /> }<br /> catch(ex)<br /> {<br /> return false;<br /> }<br /> return true;<br />}<br />/**<br />*校正日期是否正確<br />*/<br />function isValidDate(iY, iM, iD) {<br /> if (iY>2200 || iY<1900 || !isNumber(iY)){<br /> alert("輸入社會安全號碼,年度"+iY+"非法!");<br /> return false;<br /> }<br /> if (iM>12 || iM<=0 || !isNumber(iM)){<br /> alert("輸入社會安全號碼,月份"+iM+"非法!");<br /> return false;<br /> }<br /> if (iD>31 || iD<=0 || !isNumber(iD)){<br /> alert("輸入社會安全號碼,日期"+iD+"非法!");<br /> return false;<br /> }<br /> return true;<br />}<br />/**<br />*判斷社會安全號碼碼格式函數<br />*公民身份號碼是特徵組合碼,<br />*排列順序從左至右依次為:六位元字地址碼,八位元字出生日期碼,三位元字順序碼和一位元字校正碼<br />*/<br />function isChinaIDCard(StrNo){<br /> StrNo = StrNo.toString();<br /> if(StrNo.length == 15){<br /> if(!isValidDate("19"+StrNo.substr(6,2),StrNo.substr(8,2),StrNo.substr(10,2))){<br /> return false;<br /> }<br /> }else if(StrNo.length == 18){<br /> if (!isValidDate(StrNo.substr(6,4),StrNo.substr(10,2),StrNo.substr(12,2))){<br /> return false;<br /> }<br /> }else{<br /> alert("輸入的社會安全號碼碼必須為15位或者18位!");<br /> return false;<br /> }</p><p> if (StrNo.length==18) {<br /> var a,b,c<br /> if (!isNumber(StrNo.substr(0,17))){<br /> alert("社會安全號碼碼錯誤,前17位不能含有英文字母!");<br /> return false;<br /> }<br /> a=parseInt(StrNo.substr(0,1))*7+parseInt(StrNo.substr(1,1))*9+parseInt(StrNo.substr(2,1))*10;<br /> a=a+parseInt(StrNo.substr(3,1))*5+parseInt(StrNo.substr(4,1))*8+parseInt(StrNo.substr(5,1))*4;<br /> a=a+parseInt(StrNo.substr(6,1))*2+parseInt(StrNo.substr(7,1))*1+parseInt(StrNo.substr(8,1))*6;<br /> a=a+parseInt(StrNo.substr(9,1))*3+parseInt(StrNo.substr(10,1))*7+parseInt(StrNo.substr(11,1))*9;<br /> a=a+parseInt(StrNo.substr(12,1))*10+parseInt(StrNo.substr(13,1))*5+parseInt(StrNo.substr(14,1))*8;<br /> a=a+parseInt(StrNo.substr(15,1))*4+parseInt(StrNo.substr(16,1))*2;<br /> b=a%11;<br /> if (b==2) { //最後一位為校正位<br /> c=StrNo.substr(17,1).toUpperCase(); //轉為大寫X<br /> }else{<br /> c=parseInt(StrNo.substr(17,1));<br /> }<br /> switch(b){<br /> case 0: if ( c!=1 ) {alert("身份證好號碼校正位錯:最後一位應該為:1");return false;}break;<br /> case 1: if ( c!=0 ) {alert("身份證好號碼校正位錯:最後一位應該為:0");return false;}break;<br /> case 2: if ( c!="X") {alert("身份證好號碼校正位錯:最後一位應該為:X");return false;}break;<br /> case 3: if ( c!=9 ) {alert("身份證好號碼校正位錯:最後一位應該為:9");return false;}break;<br /> case 4: if ( c!=8 ) {alert("身份證好號碼校正位錯:最後一位應該為:8");return false;}break;<br /> case 5: if ( c!=7 ) {alert("身份證好號碼校正位錯:最後一位應該為:7");return false;}break;<br /> case 6: if ( c!=6 ) {alert("身份證好號碼校正位錯:最後一位應該為:6");return false;}break;<br /> case 7: if ( c!=5 ) {alert("身份證好號碼校正位錯:最後一位應該為:5");return false;}break;<br /> case 8: if ( c!=4 ) {alert("身份證好號碼校正位錯:最後一位應該為:4");return false;}break;<br /> case 9: if ( c!=3 ) {alert("身份證好號碼校正位錯:最後一位應該為:3");return false;}break;<br /> case 10: if ( c!=2 ){alert("身份證好號碼校正位錯:最後一位應該為:2");return false;}<br /> }<br /> }else {//15位社會安全號碼<br /> if (!isNumber(StrNo)) {<br /> alert("社會安全號碼碼錯誤,前15位不能含有英文字母!");<br /> return false;<br /> }<br /> }<br /> return true;<br />}


 

相關文章

聯繫我們

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