//中国身份证只有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
PB验证身份证号码
最新推荐文章于 2023-12-21 09:08:51 发布