=IF(ISODD(--MID(A2,17,1)),"男","女")可直接拖拽填充,通过ISODD判断第17位数字奇偶性返回性别,加--确保文本转数字,简洁可靠不报错。
你需要在Excel中根据一列18位身份证号码,快速生成对应性别文字“男”或“女”,核心依据是第17位数字的奇偶性:奇数为男,偶数为女;公式必须能直接拖拽填充、不报错、不显示#VALUE!或#REF!。
基础公式:一行搞定18位身份证
在目标单元格(如B2)输入:=IF(MOD(MID(A2,17,1),2)=1,"男","女")。这个公式先用MID取A2中第17位字符,再用MOD判断它除以2是否余1——余1就是奇数,返回“男”,否则“女”。
按Enter确认后,把B2右下角的小方块向下拖拽,整列身份证号就自动出结果了。这一步操作起来很简单,直接拖就行。
注意:如果A列身份证号被Excel误识别为数值并转成科学计数法(比如显示为1.23E+17),第17位会提取错误。请先选中A列→右键→“设置单元格格式”→“文本”,再重新输入或粘贴身份证号。
防错加固:空格、短横线、位数不对也能算
原始数据常混有空格、短横线(如“110101 19900307 251X”或“110101-19900307-251X”),直接套用基础公式会报错。必须先清洗再判断。
方法一:用SUBSTITUTE逐个清除干扰符
在B2输入:=IF(LEN(SUBSTITUTE(SUBSTITUTE(TRIM(A2)," ",""),"-",""))=18,IF(MOD(--MID(SUBSTITUTE(SUBSTITUTE(TRIM(A2)," ",""),"-",""),17,1),2)=1,"男","女"),"身份证非18位")。这个公式一口气做三件事:去首尾空格(TRIM)、删所有空格(SUBSTITUTE)、删所有短横线(SUBSTITUTE),再校验长度是否为18,最后才取第17位判断。
方法二:用LET函数让逻辑更清晰(Excel 365 / 2021可用)
在B2输入:=LET(c,SUBSTITUTE(SUBSTITUTE(TRIM(A2)," ",""),"-",""),IF(LEN(c)=18,CHOOSE(MOD(--MID(c,17,1),2)+1,"女","男"),""))。LET把清洗后的字符串定义为变量c,避免重复写SUBSTITUTE,也方便后续调试。
兼容旧版:同时支持15位和18位身份证
有些老数据用的是15位身份证(无X校验位),性别信息在第15位而非第17位。若混用两种格式,必须区分处理。
Python对Excel操作详解 中文WORD版
本文档主要介绍如何通过python对office excel进行读写操作,使用了xlrd、xlwt和xlutils模块。另外还演示了如何通过Tcl tcom包对excel操作。感兴趣的朋友可以过来看看
下载
第一步:识别长度→第二步:按长度取对应位→第三步:统一奇偶判断
在B2输入:=IF(LEN(TRIM(A2))=18,IF(MOD(--MID(TRIM(A2),17,1),2)=1,"男","女"),IF(LEN(TRIM(A2))=15,IF(MOD(--MID(TRIM(A2),15,1),2)=1,"男","女"),""))。
这个公式先用TRIM清理空格,再用LEN判断长度:是18位就取第17位,是15位就取第15位,其他长度(比如17位或空值)直接返回空白。不用额外提示,留空比显示“错误”更利于后续筛选。
特别提醒:【15位身份证第15位必须是数字,不能是字母X】。如果原始数据里混有带X的15位号(非法格式),该公式会因--MID返回错误而中断,此时需先用IFERROR包裹。
极简替代:用ISODD或ISEVEN函数代替MOD
如果你觉得MOD+IF太绕,Excel原生提供了更直白的判断函数。
方法1:用ISODD(是奇数?)
=IF(ISODD(--MID(A2,17,1)),"男","女")。ISODD直接返回TRUE/FALSE,省去MOD=1的比较,可读性更强。
方法2:用ISEVEN(是偶数?)
=IF(ISEVEN(--MID(A2,17,1)),"女","男")。逻辑反转,效果一致,但把“女”放在前面,符合部分人阅读习惯。
这两个函数都要求MID提取的内容能转成数字,所以务必加--(双负号)强制转换,否则ISODD("2")会返回FALSE——因为它把"2"当文本而非数字。
