vbscriptとjavascript版の15位、18位の身分証番号の検証関数、及び身分証によって省、誕生日、性別を取ります.

5742 ワード

仕事では身分証明書の検証が必要です.15人と18人の検査もサポートします.
私はちょっと手がだるいです.同僚に既製の関数があるかどうか聞いてみました.同僚のgoogleがあります.捨ててください. asp-vbscriptバージョンの関数です.
でも、こちらはクライアントのjavascriptです. vbs-->js
直したらすごく使いやすいです.同時に見つけました. vbscriptは本当にとてもうるさいです.50行以上書いて、jsに変えました. 11行だけ使いました
もちろん、私は完全にvbscriptを指しています.うるさいです.このvbsコードを書いている無名氏も唐僧の性格です.
先に放つ vbscriptコード、   
 
  
  <br> <br>' :   <br>Function CheckCardId(e)   <br>    arrVerifyCode = Split("1,0,x,9,8,7,6,5,4,3,2", ",")   <br>    Wi = Split("7,9,10,5,8,4,2,1,6,3,7,9,10,5,8,4,2", ",")   <br>    Checker = Split("1,9,8,7,6,5,4,3,2,1,1", ",")   <br> <br>    If Len(e) < 15 Or Len(e) = 16 Or Len(e) = 17 Or Len(e) > 18 Then   <br>        CheckCardId= "  15  18 "   <br>        CheckCardId = False   <br>        Exit Function   <br>    End If   <br> <br>    Dim Ai   <br>    If Len(e) = 18 Then   <br>        Ai = Mid(e, 1, 17)   <br>    ElseIf Len(e) = 15 Then   <br>        Ai = e   <br>        Ai = Left(Ai, 6) & "19" & Mid(Ai, 7, 9)   <br>    End If   <br> <br>    If Not IsNumeric(Ai) Then   <br>        CheckCardId= " , !"           <br>        Exit Function   <br>    End If   <br>    Dim strYear, strMonth, strDay   <br>    strYear = CInt(Mid(Ai, 7, 4))   <br>    strMonth = CInt(Mid(Ai, 11, 2))   <br>    strDay = CInt(Mid(Ai, 13, 2))   <br>    BirthDay = Trim(strYear) + "-" + Trim(strMonth) + "-" + Trim(strDay)   <br>    If IsDate(BirthDay) Then   <br>        If DateDiff("yyyy",Now,BirthDay)<-140 or cdate(BirthDay)>date() Then           <br>            CheckCardId= " !"   <br>            Exit Function   <br>        End If   <br>        If strMonth > 12 Or strDay > 31 Then   <br>            CheckCardId= " !"   <br>            Exit Function   <br>        End If   <br>    Else   <br>        CheckCardId= " !"   <br>        Exit Function   <br>    End If   <br>    Dim i, TotalmulAiWi   <br>    For i = 0 To 16   <br>        TotalmulAiWi = TotalmulAiWi + CInt(Mid(Ai, i + 1, 1)) * Wi(i)   <br>    Next   <br>    Dim modValue   <br>    modValue = TotalmulAiWi Mod 11   <br>    Dim strVerifyCode   <br>    strVerifyCode = arrVerifyCode(modValue)   <br>    Ai = Ai & strVerifyCode    <br>    CheckCardId = Ai  <br> <br>    If Len(e) = 18 And e <> Ai Then   <br>        CheckCardId= " !"   <br>        Exit Function   <br>    End If   <br>End Function   <br> 
再放出 javascriptバージョンコード
 
  
function checkId(pId){ 
//  Go_Rush( ) from http://ashun.cnblogs.com 

    var arrVerifyCode = [1,0,"x",9,8,7,6,5,4,3,2]; 
    var Wi = [7,9,10,5,8,4,2,1,6,3,7,9,10,5,8,4,2]; 
    var Checker = [1,9,8,7,6,5,4,3,2,1,1]; 

    if(pId.length != 15 && pId.length != 18)    return "  15  18 "; 

    var Ai=pId.length==18 ?  pId.substring(0,17)   :   pId.slice(0,6)+"19"+pId.slice(6,16); 

    if (!/^\d+$/.test(Ai))  return " , !"; 

    var yyyy=Ai.slice(6,10) ,  mm=Ai.slice(10,12)-1  ,  dd=Ai.slice(12,14); 

    var d=new Date(yyyy,mm,dd) ,  now=new Date(); 
     var year=d.getFullYear() ,  mon=d.getMonth() , day=d.getDate(); 

    if (year!=yyyy || mon!=mm || day!=dd || d>now || year<1940) return " !"; 

    for(var i=0,ret=0;i<17;i++)  ret+=Ai.charAt(i)*Wi[i];     
    Ai+=arrVerifyCode[ret %=11];      

    return pId.length ==18 && pId != Ai?" !":Ai;         
}; 
身分証明書のアルゴリズムの原理については、以下を参照してください.  http://www.google.com/
最後に、身分証番号によって取ります.  省、誕生日、性別は簡単です.
 
  
  <br>var id="342201570202003"   <br> <br>//   , ,   Go_Rush( ) from http://ashun.cnblogs.com/  <br>function getInfo(id){  <br>    var arr=[null,null,null,null,null,null,null,null,null,null,null," "," "," "," "," "  <br>             ,null,null,null,null,null," "," "," ",null,null,null,null,null,null,null," "  <br>             ," "," "," "," "," "," ",null,null,null," "," "," "," "," "," "  <br>             ,null,null,null," "," "," "," "," ",null,null,null,null,null,null," "," "  <br>             ," "," "," ",null,null,null,null,null," ",null,null,null,null,null,null,null,null  <br>             ,null," "," ",null,null,null,null,null,null,null,null," "]  <br>    id=checkId(id)  <br>    if (isNaN(id)) return " "      <br>    var id=String(id),  prov=arr[id.slice(0,2)]  ,  sex=id.slice(14,17)%2?  " " : " "  <br>    var birthday=(new Date(id.slice(6,10) , id.slice(10,12)-1 , id.slice(12,14))).toLocaleDateString()   <br>    return [prov,birthday,sex]    <br>}  <br> <br>alert(getInfo(id))   <br> 
上のコードは省までしか取れません.具体的な都市まで取りに行きます.別の随筆を見てください.
コードは私と何人かの同僚の身分証番号だけを使って測定しました.もしBugがあれば、ご指摘ください.