用excel从身份证号提取生肖,逻辑很简单:先从身份证第7位开始取4位出生年份,再用年份和十二生肖的顺序做取余计算就行。当前操作软件:microsoft excel;软件版本:microsoft 365。下面这个公式直接就能用:=iferror(choose(mod(--mid(b2,7,4)-4,12)+1,"鼠","牛","虎","兔","龙","蛇","马","羊","猴","鸡","狗","猪"),"检查身份证号"),把里面的b2换成你自己身份证号所在的单元格就行。
第一步:整理身份证号所在列
先在同一张表里排好姓名、身份证号、生肖这三列。身份证号列最好提前设成文本格式,或者录入号码前先敲个英文单引号,避免长数字末尾被Excel自动转成科学计数法。下面示例里身份证号放在B列,生肖结果要输出到C列。

第二步:输入生肖计算公式
点C2单元格,输入完整公式=IFERROR(CHOOSE(MOD(--MID(B2,7,4)-4,12)+1,"鼠","牛","虎","兔","龙","蛇","马","羊","猴","鸡","狗","猪"),"检查身份证号")。拆解来看:MID(B2,7,4)专门用来提取出生年份,MOD(年份-4,12)+1会把提取到的年份转成1到12的序号,最后CHOOSE函数就按“鼠、牛、虎、兔、龙、蛇、马、羊、猴、鸡、狗、猪”的顺序返回对应生肖。

第三步:向下填充并核对结果
等C2单元格算出正确结果后,拖动单元格右下角的填充柄,或者直接双击填充柄,就能把公式批量复制到下面所有行。核对结果的时候可以重点拿两个已知值校验:1990年出生对应“马”,1986年出生对应“虎”;如果单元格返回“检查身份证号”,一般是身份证号位数不对、出生年份位置错了,或者号码里混了多余空格。

公式语法和参数
整个公式主要由 MID、MOD、CHOOSE、IFERROR 组合完成,不需要额外加辅助列,适合在人员名单、报名表、会员资料表里批量生成生肖。
将 PySpark .show() 输出转为 Tab 分隔文本,方便粘贴 Excel。触发词:pyspark、数据转excel、表格整理、venus数据、show输出、复制到excel、数据格式化。
| 函数 | 本例写法 | 作用 |
|---|---|---|
MID |
MID(B2,7,4) |
从 18 位身份证号里提取出生年份。 |
MOD |
MOD(--MID(B2,7,4)-4,12)+1 |
把年份转换成生肖序号,2020、2008、1996 会落到“鼠”。 |
CHOOSE |
CHOOSE(序号,"鼠","牛",...) |
按序号返回对应生肖名称。 |
IFERROR |
IFERROR(计算公式,"检查身份证号") |
当身份证号格式不对时给出可读提示。 |
版本兼容
用到的MID、MOD、CHOOSE、IFERROR都是Excel的基础常用函数,Microsoft 365和近年出的桌面版Excel都能正常运行。当前操作软件:Microsoft Excel;软件版本:Microsoft 365。如果使用 WPS 或旧版 Excel,需要先确认是否支持该函数。
常见错误
如果身份证号被自动转成了科学计数法,公式取到的第7到10位就不是真实出生年份,结果肯定错。要是身份证号前后带多余空格,可以先用TRIM函数清理,把公式改成=IFERROR(CHOOSE(MOD(--MID(TRIM(B2),7,4)-4,12)+1,"鼠","牛","虎","兔","龙","蛇","马","羊","猴","鸡","狗","猪"),"检查身份证号")就行。如果你的表里混有早年的15位旧身份证号,建议先把旧号码转成18位再操作,或者单独处理,别直接和18位号共用同一个公式。
扩展示例:只显示出生年份和生肖
想要结果直接显示成“1990年 马”的格式,用连接符把提取的出生年份和生肖拼起来就行,公式如下:=MID(B2,7,4)&"年 "&IFERROR(CHOOSE(MOD(--MID(B2,7,4)-4,12)+1,"鼠","牛","虎","兔","龙","蛇","马","羊","猴","鸡","狗","猪"),"检查身份证号")。这样导出名单的时候不用单独保留出生年份列,人工核对也更直观。

















