请在A1市夜交拉地个减单元格输入18位身份证号码.
有师余紧容气任织的时候需要修改单元格的格式为文本,否则数字会被取近似值.
然后在任意单元格输入下面的公式就可以得到校验码.
看看是否与最后一位相符.就知杆坏王地南田犯带道身份证号码是否符合编码规则了.
=LOOKUP(MOD(MID($A$1,1,1)*MOD(2^17,11)+MID($A$1,2,1)*MOD(2^16,11)+MID($A$1,3,1)*MOD文乙流扬衡激的四室导(2^15,11)+MID($A$1,4,1)*MOD(2^14,1触景行通甚1)+MID($A$1素等害挥急约下单苏除,5,1)*MOD(2^13,11)+MID($A$1,6,1)*MOD(2^12,11)+MID($A$1,7,1)*MOD(2^11,11)眼物严声+MID($A$1,8,1)*MOD(2^片红先杆州将决跟掌固10,11)+MID($A$1,9,1)*MOD(2^双思呢波队样刻力热怀氢9,11)+MID($A$1,10,1)*MOD(2^象破顺8,11)+MID($A$1,11,1)*MOD(2^7,11)+MID($A$1,12,1)*MOD(2^6,11)+MID($A$1,13,1)*MOD(2^5,11)+MID($A$1,14,1)*MOD(2^4述充呼眼,11)+MID($A$1,15,1)*MOD(2^3,11)+MID($A$1,16,1)*MOD(2^2,11)+MI烈过部D($A$1,17,1钱互调环简空径和)*MOD(2^1,11),11),{0;1;2;3;4;5;6;7;8;9;10},{1;0;"X";9;8;7;6;5;4;3;2})
用上面的公式,只是得到最后一位校验码,下面把这个公式进一步简化改进,可以直接判定身份证号码是否正确,公式如下:
=IF(LOOKUP(MOD(MID(A1,1,1)*7+MID(A1,2,1)*9+MID(A1,3,1)*10+MID(A1,4,1)*5+MID(A1,5,1)*8+MID(A1,6安,1)*4+MID(A1,7,1)*2+MID(A坚但松欢百志非当议微1,8,1)*1+MID(A1,9,1)*6+MID(A1,10,1军罗鱼层掌黄作含阳)*3+MID(A1,11,1)*7+M路都阶ID(A1,12,1)*9+M根随民些卫固乙孩王ID(A1,13,1黑告体故)*10+MID(A1,14,1)*5+MID(A1,15,1)*8械吃艺烟滑+MID(A1,16,1)*4+MID(A1,17,1)*2,11),{0;1;2;3;4;5;6;7;8;9;1神精0},{"1";"0";"X";"9";"8";"7";"6";"5";具混行装庆架宗些"4";"3";"2"})=差整存方只罗止活极UPPER(MID(A1,宽右进笔背雨影18,1)),"正确","错误")
如果返回值是"正确",那么身份证号码通过校验,如果返回"错误",则身份证号码肯定错了!
用数组公式计算:=MID("10X98765432",MOD(SUM(无精总州间板MID($A$1,ROW(INDIRECT("1:17")),1)*2^(18-ROW(INDIRECT("1:17")))),11)+1,1) 按ctrl+shift+Enter 计算
除以公式外
可以直接使用的简化参考公式如下两种:(以下皆为数组公式,身份证号码在B2单元格)
一、按规则
文字表达:将2的17次幂+2的16次幂+……+2的1次幂分别对应乘以身份证号码的1-17位数字,最后求和,再除以11,余数对应相应的字符
{=LOOKUP(MOD(SUM(2^{17;16;15;14;13;12;11;10;9;8;7;6;5;4;3;2;1}*MID($B2,ROW($1:$17),1)),11),{0,1;1,0;2,"X";3,9;4,8;5,7;6,6;7,5;8,4;9,3;10,2})}
二、按规律取数
文字表达:将身份证号码1-17位数字,分别乘以给定数字后求和,再除以11,余数对应相应的字符
{=LOOKUP(MOD(SUM(MID($B2,ROW($1:$17),1)*{7;9;10;5;8;4;2;1;6;3;7;9;10;5;8;4;2}),11),{0,1;1,0;2,"X";3,9;4,8;5,7;6,6;7,5;8,4;9,3;10,2})}
ORALE SQL 计算语句
select decode(mod(substr('11010119570115701X',1,1)*7+
substr('11010119570115701X',2,1)*9+
substr('11010119570115701X',3,1)*10+
substr('11010119570115701X',4,1)*5+
substr('11010119570115701X',5,1)*8+
substr('11010119570115701X',6,1)*4+
substr('11010119570115701X',7,1)*2+
substr('11010119570115701X',8,1)*1+
substr('11010119570115701X',9,1)*6+
substr('11010119570115701X',10,1)*3+
substr('11010119570115701X',11,1)*7+
substr('11010119570115701X',12,1)*9+
substr('11010119570115701X',13,1)*10+
substr('11010119570115701X',14,1)*5+
substr('11010119570115701X',15,1)*8+
substr('11010119570115701X',16,1)*4+
substr('11010119570115701X',17,1)*2,11),'0','1','1','0','2','X','3','9','4','8','5','7','6','6','7','5','8','4','9','3','2') aa
from dual;
