以文本方式查看主题

-  蓝色快车PB俱乐部论坛  (http://pb.besoft.com.cnhttp://pb.besoft.com.cn/bbs/index.aspindex.asp)
--  PowerBuilder MIS编程  (http://pb.besoft.com.cnhttp://pb.besoft.com.cn/bbs/index.aspbbs.asp?boardid=1)
----  关于身份证的问题,哪位大哥能帮一下呀  (http://pb.besoft.com.cnhttp://pb.besoft.com.cn/bbs/index.aspdispbbs.asp?boardid=1&rootid=1496&id=2927)


--  作者:vlk001
--  发布时间:2004/1/7 11:45:58

--  关于身份证的问题,哪位大哥能帮一下呀
哪位大哥能给小弟一段判断身份证号的程序,能认出是15位的还是18位的,能根据身份证号自动生成出生年月和性别。
--  作者:lwhchoice
--  发布时间:2004/1/8 10:51:37

--  
ft,这么简单的程序你都不会?
--  作者:vlk001
--  发布时间:2004/1/8 12:17:31

--  

我是没有人教的,是自己看书的,你让我怎么样,要是会的话就帮一下,不要说那些没用的
--  作者:sanp
--  发布时间:2004/2/10 15:06:52

--  
int 身份证长度变量
string 身份证变量,出生年,出生月,出生日,出生年月日

身份证长度变量 = len(身份证变量)

if 身份证长度变量 = 15 then
  出生年 = "19" + mid(身份证变量, 7, 2)
  出生月 = mid(身份证变量, 9, 2)
  出生日 = mid(身份证变量, 11, 2)
  出生年月日 = 出生年 + "-" + 出生月 + "-" + 出生日
  messagebox("","身份证号长度为15位,出生年月日为:" + 出生年月日)
else
  出生年 = mid(身份证变量, 7, 4)
  出生月 = mid(身份证变量, 11, 2)
  出生日 = mid(身份证变量, 15, 2)
  出生年月日 = 出生年 + "-" + 出生月 + "-" + 出生日
  messagebox("","身份证号长度为18位,出生年月日为:" + 出生年月日)
end if


没有错误的判断,你自己加吧!

[此贴子已经被作者于2004-2-10 15:06:52编辑过]

--  作者:bkm02
--  发布时间:2004/3/20 22:23:50

--  
还应判断出生日期是否合法,如果是18位的还要判断最后一位是否应该为X
--  作者:bluesea
--  发布时间:2004/3/29 13:22:03

--  
//中国身份证只有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
 

 


--  作者:zhegao
--  发布时间:2005/5/9 8:55:53

--  

--  作者:1222
--  发布时间:2005/5/9 15:45:48

--  
中国身份证可以这样用了,我就遇到过一次有台湾身份证的情况,结果就出问题了.
--  作者:ruiqing
--  发布时间:2005/5/26 16:52:28

--  
lenth,mid,right

">