PB验证身份证号码

 //中国身份证只有15位和18位,
//以下程序通过判断身份证的位数、出生年月、性别和校验码来判断其正确性
//获取校验码的函数f_get_sfzvalid(string a_sfz)
//判断是否是身份证函数f_checksfz(string as_sfz)内容如下
string ls_date,ls_xb
string ls_birth,ls_sex,ls_return
choose case len(as_sfz)
case 15//15位的身份证
ls_date="19"+mid(as_sfz,7,2)+"-"+mid(as_sfz,9,2)+"-"+mid(as_sfz,11,2)//获得出生日期
if pos("13579",mid(as_sfz,15,1))>0 then//获得性别
ls_xb="男"
else
ls_xb="女"
end if
if not isdate(ls_date) then
messagebox("提示信息","所输入的号码不是身份证号码")
return -1
else
return 0
end if     
  case 18//18位的身份证
ls_date=mid(as_sfz,7,4)+"-"+mid(as_sfz,11,2)+"-"+mid(as_sfz,13,2)
if pos("13579",mid(as_sfz,17,1))>0 then
ls_xb="男"
else
ls_xb="女"
end if
if mid(as_sfz,18)<>f_get_sfz_validbh(mid(as_sfz,1,17)) then //判断校验码
messagebox("提示信息","所输入的身份证号码第十八位校验码不对.")
return -1
end if
if not isdate(ls_date) then//判断日期是否正确
messagebox("提示信息","所输入的号码不是身份证号码")
return -1
else
return 0
end if
case else
return -1
end choose
//获取校验码函数f_get_sfz_validbh(string a_sfz)
string ls_sfz
integer i,li_ai,li_wi,li_sum,li_mod,li_result
ls_sfz=a_sfz
if len(ls_sfz)=15 or len(ls_sfz)=17 then
if len(ls_sfz)=15 then
  ls_sfz=mid(ls_sfz,1,6)+"19"+mid(ls_sfz,7,9)
end if
for i=2 to 18
li_ai=integer(mid(ls_sfz,19 -i,1))
li_wi=mod(2^(i - 1),11)
li_sum=li_sum + li_ai*li_wi
next
li_mod=mod(li_sum,11)
li_result=12 - li_mod
if li_result>=10 then
if li_result=10 then
return "X"
else
  li_result=li_result - 11
return string(li_result)
end if
else
return string(li_result)
end if
else
 return "E"
end if

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值