以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.com/bbs/index.asp)
--  专家坐堂  (http://foxtable.com/bbs/list.asp?boardid=2)
----  求助,利用身份证号码自动提取出生年月日,及计算年龄。  (http://foxtable.com/bbs/dispbbs.asp?boardid=2&id=105454)

--  作者:菜鸟的梦
--  发布时间:2017/8/19 20:44:00
--  求助,利用身份证号码自动提取出生年月日,及计算年龄。
还有希望身份证号码是数质型,但设置了数质型,就不能设置18位数,利用身份证号码自动提取出生年月日,及计算年龄。
图片点击可在新窗口打开查看此主题相关图片如下:t.jpg
图片点击可在新窗口打开查看

--  作者:zstk7333
--  发布时间:2017/8/20 0:50:00
--  
有一个ReadBirthday()的参数,可以直读取身份证的出生日期
--  作者:HJG_HB950207
--  发布时间:2017/8/20 9:11:00
--  
【员工资料】表属性 Datacolchanged
If e.DataCol.Name = "身份证"  Then  
    If e.DataRow.IsNull("身份证") Then  
      \'  e.DataRow("出生日期") = Nothing  
      \'  e.DataRow("性别") = Nothing  
    Else
          If  ValidPIN(e.DataRow("身份证"))  Then  
           e.DataRow("出生日期") = ReadBirthday(e.DataRow("身份证" ))
           e.DataRow("性别") = ReadSex(e.DataRow("身份证" ))
       Else
 e.Cancel = True \'取
          MessageBox.show("身份证号码错!","系统提示",MessageBoxButtons.OK, MessageBoxIcon.Information)
       End If
    End If
End If

Select Case e.DataCol.name 
    Case "出生日期"
        If e.DataRow.IsNull("出生日期") Then
            e.DataRow("年龄") = Nothing
        Else
            Dim tp As TimeSpan = Date.today - CDate(e.DataRow("出生日期"))
            e.DataRow("年龄") = Math.Round(tp.TotalDays / 365.2422,2)
        End If
End Select












--  作者:有点甜
--  发布时间:2017/8/20 13:04:00
--  

DataColChanged事件

 

Select Case e.DataCol.Name
    Case "身份证号"
        If e.DataRow.IsNull("身份证号") Then  \'身份证号码是否为空
            e.DataRow("出生日期") = Nothing  \'如果为空,则清除出生日期
            e.DataRow("性别") = Nothing  \'如果为空,则清除出生日期
            e.DataRow("年龄") = Nothing \'如果为空,则清除年龄
        Else
            \'否则从身份证号码列中提取出生日期
            e.DataRow("出生日期") = ReadBirthday(e.DataRow("身份证号"))
            e.DataRow("性别") = ReadSex(e.DataRow("身份证号"))
            Dim d As Date = ReadBirthday(e.DataRow("身份证号"))
            Dim y As Integer = d.year
            If format(d, "MMdd") <= Format(Date.Today, "MMdd") Then
                e.DataRow("年龄") = Date.Today.Year - y
            Else
                e.DataRow("年龄") = Date.Today.Year - y -1
            End If
        End If
End Select


--  作者:菜鸟的梦
--  发布时间:2017/8/20 21:47:00
--  
千言万语只有两字。谢谢!
--  作者:菜鸟的梦
--  发布时间:2017/8/20 21:49:00
--  
千言万语只有两字。谢谢帮助消化!
--  作者:菜鸟的梦
--  发布时间:2017/8/21 23:49:00
--  求助 老师,用了你的代码,每次打开,年龄和出生日期没有记录呢?
这个性别都有显示,年龄和出生日期没有显示,我删除了数据,重新编辑也是这样,
我看了很久,没明白,
图片点击可在新窗口打开查看此主题相关图片如下:fff.jpg
图片点击可在新窗口打开查看
--  作者:有点蓝
--  发布时间:2017/8/22 8:50:00
--  
年龄和出生日期不要用表达式列,改为数据列。


另外身份证号不能使用数值列,有些身份证最后一位是字母的

--  作者:有点甜
--  发布时间:2017/8/22 10:35:00
--  

http://www.foxtable.com/webhelp/scr/1380.htm

 


--  作者:菜鸟的梦
--  发布时间:2017/8/22 15:22:00
--  谢谢老师,一眼看出问题在哪儿。
谢谢老师,一眼看出问题在哪儿。就是不能用表达式。