VFP_身份证验证程序

时间:2014-04-11 08:47:52
【文件属性】:

文件名称:VFP_身份证验证程序

文件大小:2KB

文件格式:TXT

更新时间:2014-04-11 08:47:52

身份证验证

Function MyIdentityCardVerify &&校验身份证号是否合法 Lparameters lstr &&参数:lstr 传入的号码 Private lstr,relyn,tsfz,m1,m2,m3,m4,m,I,r,c,ai,wi relyn=.F. &&返回值 tsfz=Alltrim(lstr) *分别用m1,m2,m3,m4表示四个条件是否成立 Stor .T. To m1,m2,m3,m4 *条件1:只能是15或18位 m1=Iif(Len(tsfz)=15 Or Len(tsfz)=18,.T.,.F.) If Len(tsfz)=15 && 15位的号码 For I=1 To 15 &&检查每一位是否为数字 m=Asc(Substr(tsfz,I,1)) If m<48 Or m>57 &&数字 m2=.F. &&若有一位不是就不再查 Exit Endif Endfor m="19" +Substr(tsfz, 7,2) &&早期的号都是上个世纪的 m=m+"."+Substr(tsfz, 9,2) m=m+"."+Substr(tsfz,11,2) m=Ctod(m) If Isnull(m) Or Isblank(m) m3=.F. &&生日不正确 Endif Endif If Len(tsfz)=18 && 18位的号码 For I=1 To 17 m=Asc(Substr(tsfz,I,1)) If m<48 Or m>57 m2=.F. Exit Endif Endfor m=Substr(tsfz,7,4) m=m+"."+Substr(tsfz,11,2) m=m+"."+Substr(tsfz,13,2) m=Ctod(m) If Isnull(m) Or Isblank(m) m3=.F. Endif r=0 &&计算校验位 For I=18 To 2 Step -1 ai=Val(Substr(tsfz,19-i,1)) wi=Mod(2^(i-1),11) r=r+ai*wi Next r=Mod(r,11) Do Case Case r=0 c="1" Case r=1 c="0" Case r=2 c="X" Otherwise c=Alltrim(Str(12-r)) Endcase If Upper(Substr(tsfz,18,1))<>c m4=.F. &&校验位与原码最末位不同 Endif Endif *四个条件全成立,则返回.t. relyn=Iif(m1 And m2 And m3 And m4,.T.,.F.) Return relyn Endfunc


网友评论

  • 对于初学者非常实用
  • 初学用,很简单。
  • 初学者较适用