vfp中,从身份证号截取出生日期,这段代码应该如何修改呢?

来源:百度知道 编辑:UC知道 时间:2024/06/08 02:15:34
只是需要表示出生日期的那一串,所以设置csrq为字符型,代码为

do case
case len(alltrim(sfzh))=18
replace csrq with substr(alltrim(sfzh),7,8)
case len(alltrim(sfzh))=15
replace csrq with substr(alltrim(sfzh),7,6)
otherwise
messagebox("非法身份证号",16)
endcase

可是这样运行之后,只是第一条记录的出生日期被提取出来了。

如果修改成:

do case
case len(alltrim(sfzh))=18
replace all csrq with substr(alltrim(sfzh),7,8)
case len(alltrim(sfzh))=15
replace all csrq with substr(alltrim(sfzh),7,6)
otherwise
messagebox("非法身份证号",16)
endcase

运行后,不管身份证号是15位还是18位,出生日期都只截取了6位。

请问应该如何修改呢?谢谢!

你的问题出在仅对第一条记录进行了判断,如果第一条记录的身份证号码为18位,那么所有的记录都会截取8位作为出生日期;若第一条记录的身份证号为15位,则所有的出生日期只截取6位。这就是问题所在!你可以这样来改:
*****************
use XXX(打开某个存在身份证号码的表)
do while .not.eof()
do case
case len(alltrim(sfzh))=18
replace csrq with substr(alltrim(sfzh),7,8)
case len(alltrim(sfzh))=15
replace csrq with substr(alltrim(sfzh),7,6)
otherwise
messagebox("非法身份证号",16)
endcase
skip
enddo