vbscriptとjavascript版の15位、18位の身分証番号の検証関数、及び身分証によって省、誕生日、性別を取ります.
5742 ワード
仕事では身分証明書の検証が必要です.15人と18人の検査もサポートします.
私はちょっと手がだるいです.同僚に既製の関数があるかどうか聞いてみました.同僚のgoogleがあります.捨ててください. asp-vbscriptバージョンの関数です.
でも、こちらはクライアントのjavascriptです. vbs-->js
直したらすごく使いやすいです.同時に見つけました. vbscriptは本当にとてもうるさいです.50行以上書いて、jsに変えました. 11行だけ使いました
もちろん、私は完全にvbscriptを指しています.うるさいです.このvbsコードを書いている無名氏も唐僧の性格です.
先に放つ vbscriptコード、
最後に、身分証番号によって取ります. 省、誕生日、性別は簡単です.
コードは私と何人かの同僚の身分証番号だけを使って測定しました.もしBugがあれば、ご指摘ください.
私はちょっと手がだるいです.同僚に既製の関数があるかどうか聞いてみました.同僚の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があれば、ご指摘ください.