最近研究了一下身份证号码升级的规则,真的很有趣。和17较上劲了。 Function 升级(Rng) On Error GoTo AA Dim StrT$, i%, SumM& If Len(Rng) = 18 Then 升级 = Rng ElseIf Len(Rng) = 15 Then StrT = Replace(Rng, Left(Rng, 6), Left(Rng, 6) & 19) For i = 1 To 17 SumM = CInt(Mid(StrT, i, 1)) * 2 ^ (18 - i) + SumM Next i 升级 = StrT & Mid("10X98765432", (SumM Mod 11) + 1, 1) Else AA: 升级 = "原始号码不正确" End If End Function 再提供一个函数解法: =IF(LEN(A1)=15,REPLACE(A1,7,,19)&MID("10X98765432",MOD(SUM(MID(REPLACE(A1,7,,19),ROW(INDIRECT("1:17")),1)*2^(18-ROW(INDIRECT("1:17")))),11)+1,1),A1)