Foxtable(狐表)用户栏目专家坐堂 → ValidPIN不可用对15位的旧身份证号码进行验证么


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

主题:ValidPIN不可用对15位的旧身份证号码进行验证么

美女呀,离线,留言给我吧!
susu312
  1楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:四尾狐 帖子:997 积分:6752 威望:0 精华:0 注册:2018/6/8 16:17:00
ValidPIN不可用对15位的旧身份证号码进行验证么  发帖心情 Post By:2018/9/2 22:04:00 [显示全部帖子]

老师 ,如题?ValidPIN不可用对15位的旧身份证号码进行验证么

如果确实不行的话,那15位的该如何验证呀?我还以为都可以验证?


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


加好友 发短信
等级:四尾狐 帖子:997 积分:6752 威望:0 精华:0 注册:2018/6/8 16:17:00
  发帖心情 Post By:2018/9/4 14:03:00 [显示全部帖子]

以下是引用有点甜在2018/9/2 23:07:00的发言:

http://foxtable.com/bbs/dispbbs.asp?BoardID=2&ID=26250&skin=0

 

[此贴子已经被作者于2018/9/2 23:06:52编辑过]

 

老师,,对于身份证那个text控件的,validating和keydown,应该如何写呀,因为 ,它可能是15位也可能是18位,它可能只有数字,也可能含有字母,所以,我就实在理不清了


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


加好友 发短信
等级:四尾狐 帖子:997 积分:6752 威望:0 精华:0 注册:2018/6/8 16:17:00
  发帖心情 Post By:2018/9/4 15:13:00 [显示全部帖子]

以下是引用有点甜在2018/9/4 14:27:00的发言:

看懂2楼的代码。

 

判断e.sender.text的length是15还是18位。

 

老师,我在表的datacolchanged事件中写代码,但是,貌似没效果,您帮我看看哪里不对哈

If e.DataCol.Name = "cardID"  Then
    If e.DataRow.IsNull("cardID") Then
        e.DataRow("birth") = Nothing  '如果为空,则清除出生日期
        e.DataRow("age") = Nothing    '如果为空,则清除年龄
    Else
        Dim d As String = e.DataRow("cardID")
        ''验证输入的字符是否正确
        For i As Integer = 0 To d.Length - 1
            If Char.IsLetterOrDigit(d.Chars(i)) = False Then
                Messagebox.Show("身份证号码不正确!")
                Return
            End If
        Next

        ''执行15位升18位
        Dim r2,r3,r4,r5 As String
        If d.length = 15 Then
            Dim r1 As String = d.Substring(6,2)
            If r1 = "00" Then
            Else
                d = d.Insert(6,"19")
                r2 = StrReverse(d)
                For i As Integer = 17 To 1 Step -1
                    r3 = r2.Chars(i-1)
                    r4 = r4 + ( r3 * ((2 ^ i) Mod 11 )) '加权因子
                Next
            End If
            r4 = r4 Mod 11
            If r4 = "0" Then
                r4 = "1"
            ElseIf r4 = "1" Then
                r4 = "0"
            ElseIf r4 = "2" Then
                r4 = "X"
            ElseIf r4 = "3" Then
                r4 = "9"
            ElseIf r4 = "4" Then
                r4 = "8"
            ElseIf r4 = "5" Then
                r4 = "7"
            ElseIf r4 = "6" Then
                r4 = "6"
            ElseIf r4 = "7" Then
                r4 = "5"
            ElseIf r4 = "8" Then
                r4 = "4"
            ElseIf r4 = "9" Then
                r4 = "3"
            ElseIf r4 = "10" Then
                r4 = "2"
            End If
            r5 = d.SubString(d.length - 6,6) '6位密码
            d = d & r4 '15位升18位
        End If
       
        If ValidPIN(d) Then
            e.DataRow("birth") = ReadBirthday(e.DataRow("cardID"))
            e.DataRow("sex") = ReadSex(e.DataRow("cardID"))

             Dim d1 As Date = ReadBirthday(e.DataRow("cardID"))
             Dim y As Integer = d1.year
             If format(d1, "MMdd") <= Format(Date.Today, "MMdd") Then
                       e.DataRow("age") = Date.Today.Year - y
             Else
                       e.DataRow("age") = Date.Today.Year - y -1
             End If

        Else
              messagebox.show("身份证号码不正确!")
              Return
        End If
    End If
End If


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


加好友 发短信
等级:四尾狐 帖子:997 积分:6752 威望:0 精华:0 注册:2018/6/8 16:17:00
  发帖心情 Post By:2018/9/4 15:26:00 [显示全部帖子]

以下是引用有点甜在2018/9/4 15:20:00的发言:
你需要怎样的效果?目前的效果是什么?

 

 

需求:

 

1、身份证输入时进行验证,允许输入15位或者18位,多输入不允许,允许输入字母

2、身份证输入时,如果正确,则出生年月和年龄也对自动写入表

 

 

现在这些都没有实现


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


加好友 发短信
等级:四尾狐 帖子:997 积分:6752 威望:0 精华:0 注册:2018/6/8 16:17:00
  发帖心情 Post By:2018/9/4 16:26:00 [显示全部帖子]

以下是引用有点甜在2018/9/4 15:28:00的发言:
上传实例测试。

 

我在表的datacolChanged事件中加入了代码,在窗口中身份证控件的validating 和keydown中加入了代码,但是这个就是老是说e有啥问题 ,这个是我之前验证18位的身份证号,但是最近发现有15位的就不行 了。

 

而且身份证还可以包括字母,这个也没有验证

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


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


加好友 发短信
等级:四尾狐 帖子:997 积分:6752 威望:0 精华:0 注册:2018/6/8 16:17:00
  发帖心情 Post By:2018/9/4 17:59:00 [显示全部帖子]

以下是引用有点甜在2018/9/4 16:47:00的发言:
If  e.DataCol.Name = "身份证号"
    If e.DataRow.IsNull("身份证号") Then  '身份证号码是否为空
        e.DataRow("出生年月") = Nothing  '如果为空,则清除出生日期
        e.DataRow("年龄") = Nothing '如果为空,则清除年龄
    Else
        Dim d As String = e.DataRow("身份证号")
        Dim r2,r3,r4,r5 As String
        If d.length = 15 Then
            Dim r1 As String = d.Substring(6,2)
            If r1 = "00" Then
            Else
                d = d.Insert(6,"19")
                r2 = StrReverse(d)
                For i As Integer = 17 To 1 Step -1
                    r3 = r2.Chars(i-1)
                    r4 = r4 + ( r3 * ((2 ^ i) Mod 11 )) '加权因子
                Next
            End If
            r4 = r4 Mod 11
            If r4 = "0" Then
                r4 = "1"
            ElseIf r4 = "1" Then
                r4 = "0"
            ElseIf r4 = "2" Then
                r4 = "X"
            ElseIf r4 = "3" Then
                r4 = "9"
            ElseIf r4 = "4" Then
                r4 = "8"
            ElseIf r4 = "5" Then
                r4 = "7"
            ElseIf r4 = "6" Then
                r4 = "6"
            ElseIf r4 = "7" Then
                r4 = "5"
            ElseIf r4 = "8" Then
                r4 = "4"
            ElseIf r4 = "9" Then
                r4 = "3"
            ElseIf r4 = "10" Then
                r4 = "2"
            End If
            r5 = d.SubString(d.length - 6,6) '6位密码
            d = d & r4 '15位升18位
        End If
        If ValidPIN(d) = False Then
            msgbox("身份证输入错误")
        Else
            e.DataRow("出生年月") = ReadBirthday(d)
            Dim dd As Date = ReadBirthday(d)
            Dim y As Integer = dd.year
            If format(dd, "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 If
End If

e是private,在上下文中不可访问


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


加好友 发短信
等级:四尾狐 帖子:997 积分:6752 威望:0 精华:0 注册:2018/6/8 16:17:00
  发帖心情 Post By:2018/9/4 19:03:00 [显示全部帖子]

以下是引用有点甜在2018/9/4 18:00:00的发言:

 

1、关闭项目重新打开;

 

2、代码写到datacolchanged事件。

 

 

老师,那我其实在身份证的控件中,validating事件就可以不写了?还是我在validating中也转换为18位?


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


加好友 发短信
等级:四尾狐 帖子:997 积分:6752 威望:0 精华:0 注册:2018/6/8 16:17:00
  发帖心情 Post By:2018/9/4 21:00:00 [显示全部帖子]

以下是引用有点蓝在2018/9/4 20:31:00的发言:
可以把上面的用法放到一个函数中。在需要验证的地方调用即可

Dim d As String = Args(0)
Dim r2,r3,r4,r5 As String
If d.length = 15 Then
      Dim r1 As String = d.Substring(6,2)
            If r1 = "00" Then
       Else
            d = d.Insert(6,"19")
            r2 = StrReverse(d)
            For i As Integer = 17 To 1 Step -1
                r3 = r2.Chars(i-1)
                r4 = r4 + ( r3 * ((2 ^ i) Mod 11 )) '加权因子
                Next
            End If
            r4 = r4 Mod 11
            If r4 = "0" Then
                r4 = "1"
            ElseIf r4 = "1" Then
                r4 = "0"
            ElseIf r4 = "2" Then
                r4 = "X"
            ElseIf r4 = "3" Then
                r4 = "9"
            ElseIf r4 = "4" Then
                r4 = "8"
            ElseIf r4 = "5" Then
                r4 = "7"
            ElseIf r4 = "6" Then
                r4 = "6"
            ElseIf r4 = "7" Then
                r4 = "5"
            ElseIf r4 = "8" Then
                r4 = "4"
            ElseIf r4 = "9" Then
                r4 = "3"
            ElseIf r4 = "10" Then
                r4 = "2"
            End If
            r5 = d.SubString(d.length - 6,6) '6位密码
            d = d & r4 '15位升18位
End If

If ValidPIN(d)  Then
    Return  True
Else
    Return  False
End If

 

 

 

老师,我这么写有啥问题么?为啥执行的时候,输入参数,输出为空   Functions.Execute("transfer",00)


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


加好友 发短信
等级:四尾狐 帖子:997 积分:6752 威望:0 精华:0 注册:2018/6/8 16:17:00
  发帖心情 Post By:2018/9/4 22:08:00 [显示全部帖子]

以下是引用有点蓝在2018/9/4 21:08:00的发言:
If Functions.Execute("aa","00") Then
    msgbox("正确")
Else
    msgbox(False)
End If

 

 

老师,我在表的datacolchanged事件中写代码如下:

 

If  e.DataCol.Name = "cardID"
    If e.DataRow.IsNull("cardID") Then  '身份证号码是否为空
        e.DataRow("birth") = Nothing  '如果为空,则清除出生日期
        e.DataRow("age") = Nothing '如果为空,则清除年龄
    Else
        Dim d As String = e.DataRow("cardID")
        If  Functions.Execute("transfer",d) Then
             e.DataRow("birth") = ReadBirthday(d)
             Dim dd As Date = ReadBirthday(d)
             Dim y As Integer = dd.year
             If format(dd, "MMdd") <= Format(Date.Today, "MMdd") Then
                e.DataRow("age") = Date.Today.Year - y
             Else
                e.DataRow("age") = Date.Today.Year - y -1
             End If
        Else
           e.DataRow("cardID") = Nothing
           e.DataRow("birth") = Nothing  '如果为空,则清除出生日期
           e.DataRow("age") = Nothing '如果为空,则清除年龄
        End If
    End If
End If

 

然后在新增窗口中,比如我输入身份证号90,然后年龄显示2017?应该啥也不显示?

 

2、老师,我如何控制身份证那里只输入数字,或者最后一位为X

 

 

 


图片点击可在新窗口打开查看此主题相关图片如下:1.png
图片点击可在新窗口打开查看

 

tansfer函数在验证的时候报错了。

[此贴子已经被作者于2018/9/4 22:16:33编辑过]

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


加好友 发短信
等级:四尾狐 帖子:997 积分:6752 威望:0 精华:0 注册:2018/6/8 16:17:00
  发帖心情 Post By:2018/9/4 22:37:00 [显示全部帖子]

以下是引用有点蓝在2018/9/4 22:19:00的发言:
测试没有问题。上传实例说明

如果是窗口,可以在控件Validating添加验证

老师,你输入全X,18位试试?真的不报错么?


 回到顶部
总数 13 1 2 下一页