ExcelTip.Net留存知识帖 ---【注:附件之前被网盘供应商清空后,现已修复-现已修复-现已修复为本地下载!】
现在位置:首页 > 我的酷贴 > Excel VBA > 18 位身份证最后一位有效性验证的自定义函数

18 位身份证最后一位有效性验证的自定义函数

作者:绿色风 分类: 时间:2022-08-18 浏览:92
楼主
wise
Q: 18 位身份证最后一位有效性验证的自定义函数。
A:ALT+F11→插入模块→模块中输入以下代码:


  1. Function isTrue(bCode As String) As String
  2. Dim wi(1 To 17) As Integer
  3. Dim ai(1 To 11) As String
  4. wi(1) = 7
  5. wi(2) = 9
  6. wi(3) = 10
  7. wi(4) = 5
  8. wi(5) = 8
  9. wi(6) = 4
  10. wi(7) = 2
  11. wi(8) = 1
  12. wi(9) = 6
  13. wi(10) = 3
  14. wi(11) = 7
  15. wi(12) = 9
  16. wi(13) = 10
  17. wi(14) = 5
  18. wi(15) = 8
  19. wi(16) = 4
  20. wi(17) = 2
  21. ai(1) = "1"
  22. ai(2) = "0"
  23. ai(3) = "X"
  24. ai(4) = "9"
  25. ai(5) = "8"
  26. ai(6) = "7"
  27. ai(7) = "6"
  28. ai(8) = "5"
  29. ai(9) = "4"
  30. ai(10) = "3"
  31. ai(11) = "2"
  32. For i = 1 To 17
  33. b = Mid(bCode, i, 1)
  34. w = wi(i)
  35. sigma = sigma + (b * w)
  36. Next
  37. Number = Int(sigma Mod 11)
  38. If LCase(Right(bCode, 1)) = LCase(ai(Number + 1)) Then
  39. isTrue = "合法"
  40. Else
  41. isTrue = "不合法"
  42. End If
  43. End Function
2楼
gouweicao78
公民身份号码是特征组合码,由十七位数字本体码和一位校验码组成。排列顺序从左至右依次为:六位数字地址码,八位数字出生日期码,三位数字顺序码和一位数字校验码。

校验方法:
(1)十七位数字本体码加权求和公式
S = Sum(Ai * Wi), i = 0, ... , 16 ,先对前17位数字的权求和
Ai:表示第i位置上的身份证号码数字值
Wi:表示第i位置上的加权因子
Wi: 7 9 10 5 8 4 2 1 6 3 7 9 10 5 8 4 2

(2)计算模
Y = mod(S, 11)

(3)通过模得到对应的校验码
     Y: 0 1 2 3 4 5 6 7 8 9 10
校验码: 1 0 X 9 8 7 6 5 4 3 2
3楼
amulee
用MID函数不是很好么。如何编写身份证号码升为18位的自定义函数? http://www.exceltip.net/thread-7615-1-1.html
  1. Function IsTrue(Rng)
  2.     On Error GoTo AA
  3.     Dim StrT$, i%, SumM&
  4.     If Len(Rng) = 18 Then
  5.         StrT = Left(Rng, 17)
  6.         For i = 1 To 17
  7.             SumM = CInt(Mid(StrT, i, 1)) * 2 ^ (18 - i) + SumM
  8.         Next i
  9.         If UCase(Right(Rng, 1)) = UCase(Mid("10X98765432", (SumM Mod 11) + 1, 1)) Then
  10.             IsTrue = "合法"
  11.         Else
  12.             IsTrue = "不合法"
  13.         End If
  14.     Else
  15. AA:
  16.         IsTrue = "原始号码不正确"
  17.     End If
  18. End Function
4楼
gouweicao78
身份证在A1单元格:
  1. =IF(MID("0X987654321",MOD(SUMPRODUCT(MID(A1,ROW($1:$17),1)*{7;9;10;5;8;4;2;1;6;3;7;9;10;5;8;4;2})-1,11)+1,1)=RIGHT(A1),,"不")&"合法"
5楼
三灶文化技校
受用了。谢谢楼主。
6楼
fanfanly
好厉害**

免责声明

有感于原ExcelTip.Net留存知识的价值及部分知识具有的时间限定性因素, 经与ExcelTip.Net站长Apolloh商议并征得其同意, 现将原属ExcelTip.Net的知识帖采集资料于本站点进行展示, 供有需要的人士查询使用,也慰缅曾经的论坛时代。 所示各个帖子的原作者如对版权有异议, 可与本人沟通提出,或于本站点留言,我们会尽快处理。 在此,感谢ExcelTip.Net站长Apolloh的支持,感谢本站点所有人**绿色风(QQ:79664738)**的支持与奉献,特此鸣谢!
------本人网名**KevinChengCW(QQ:1210618015)**原ExcelTip.Net总版主之一

评论列表
sitemap