Foxtable(狐表)用户栏目专家坐堂 → 请教狐狸爸爸:身份证号码有效性验证,提取籍贯、性别、出生日期、年龄信息


  共有16238人关注过本帖树形打印复制链接

主题:请教狐狸爸爸:身份证号码有效性验证,提取籍贯、性别、出生日期、年龄信息

帅哥哟,离线,有人找我吗?
狐狸爸爸
  11楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:管理员 帖子:47448 积分:251054 威望:0 精华:91 注册:2008/6/17 17:14:00
  发帖心情 Post By:2012/8/10 12:16:00 [只看该作者]

我不懂身份证验证规则,没有办法帮你改。

籍贯是无法提取的,除非你有籍贯的编码数据库,出生日期可以提取,提取了出生日期,年龄也就出来了。

提取出生日期:

 

http://www.foxtable.com/help/topics/1452.htm

[此贴子已经被作者于2012-8-10 12:18:28编辑过]

 回到顶部
帅哥哟,离线,有人找我吗?
lipiti
  12楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:童狐 帖子:224 积分:2808 威望:0 精华:2 注册:2012/3/14 15:55:00
  发帖心情 Post By:2012/8/10 12:38:00 [只看该作者]

我已经把 身份证籍贯编码.xls 数据上传了,大家可以一起研究一下!

 回到顶部
帅哥哟,离线,有人找我吗?
lkqing
  13楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:一尾狐 帖子:492 积分:4243 威望:0 精华:0 注册:2008/9/1 20:47:00
  发帖心情 Post By:2012/8/10 13:11:00 [只看该作者]

这是我在用的,试试

    If e.DataCol.Name = "身份证号" Then
        If e.DataRow.IsNull("身份证号") Then
            e.DataRow("出生年月") = Nothing
            e.DataRow("性别") = Nothing
            e.DataRow("年龄") = Nothing
            e.DataRow("户口地址") = Nothing
            MessageBox.Show("请输入身份证号码")
            Return
        ElseIf e.NewValue.SubString(6,2) <> 19 Then
            MessageBox.Show("身份证号码格式有误,请检查")
            Return
        ElseIf e.NewValue.Length = 18 Then
            e.DataRow("出生年月") = ReadBirthday(e.DataRow("身份证号"))
            e.DataRow("性别") = ReadSex(e.DataRow("身份证号"))
        Else
            MessageBox.Show("身份证号码位数有误,请检查")
            Return
        End If
        If e.NewValue <> Nothing Then
            With DataTables("sfz")
                .LoadFilter = "[BM] = '" & e.NewValue.SubString(0,6) & "'"
                .Load()
            End With
            Dim dr As DataRow
            dr = DataTables("sfz").Find("[BM] = '" & e.NewValue.SubString(0,6) & "'")
            If dr IsNot Nothing Then
                e.DataRow("户口地址") = dr("DQ")
            End If
            Dim Wi() As Integer = {7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2}
            Dim Ci() As Char = {"1", "0", "X", "9", "8", "7", "6", "5", "4", "3", "2"}
            Dim i As Integer
            Dim Sum As Integer = 0
            For i = 0 To 16
                Sum += (CType(e.NewValue.Chars(i).ToString, Integer) * Wi(i))
            Next i
            Dim r As Integer
            r = Sum Mod 11
            If e.NewValue.Chars(17) <> Ci(r) Then
                If e.NewValue.Chars(17) = "X" Then
                    MessageBox.Show("身份证可能是假的,或 X 字符大小写有误")
                Else
                    MessageBox.Show("身份证可能是假的")
                End If
            End If
        End If
    End If


 回到顶部
帅哥哟,离线,有人找我吗?
lipiti
  14楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:童狐 帖子:224 积分:2808 威望:0 精华:2 注册:2012/3/14 15:55:00
  发帖心情 Post By:2012/8/10 14:44:00 [只看该作者]

谢谢13楼兄弟的身份证号码应用代码分享

 回到顶部
帅哥哟,离线,有人找我吗?
狐狸爸爸
  15楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:管理员 帖子:47448 积分:251054 威望:0 精华:91 注册:2008/6/17 17:14:00
  发帖心情 Post By:2012/8/10 14:45:00 [只看该作者]

有了数据库,就好办了:

 

Select Case e.DataCol.name
    Case "身份证"
        If e.DataRow.IsNull("身份证") Then
            e.DataRow("籍贯") = Nothing
        Else
            Dim bm As String = e.DataRow("身份证").SubString(0,6)
            Dim dr As DataRow = DataTables("身份证籍贯编码").Find("籍贯编码 = '" & bm & "'")
            If dr IsNot Nothing Then
                e.DataRow("籍贯") = dr("籍贯")
            End If
        End If
End Select

 

 

 下载信息  [文件大小:   下载次数: ]
图片点击可在新窗口打开查看点击浏览该文件:管理项目25.rar


 回到顶部
帅哥哟,离线,有人找我吗?
lipiti
  16楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:童狐 帖子:224 积分:2808 威望:0 精华:2 注册:2012/3/14 15:55:00
  发帖心情 Post By:2012/8/10 15:29:00 [只看该作者]

哈哈,谢谢狐狸爸爸的大师级技术,终于搞定了!

 回到顶部
帅哥哟,离线,有人找我吗?
shenyl0211
  17楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:四尾狐 帖子:977 积分:6835 威望:0 精华:0 注册:2012/4/2 21:49:00
  发帖心情 Post By:2019/12/3 9:44:00 [只看该作者]

1、如果籍贯只是精确到省份,就应该用7楼的表达式。
2、如果籍贯要精确到区县,则狐表提供的籍贯数据远远不够,只有3480行,少了2400行。比如3422开头的就没有。

 回到顶部
美女呀,离线,留言给我吧!
小小鸟
  18楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:幼狐 帖子:112 积分:1116 威望:0 精华:0 注册:2011/5/14 14:47:00
  发帖心情 Post By:2020/3/14 16:15:00 [只看该作者]

太感谢了!

 回到顶部
帅哥哟,离线,有人找我吗?
程兴刚
  19楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信 一级勋章
等级:超级版主 帖子:7235 积分:40574 威望:0 精华:16 注册:2008/8/31 23:23:00
  发帖心情 Post By:2020/3/14 16:45:00 [只看该作者]

以下是引用lipiti在2012/8/10 15:29:00的发言:
哈哈,谢谢狐狸爸爸的大师级技术,终于搞定了!

岂止是大师级技术,这可是狐表鼻祖!

 回到顶部
总数 19 上一页 1 2