ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

搜索
EH技术汇-专业的职场技能充电站 妙哉!函数段子手趣味讲函数 Excel服务器-会Excel,做管理系统 Excel Home精品图文教程库
HR薪酬管理数字化实战 Excel 2021函数公式学习大典 Excel数据透视表实战秘技 打造核心竞争力的职场宝典
300集Office 2010微视频教程 数据工作者的案头书 免费直播课集锦 ExcelHome出品 - VBA代码宝免费下载
用ChatGPT与VBA一键搞定Excel WPS表格从入门到精通 Excel VBA经典代码实践指南
查看: 18916|回复: 62

[原创] 惊艳的身份证性别

  [复制链接]

TA的精华主题

TA的得分主题

发表于 2014-7-17 10:42 | 显示全部楼层 |阅读模式
本帖最后由 问山8828680 于 2014-7-17 16:48 编辑

        我们都知道身份证号无论是15位旧版的,还是18位新版的,都有一位性别码。旧版第15位,新版第17位,偶数值为女,奇数值为男。因此,在EXCEL表格中,当我们已知身份证号,要判定其性别时,最普通的想法就是:首先用len()函数判定位数,其次用if()和mid()组合,15位时,取第15位数,18位时取第17位数,再次用mod()判定奇偶数,最后还用if()判定偶数为女,奇数为男。公式:IF(MOD(IF(LEN(A2)=15,MID(A2,15,1),MID(A2,17,1)),2)=0,"女","男")。这样虽然也能解决问题,但是难看、难读,又长又臭,实在难以令人佩服!下面,隆重推介我在EXCELHOME论坛看到的,超级版主云南大理的wshcw先生的解决方案,这个公式一样不能用佩服来形容,因为这两个字不足以形容我初见时的心情,我想只能借用“惊艳”二字吧!
     TEXT(-1^MID(A1,15,3),"女;男")
       如此佳妙,不品评一番,问山实在心痒难耐!
        一、谢庭芝兰
        前面那个普通公式,要用IF()、LEN()、MID()三个函数组合费尽九牛二虎之力才能取出身份证号的性别码。而她只需一个MID(A1,15,3) 就艳光四射,一以敌三。这里暗藏两大玄机:一是用MID(A1,15,3)从身份证号的第15位起,共提取15、16、17三位数,若身份证号为15位,由于16、17位为空,所以MID()函数只取出第15位性别码;若身份证号为18位数,则取三位数,其个位是性别码。二是从数学原理可知,一个数字的个位数的奇偶性决定着这个数的奇偶性。从本例来看无论是18位身份证号还是15位的,用MID(A1,15,3)取数后,其个位都是性别码。说出来简单,我们常说要开动脑筋,但以问山之愚就算开它个7200里也转不到这个道道上来。
        二、孟氏芳邻
        取出性别码后,由于代表偶或奇数的数码都不唯一,偶数有可能是2、4、6……奇数有可能是1、3、5……还必须梳理一下,最好以唯一的数码表示奇数或偶数。说到这里,问山之流,能想到的就只有MOD(性别码,2)了。以性别码除2取余数,余数为1是奇数,余数为0是偶数。当然,这样也未尝不可,只是让谢庭芝兰长在这么个庸俗的小环境中,是不是有点于心不忍?择邻而处,于是引出指数概念。-1的偶数次方为1,奇数次方为-1。-1^MID(A1,15,3)的运算结果为1则女性,为-1则男性。
        三、杨女长成
        不能打破常规的人总会这么想,到了这一步总该用到我们最常见的IF()函数了吧,这难道不是理所当然,水到渠成的事吗?IF(-1^MID(A1,15,3)=-1,,)。唉!美人情怀又岂是你我凡夫俗子所能揣测的?!最后,人家是巧妙运用TEXT()函数的正负数显示规则,拒绝平庸,成就高贵!

点评

大家测试一下2003版能不能用这个公式:=TEXT(-1^MID(A1,9,9),"女;男")  发表于 2014-10-11 10:26

评分

3

查看全部评分

TA的精华主题

TA的得分主题

发表于 2014-7-17 10:48 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2014-7-17 10:50 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2014-7-17 12:28 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
  1. 思路都是处于特定条件下的呀。不同的东东,有不同的风格。这是个优秀公司。
复制代码

TA的精华主题

TA的得分主题

发表于 2014-7-17 12:35 | 显示全部楼层
本帖最后由 丢丢表格 于 2014-7-17 12:37 编辑

楼主走入函数误区了
=IF(MOD(MID(A1,15,3),2),"男","女")  这样写才是最科学的。

不要光看公式长短!

TA的精华主题

TA的得分主题

发表于 2014-7-17 12:38 | 显示全部楼层
能不能别用斜体啊,看到眼睛都花了。公式确实精妙

TA的精华主题

TA的得分主题

发表于 2014-7-17 13:59 | 显示全部楼层
论坛里还有很多令人惊艳的公式等着你去发掘,加油。

TA的精华主题

TA的得分主题

发表于 2014-7-17 14:20 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2014-7-17 14:42 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2014-7-17 15:02 | 显示全部楼层
丢丢说的不错,计算机运算的快慢取决于计算次数,而并不是简单看公式长短。
最快最优的计算为逻辑计算,即:TURE和FALSE,其次是加减、乘除,再次就是幂运算和数组循环运算。
就拿楼主的-1^(MID())和IF(逻辑,A,B)来比较,前者是次方运算,也就是每次都必须运算,哪怕是空白也要运算。
后者是选择性运算,逻辑判断为真的话,就运算A,而B就不参与运算,不管B有多么复杂,IF函数都会跳过它,特别对于数据量极大的情况下,在公式外面套个IF函数把那些不必要运算的单元格跳过,比如空白或者出错的情况下。在相比情况下,公式的优良如何取决于几个因素:
1.运算速度快慢
2.公式是否通俗易懂,容易修改。
3.公式是否简洁明了,没有冗长的代码。
做到这几点,你的公式相信会被大部分人所采用。

点评

这三条说的也有道理!  发表于 2014-8-12 21:55

评分

1

查看全部评分

您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

手机版|关于我们|联系我们|ExcelHome

GMT+8, 2024-5-10 18:02 , Processed in 0.040869 second(s), 9 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

沪公网安备 31011702000001号 沪ICP备11019229号-2

本论坛言论纯属发表者个人意见,任何违反国家相关法律的言论,本站将协助国家相关部门追究发言者责任!     本站特聘法律顾问:李志群律师

快速回复 返回顶部 返回列表