等级:版主 财产: 经验: 魅力: 注册:2003-7-25 文章:24 鉴定:保密
| |
| //中国身份证只有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 | |
|