作者:绿色风
分类:
时间:2022-08-18
浏览:92
楼主 wise |
Q: 18 位身份证最后一位有效性验证的自定义函数。 A:ALT+F11→插入模块→模块中输入以下代码:
- Function isTrue(bCode As String) As String
- Dim wi(1 To 17) As Integer
- Dim ai(1 To 11) As String
- wi(1) = 7
- wi(2) = 9
- wi(3) = 10
- wi(4) = 5
- wi(5) = 8
- wi(6) = 4
- wi(7) = 2
- wi(8) = 1
- wi(9) = 6
- wi(10) = 3
- wi(11) = 7
- wi(12) = 9
- wi(13) = 10
- wi(14) = 5
- wi(15) = 8
- wi(16) = 4
- wi(17) = 2
- ai(1) = "1"
- ai(2) = "0"
- ai(3) = "X"
- ai(4) = "9"
- ai(5) = "8"
- ai(6) = "7"
- ai(7) = "6"
- ai(8) = "5"
- ai(9) = "4"
- ai(10) = "3"
- ai(11) = "2"
- For i = 1 To 17
- b = Mid(bCode, i, 1)
- w = wi(i)
- sigma = sigma + (b * w)
- Next
- Number = Int(sigma Mod 11)
- If LCase(Right(bCode, 1)) = LCase(ai(Number + 1)) Then
- isTrue = "合法"
- Else
- isTrue = "不合法"
- End If
- 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
- Function IsTrue(Rng)
- On Error GoTo AA
- Dim StrT$, i%, SumM&
- If Len(Rng) = 18 Then
- StrT = Left(Rng, 17)
- For i = 1 To 17
- SumM = CInt(Mid(StrT, i, 1)) * 2 ^ (18 - i) + SumM
- Next i
- If UCase(Right(Rng, 1)) = UCase(Mid("10X98765432", (SumM Mod 11) + 1, 1)) Then
- IsTrue = "合法"
- Else
- IsTrue = "不合法"
- End If
- Else
- AA:
- IsTrue = "原始号码不正确"
- End If
- End Function
|
4楼 gouweicao78 |
身份证在A1单元格:- =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总版主之一