我想知道算法,谢谢!
解决方案 »
- 为什么我用Winsock传送文件总是出现这样的问题?
- 关于在查询分析器中利用查询语句把表输出到EXCEL中,急救。。。。。。。。。
- 无法关闭程序。如果正在调试程序,请首先恢复操作或关闭调试程序 为什么会出车中错误?
- 新人,请求帮助!!!(送100分)
- TreeView节点显示问题
- 请问Text box控件如果多行的话
- 获得窗体中控件的句柄后如何给该控件发送命令,如单击按钮命令,写文本框命令,要源代码,谢谢!
- vb查询注册表问题 我手里的程序见下但是调不通 请帮忙?
- API问题(操作注册表)
- VB访问SQL2000数据库的问题,拜谢了
- 怎样实现文字在printer上旋转????
- sql-server数据库加密的问题,请各位兄弟多多指教!
2 末尾加上校验码。插入年份世纪值你自己就可以做。我给你求校验值的函数:Const Wid As String = "79a584216379a5842"
Const C9 As String = "10X98765432"'for check code for ID number
Public Function Get_Check(ByVal x As String) As String
Dim Temp As Long
For i = 1 To 17
Temp = Temp + Val(Mid(x, i, 1)) * Val("&H" & Mid(Wid, i, 1))
Next i
Get_Check = Left(x, 17) & Mid(C9, (Temp Mod 11) + 1, 1)
End Function
If Mid(num, 9, 2) > 12 Or Mid(num, 11, 2) > 31 Then
' MsgBox "你输入的身份证号信息有错误,错误原因:数据错误!", vbCritical, "错误"
IdNum15To18 = "错误:数据中的 " & Mid(num, 9, 4) & " 校验错"
Exit Sub
Else
num7 = 1 '第七个值
num8 = 9 '第八个值
num1 = Left(num, 6) '取前六个数字
num2 = Right(num, 9) '取后九个数字
numadd = Left(num, 1) * 7 + Mid(num, 2, 1) * 9 + _
Mid(num, 3, 1) * 10 + Mid(num, 4, 1) * 5 + _
Mid(num, 5, 1) * 8 + Mid(num, 6, 1) * 4 + _
num7 * 2 + num8 * 1 + Mid(num, 7, 1) * 6 + _
Mid(num, 8, 1) * 3 + Mid(num, 9, 1) * 7 + _
Mid(num, 10, 1) * 9 + Mid(num, 11, 1) * 10 + _
Mid(num, 12, 1) * 5 + Mid(num, 13, 1) * 8 + _
Mid(num, 14, 1) * 4 + Right(num, 1) * 2
nummod = numadd Mod 11 '和11求余数
If nummod = 0 Then num3 = 1
If nummod = 1 Then num3 = 0
If nummod = 2 Then num3 = "X"
If nummod = 3 Then num3 = 9
If nummod = 4 Then num3 = 8
If nummod = 5 Then num3 = 7
If nummod = 6 Then num3 = 6
If nummod = 7 Then num3 = 5
If nummod = 8 Then num3 = 4
If nummod = 9 Then num3 = 3
If nummod = 10 Then num3 = 2
IdNum15To18 = num1 & "19" & num2 & num3
End If
End Function
1 1
2 2
3 4
4 8
5 5
6 10
7 9
8 7
9 3
10 6
11 1
12 2
13 4
14 8
15 5
16 10
17 9
18 7余数和校验码对照表:
0 1
1 0
2 X
3 9
4 8
5 7
6 6
7 5
8 4
9 3
10 2