因此,可以通过下面这个公式来计算A1单元格中18位身份证号码的最后一位校验码:
=MID("10X98765432",1+MOD(SUMPRODUCT(MID(LEFT(A1,17),ROW($1:$17),1)*MOD(2^(18-ROW($1:$17)),11)),11),1)
通过这个公式计算得到的字符与A1当中实际的末位字符相对照,就可以判断这个身份证号码的有效性
通过这个算法,还可以计算得到一代身份证升级到二代身份证的号码结果,假定一代15位号码位于A1单元格内:
=REPLACE(A1,7,,19)&MID("10X98765432",1+MOD(SUMPRODUCT(MID(REPLACE(A1,7,,19),ROW($1:$17),1)*MOD(2^(18-ROW($1:$17)),11)),11),1)
在2013年1月1日以后,政策上不再允许使用一代身份证,15位号码将逐渐淡出视线,前面的许多公式都是为了自适应15位和18位两种号码而存在的,如果仅仅需要针对18位号码,这些公式将变得更简单。
验证输入:
=AND(LEN(A1)=18,ISNUMBER(-LEFT(A1,17)),OR(ISNUMBER(-A1),RIGHT(A1)="X"))
提取生日:
=TEXT(MID(A1,7,8),"0-00-00")+0
计算年龄:
=DATEDIF(TEXT(MID(A1,7,8),"0-00-00"),NOW(),"Y")
判别性别:
=IF(-1^MID(A1,15,3)=1,"女","男")
|