第1个回答 推荐于2016-01-12
设text1用来输入15位身份证,text2用来输出18位身份证,command1按钮开始转换:
Private Sub Command1_Click()
Dim t As Long, s As String
If Len(Text1.Text) <> 15 Then
MsgBox "请输入15位身份证号!"
Exit Sub
End If
If Not IsNumeric(Text1.Text) Then
MsgBox "请输入数字"
Exit Sub
End If
If Val(Mid(Text1.Text, 9, 2)) > 12 Or Val(Mid(Text1.Text, 9, 2)) = 0 Or _
Val(Mid(Text1.Text, 11, 2)) > 31 Or Val(Mid(Text1.Text, 9, 2)) = 0 Then
MsgBox "身份证格式错误"
Exit Sub
End If
t = (Val(Mid(Text1.Text, 1, 1)) * 7 + Val(Mid(Text1.Text, 2, 1)) * 9 + _
Val(Mid(Text1.Text, 3, 1)) * 10 + Val(Mid(Text1.Text, 4, 1)) * 5 + _
Val(Mid(Text1.Text, 5, 1)) * 8 + Val(Mid(Text1.Text, 6, 1)) * 4 + _
Val(Mid(Text1.Text, 7, 1)) * 6 + Val(Mid(Text1.Text, 8, 1)) * 3 + _
Val(Mid(Text1.Text, 9, 1)) * 7 + Val(Mid(Text1.Text, 10, 1)) * 9 + _
Val(Mid(Text1.Text, 11, 1)) * 10 + Val(Mid(Text1.Text, 12, 1)) * 5 + _
Val(Mid(Text1.Text, 13, 1)) * 8 + Val(Mid(Text1.Text, 14, 1)) * 4 + _
Val(Mid(Text1.Text, 15, 1)) * 2 + 1 * 2 + 9 * 1) Mod 11
s = Mid("10X98765432", t + 1, 1)
Text2.Text = Mid(Text1.Text, 1, 6) + "19" + Mid(Text1.Text, 7, 9) + s
End Sub
注:这里转换的身份证号都是2000年以前的,估计2000年以后的身份证没有15位的了吧!本回答被提问者采纳