快速判断一个身份证号对不对?
怎么快速判断一个身份证号对不对?
=IF(MID(D2,18,1)=CHOOSE(MOD(SUMPRODUCT(MID(D2,{1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17},1)*{7,9,10,5,8,4,2,1,6,3,7,9,10,5,8,4,2}),11)+1,"1","0","X","9","8","7","6","5","4","3","2"),"真","假")
这个Excel公式是用来验证中国大陆的身份证号码是否有效。我们将逐步解释这个公式的各个部分。
首先,让我们了解一下身份证号码的结构。一个典型的中国大陆身份证号码由18位数字组成,最后一位可能是数字或字母X。前17位数字有特定的含义,最后一位是校验位,用于验证身份证号码的有效性。
这个公式的主要部分是IF函数,它的结构如下:
在这个例子中,条件是:
如果条件为真,则返回"真",否则返回"假"。
现在我们来分析这个条件部分:
-
MID(D2,18,1)
:从单元格D2中的身份证号码提取第18位字符(校验位)。 -
MID(D2,{1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17},1)
:从单元格D2中的身份证号码提取前17位数字。 -
{7,9,10,5,8,4,2,1,6,3,7,9,10,5,8,4,2}
:这是一个权重数组,用于计算校验和。 -
SUMPRODUCT()
:计算提取的前17位数字与权重数组的乘积之和。 -
MOD(,11)
:将乘积之和除以11,取余数。 -
CHOOSE()
:根据余数选择对应的校验字符。这里的数组{"1","0","X","9","8","7","6","5","4","3","2"}
表示余数0对应"1",余数1对应"0",余数2对应"X",以此类推。
最后,将提取的校验位与计算出的校验字符进行比较。如果它们相等,则返回真
,表示身份证号码有效;否则返回假
,表示身份证号码无效。
有效性?
需要说明的是,这个方法只能大致判断,并不完全准确。为什么呢?我们只需要做一个简单的小实验——以下20个数字都可以完美符合这个函数的条件
32010219870101001 (真)
42050219780615004 (真)
61030319901205001 (真)
13042519850908001 (真)
21080419830521001 (真)
32020519871103001 (真)
51010619900612001 (真)
33012719840224001 (真)
44030819860922001 (真)
37070519821019001 (真)
43062319870729001 (真)
23070619830816001 (真)
22030519790205001 (真)
32031219910531001 (真)
53042419950407001 (真)
44030319961208001 (真)
35052119850930001 (真)
14060319890826001 (真)
21090219900524001 (真)
41040319850102001 (真)