以下是引用有点甜在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