15位升18位是在原15位的生日的年份上加上19,比如“420106880808011",生日是88年8月8日,加上生日后变成420106'19880808'011,成了17位再加上末尾的一位校验位,校验位VB代码如下: Private Function checkCode(ByVal NumStr As String) As String '计算校验码 If Len(NumStr) < 17 Then Exit Function Dim Wi() As String Dim arrVerifyCode() As String arrVerifyCode = Split("1,0,x,9,8,7,6,5,4,3,2", ",") Wi = Split("7,9,10,5,8,4,2,1,6,3,7,9,10,5,8,4,2", ",") Dim t As Long Dim i As Integer Dim c As String For i = 1 To 17 c = Mid(NumStr, i, 1) If IsNumeric(c) = False Then Exit Function Else t = t + CLng(c) * CLng(Wi(i - 1)) End If Next i
t = t Mod 11 checkCode = arrVerifyCode(t)
End Function 根据上面的函数,计算出前17位的校验码,即checkCode("42010619880808011")=1,得到18位身份证号:420106198808080111
Private Function checkCode(ByVal NumStr As String) As String
'计算校验码
If Len(NumStr) < 17 Then Exit Function
Dim Wi() As String
Dim arrVerifyCode() As String
arrVerifyCode = Split("1,0,x,9,8,7,6,5,4,3,2", ",")
Wi = Split("7,9,10,5,8,4,2,1,6,3,7,9,10,5,8,4,2", ",")
Dim t As Long
Dim i As Integer
Dim c As String
For i = 1 To 17
c = Mid(NumStr, i, 1)
If IsNumeric(c) = False Then
Exit Function
Else
t = t + CLng(c) * CLng(Wi(i - 1))
End If
Next i
t = t Mod 11
checkCode = arrVerifyCode(t)
End Function
根据上面的函数,计算出前17位的校验码,即checkCode("42010619880808011")=1,得到18位身份证号:420106198808080111
很简单
请看官方的身份证号规范