标题:在表单中如何通过文本框中的“身份证号”在另一文本框显示“出生日期”
只看楼主
caolp
Rank: 1
等 级:新手上路
帖 子:160
专家分:5
注 册:2014-7-12
结帖率:92.31%
已结贴  问题点数:20 回复次数:12 
在表单中如何通过文本框中的“身份证号”在另一文本框显示“出生日期”
请问各位老师,我想在表单中通过文本框中的“身份证号”在另一文本框显示“出生日期”。不知如何实现?
搜索更多相关主题的帖子: 身份证号 出生日期 文本框 如何 
2014-07-26 22:21
tjdeming
Rank: 2
等 级:论坛游民
帖 子:351
专家分:49
注 册:2013-3-4
得分:0 
程序代码:
if len(sfzh)=18
thisfrom.text2.value=subs(sfzh,7,8)
else
thisfrom.text2.value='19'+subs(sfzh,7,6)
endif
2014-07-26 22:35
qjbzjp
Rank: 13Rank: 13Rank: 13Rank: 13
来 自:尧的故乡
等 级:贵宾
威 望:48
帖 子:1914
专家分:4397
注 册:2007-3-14
得分:0 
?SUBSTR(sfzh,7,IIF(LEN(sfzh)=18,8,6))

相互学习,互相交流,共同提高。
2014-07-26 22:50
tlliqi
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
等 级:贵宾
威 望:204
帖 子:15453
专家分:65956
注 册:2006-4-27
得分:0 
用substr()从身份证号中截取出生日期
2014-07-26 23:18
caolp
Rank: 1
等 级:新手上路
帖 子:160
专家分:5
注 册:2014-7-12
得分:0 
谢谢老师们支招,我是想取日期型的“1985-01-26”,而不是字符型的“19850126”。再请帮忙,谢谢!
2014-07-26 23:54
sdta
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:江苏省连云港市
等 级:版主
威 望:323
帖 子:9621
专家分:26174
注 册:2012-2-5
得分:5 
Text2.When 事件
Sfzh=Substr(Alltrim(Thisform.Text1.Vaule),7,8) && 以18位身份证为例
Thisform.Text2.Value=Ctod(Transform(Sfzh,"@R 9999-99-99"))

[ 本帖最后由 sdta 于 2014-7-27 02:54 编辑 ]

坚守VFP最后的阵地
2014-07-27 00:16
sdta
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:江苏省连云港市
等 级:版主
威 望:323
帖 子:9621
专家分:26174
注 册:2012-2-5
得分:0 
以下是引用tjdeming在2014-7-26 22:35:16的发言:

if len(sfzh)=18
thisfrom.text2.value=subs(sfzh,7,8)
else
thisfrom.text2.value='19'+subs(sfzh,7,6)
endif

如果是16、17位,上面代码是要出错的,如果要保证身份证号码的长度为18位或15位,要加判断条件

坚守VFP最后的阵地
2014-07-27 00:18
caolp
Rank: 1
等 级:新手上路
帖 子:160
专家分:5
注 册:2014-7-12
得分:0 
如何判断呢?对不起,我是个初学者
2014-07-27 00:46
sdta
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:江苏省连云港市
等 级:版主
威 望:323
帖 子:9621
专家分:26174
注 册:2012-2-5
得分:10 
Form.Init 事件
Thisform.AddProperty("Sfzh","") && 为表单增加一个属性,用于保存Text1.Value


Text1.Valid 事件

程序代码:
With Thisform
    .Sfzh=Alltrim(.Text1.Value)
    * 判断.Text1.Value 值中是否有非数字字符
    If Len(Chrtran(.Sfzh,"0123456789",""))!=0
       =Messagebox("身份证中含有非数字字符")
       Return .Text1
    Endif 
    * 判断身份证长度
    If Not Inlist(Len(.Sfzh),15,18)
       =Messagebox("身份证长度必须 15位或18位")
       Return .Text1
    Endif

    .Sfzh=Iif(Len(.Sfzh)=18,Substr(.Sfzh,7,8),"19"+Substr(.Sfzh,7,6))
    * 判断年份
    If Not Between(Val(Left(.Sfzh,4)),1900,Year(Date()))
        =Messagebox("年份必须在 1900-"+Transform(Year(Date()))+" 之间")
        Return .Text1
    Endif 
    * 判断月份
    If Not Between(Val(Substr(.Sfzh,5,2)),1,12)
        =Messagebox("月份必须在 1-12 之间")
        Return .Text1
    Endif 
    * 判断日
    nDay=Day(Gomonth(Date(Val(Left(.Sfzh,4)),Val(Substr(.Sfzh,5,2)),1),1)-1)
    If Not Between(Val(Substr(.Sfzh,7,2)),1,nDay)
        =Messagebox("天数必须在 1-"+Transform(nDay)+" 之间")
        Return .Text1
    Endif 
Endwith 


Text2.Gotfocus
Thisform.Text2.Value=Ctod(Transform(Thisform.Sfzh,"@R 9999-99-99"))


上面只是简单的判断

[ 本帖最后由 sdta 于 2014-7-27 02:56 编辑 ]

坚守VFP最后的阵地
2014-07-27 02:55
sdta
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:江苏省连云港市
等 级:版主
威 望:323
帖 子:9621
专家分:26174
注 册:2012-2-5
得分:5 
在有完整的身份证历史数据表的基础上,
1.判断地址码是否存在
2.判断输入的身份证第17位性别码是否正确
3.判断18位身份证的校验码是否正确
有关身份证相关知识请参考https://bbs.bccn.net/thread-382165-1-1.html

上面所有判断都是正确的,只能说明录入的身份证号码是正确的,但不能说明是合法的。

上面的判断代码可以到网上搜索,在此就不写了。

[ 本帖最后由 sdta 于 2014-7-27 03:14 编辑 ]

坚守VFP最后的阵地
2014-07-27 03:09



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-434426-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.254416 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved