|
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用 · 内置多项VBA编程加强工具 ★ 免费下载 ★ ★ 使用手册★
计算身份证校验码
(抄录)计算身份证校验码 http://club.excelhome.net/thread-151935-1-1.html
'计算身份证校验码
'中国公民的18位身份证号码每一位有代表的意义,其中身份证号码的最后一位是校验码,网上很多文章介绍,计算都很复杂,在此就不多说。
'其实算法是这样:把前17位的每一个数字和一串加权因子相乘,计算这些乘积的和(S),加权因子是自右向左,分别是2,2^2,2^3,……2^17,大于10的就模11。用12加上这些乘积的和,再模11得到的数字作为校验码,如果是10则用X表示,如果>10,再模11。
'用vba很容易写出计算和校验函数
Function vsm(olds) As String 'olds是前17位码
M_olds = olds 'Left(olds, 17)
If Len(M_olds) = 18 Then
Dim i, ii, w, s, cs As Integer
w = 1
s = 0
For i = 1 To 17
ii = 18 - i
w = (w * 2) Mod 11
cs = Asc(Mid$(M_olds, 18 - i, 1)) - 48
If cs >= 0 And cs < 10 Then
s = s + cs * w
Else
vsm = "第" & ii & "位,不是数字!"
i = 20
End If
Next
If i = 18 Then
s = (12 - s Mod 11) Mod 11
M_vsm = LTrim$(Str$(s))
If s = 10 Then
M_vsm = "X"
If Mid(olds, 18, 1) = "X" Then vsm = "正确!" Else vsm = "错!末位是:X" 'Or Mid(olds, 18, 1) = "x"
Else
If Mid(olds, 18, 1) = M_vsm Then vsm = "正确!" Else vsm = "错!末位是:" & M_vsm
End If
End If
Else
vsm = "位数不对!"
End If
End Function |
|