以文本方式查看主题

-  易表在线答疑  (http://egrid2000.com/dvbbs/index.asp)
--  用户社区  (http://egrid2000.com/dvbbs/list.asp?boardid=2)
----  如何控制身份证号字段录入?  (http://egrid2000.com/dvbbs/dispbbs.asp?boardid=2&id=2809)

--  作者:sjbssd
--  发布时间:2011/2/19 11:47:00
--  如何控制身份证号字段录入?
要求:
1、长度控制:只能是15或18位;
2、15位的第7至12位、18位第9位至14位年月日必须正确。
总之必须符合规定。
--  作者:wjq1072
--  发布时间:2011/2/19 13:04:00
--  
发示例文件上来
--  作者:wjq1072
--  发布时间:2011/2/19 13:35:00
--  
下面引用由sjbssd2011/02/19 11:47am 发表的内容:
要求:
1、长度控制:只能是15或18位;
2、15位的第7至12位、18位第9位至14位年月日必须正确。
总之必须符合规定。

1、设置身份证列操作公式:
If([身份证]="" Or Len([身份证])=15 Or Len([身份证])=18,"",MsgBox("号码错误!",0) And SetCellText(Grid,Row,"身份证",""))

2、增加一时间型辅助列k:

设置k列刷新公式:
If([身份证]="","",If(Len([身份证])=15,"19"+Mid([身份证],6,2)+"-"+Mid([身份证],8,2)+"-"+Mid([身份证],10,2),Mid([身份证],6,4)+"-"+Mid([身份证],10,2)+"-"+Mid([身份证],12,2)))

设置k列操作公式:
If(ISDATE([k])=TRUE Or Text([k])="","",MsgBox("日期错误!",0) And SetCellText(Grid,Row,"身份证","") And SetCellText(Grid,Row,"k",""))


--  作者:sjbssd
--  发布时间:2011/2/21 23:48:00
--  
谢谢!!!
--  作者:wjq1072
--  发布时间:2011/2/22 14:22:00
--  
[这个贴子最后由wjq1072在 2011/02/24 09:15am 第 1 次编辑]

不增加辅助列,直接设置身份证列操作公式试试?
If([身份证]="","",If(Len([身份证]) <> 15 And Len([身份证]) <> 18,MsgBox("号码错误!",0) And SetCellText(GridName,Row,"身份证",""),If(Len([身份证])=15 And IsDate(Date("19"+Mid([身份证],6,2)+"-"+Mid([身份证],8,2)+"-"+Mid([身份证],10,2)))= True ,"",If(Len([身份证])=18 And IsDate(Date(Mid([身份证],6,4)+"-"+Mid([身份证],10,2)+"-"+Mid([身份证],12,2)))= True ,"",MsgBox("日期错误!",0) And SetCellText(GridName,Row,"身份证","")))))
--  作者:sjbssd
--  发布时间:2011/2/23 23:54:00
--  
设置k列操作公式:
If(ISDATE([k])=TRUE Or Text([k])="","",MsgBox("日期错误!",0) And SetCellText(Grid,Row,"身份证","") And SetCellText(Grid,Row,"k",""))
有问题,true应改为false测试通过,但ISDATE本身还有问题,我把身份证中月份、日期输成立13、41它也通过。
--  作者:wjq1072
--  发布时间:2011/2/24 9:15:00
--  
用5楼公式试试?