云南省马龙县水务局 云南马龙 655199
摘要:本文从身份证号码的结构入手,紧紧围绕顺序码的奇偶性,利用Excel函数的不同技巧,巧妙构造从身份证中提起性别的不同方法。从函数分解、公式分析等方面详细解析各种公式计算方法。各个计算公式各具特色,又相互联系。大家对照以上思路,可以举一反三,或者另辟蹊径,还可以得出更多的方法。
关键词:顺序码 奇偶性 余数 最大公约数 截尾取整 逻辑值
一、身份证号码的结构
身份证是每个人身份的凭证,了解身份证号码的组成是很有必要。身份号码是特征组合码,第二代居民身份证号码共18位,由17位数字本体码和1位校验码组成。排列顺序从左至右依次为:前6位是地址码,第7-14位是生日期码,第15-17位是顺序码,第18位为校验码。顺序码的奇数分配给男性,偶数分配给女性。
第一代居民身份证只有15位。前6位为地址码,第7-12为生日期码,第13-15位为顺序号,没有数字校验码。顺序码的奇数分配给男性,偶数分配给女性。
二、根据身份证号码判断性别的构想
由上所述,18位身份证号码的第15-17位是顺序码,15位身份证号码的第13-15位是顺序码,顺序码的奇数分配给男性,偶数分配给女性。据此,我们可以根据身份证的顺序码来判断其性别。
根据数的整除特征的判定方法,能被2整除的数的特征是这个数的末位数能够被2整除。
所以,我们可以根据身份证的顺序码来判断其性别,也可以根根顺序码的末位数来判断其性别。两种的计算原理一致,但是计算处理方法有一定的差别。通过特定的函数,采用3位数的顺序码来判断奇数和偶数,可以不用区分18位和15位身份证号码,而采用顺序码的末位数来判断奇数和偶数,则需要区分18位和15位身份证号码。为使公式计算简洁,我建议使用3位数的顺序码来来做奇数和偶数判断。这从以后的叙述中可以看出来。
当然,我们也可以使用身份证的1位数来判断其性别,具体来说,18位身份证提取第17位数码判断其性别,15位身份证提取第15位数码判断其性别。此种方法我将以后的叙述中提出来。
三、根据身份证号码判断性别方法分类
身份证的顺序码是奇数或者是偶数,可以根据奇数和偶数的定义来判断。为此,围绕着顺序码被2除,是否有余数,我们可以构建一类判定其性别的方法;或者围绕着顺序码被2除,所得的余数是否为1(或者为0),我们也可以构建一类判定方法。此外,围绕着顺序码被2除所得的值,通过截尾取整后,是否与原值相等,我们也可以构建相应的方法。
如果用身份证顺序码与2来求两者的最大公约数,要么为1,要么为2,据此,我们也可以构建一类判定的方法。
我们知道,负1的偶数次方的值为1,奇数次方的值为负1,据此,我们也可以构建相应的判定方法。
此外,我们还可以利用Excel函数直接判断身份证顺序码是奇(偶)数,或者不是奇(偶)数,甚至直接利用计算式构建相应的逻辑值等方法来构建相应的方法。
根据上述思路,构建Excel从身份证号码中提取性别的方法。下面以Excel表格为例,说明计算方法。为了方便阅读,我模仿Excel的方法,在表中添加行号和列号。计算表格如下。
根据证件号码的结构判断性别的方法
证件号码主要有第一代居民身份证、第二代居民身份证、残疾证等。其中第二代居民身份证有18位,第一代居民身份证只有15位,残疾证号码有20位,前18位为身份证号码,第19位为残疾类型,第20位残疾等级。
A1单元格为证件号码,有20位的残疾证号码,有18位的身份证号码,有15位的身份证号码。B至M列为提起性别的计算方法,分别是:与2是否有余数MOD,与2的余数值MOD,除以2的值截尾取整TRUNC以及INT,与2的最大公约数GCD,-1的N次方,奇偶性ISODD以及ISEVEN,容错函数IFERROR与ISODD以及ISEVEN,计算式判断,顺序码末位判断。行列交叉处为计算出的性别。
从表中可以看出,利用“计算式判断”,对于20位的残疾证号码,其结果是错误的。其原因待以后说明。
四、根据身份证号码判断性别当然函数解析
为了方便叙述,我先把本文中计算所涉及的Excel函数列出,并做简要的说明。计算公式中主要用到MID、MOD、IF、TRUNC、INT、GCD、POWER、ISODD、ISEVEN、IFERROR、LEN等函数。如果在使用GCD、ISODD、ISEVEN等函数过程中,提示该函数不存在,则必须运行“安装”程序,加载“分析工具库”,方能使用。简述如下。
MID函数。返回文本字符串中从指定位置开始的特定数目的字符,该数目由用户指定。语法:MID(text,start_num,num_chars),Text为包含要提取字符的文本字符串;Start_num为文本中要提取的第一个字符的位置。文本中第一个字符的start_num为1,以此类推;Num_chars指定希望MID从文本中返回字符的个数。使用MID函数时,如果Start_num大于文本长度,则函数返回空文本("");如果Start_num小于文本长度,但Start_num加上num_chars超过了文本的长度,则函数只返回至多到直到文本末尾的字符;如果Start_num小于1,则函数返回错误值#VALUE!。
MOD函数。返回两数相除的余数。结果的正负号与除数相同。语法:MOD(number,divisor),Number为被除数;Divisor为除数。
IF函数。执行逻辑判断,它可以根据逻辑表达式的真假,返回不同的结果,从而执行数值或公式的条件检测任务。语法: IF(logical_test,value_if_true,value_if_false),Logical_test为计算结果为TRUE或FALSE的任何数值或表达式;Value_if_true是Logical_test为TRUE时函数的返回值,如果logical_test为TRUE并且省略了value_if_true,则返回TRUE,而且Value_if_true可以是一个表达式;Value_if_false是Logical_test为FALSE时函数的返回值,如果logical_test为FALSE并且省略value_if_false,则返回FALSE,Value_if_false也可以是一个表达式。
TRUNC函数。将数字的小数部分截去,返回整数。语法:TRUNC(number,num_digits),Number是需要截去小数部分的数字,Num_digits则指定保留小数的精度(几位小数)。如果Num_digits省略,则保留整数。
INT函数。将任意实数向下取整为最接近的整数。语法:INT(number),Number为需要处理的任意一个实数。
GCD函数。返回两个或多个整数的最大公约数。语法:GCD(number1,number2,...),Number1,number2,...为1到若干个数值,如果数值为非整数,则自动截去小数部分取整。
POWER函数。返回给定数字的乘幂。语法:POWER(number,power),Number为底数,Power为指数,均可以为任意实数。注意,可以用“^”运算符替POWER函数执行乘幂运算。
ISODD函数。测试参数的奇偶性,如果参数为奇数返回TRUE,否则返回FALSE。语法:ISODD(number),Number待测试的数值,如果参数不是整数,则自动截去小数部分取整。如果参数number不是数值,ISEVEN函数返回错误值#VALUE!。
ISEVEN函数。测试参数的奇偶性,如果参数为偶数返回TRUE,否则返回FALSE。语法:ISEVEN(number),Number待测试的数值。如果参数值不是整数,则自动截去小数部分取整。如果参数number不是数值,ISEVEN函数返回错误值#VALUE!。
IFERROR函数。用于判断表达式的计算结果是否有效,当计算结果有效时会返回表达式的值,而当表达式计算结果无效时将返回事先设定的字符串或其它内容。语法:IFERROR(value,value_if_error),Value指通过IFERROR函数来检查是否存在错误的参数,Value_if_error,指Value参数计算错误时要返回的值。
LEN函数。返回文本字符串中的字符数。语法:LEN(text), Text是要查找其长度的文本。空格将作为字符进行计数。
五、根据身份证号码的结构判断性别的方法
为方便理解,我以第2行的计算为例,列出相应的计算式,其他的公式可以通过公式复制而得到。其计算原理在相应的部分加以解读。
根据证件号码的结构判断性别的公式表
1、顺序码被2除,是否有余数判断身份证性别
在B2单元格中输入“=IF(MOD(MID(A2,15,3),2),"男","女")”。回车后即可在单元格获得该身份证的性别。
为了便于大家了解上述公式的设计思路,下面对公式作简要分析:MID函数从A2的指定位置(第15位)提取3个字符,而MOD函数将该字符与2相除,获得余数。如果两者能够除尽,说明没有余数(否则就有余数1),则这个数就是偶数,这时就会在B2单元格中填入“女”,反之则会填入“男”。
注意:正是由于“使用MID函数时,如果Start_num小于文本长度,但Start_num加上num_chars超过了文本的长度,则函数只返回至多到直到文本末尾的字符”,使得所提取的18位身份证号码顺序码为第15-17位,所提取的15位身份证号码顺序码为第15位。根据数的整除特征的判定方法,能被2整除的数的特征是“这个数的末位数能够被2整除”的特点,这样就不用判断18位和15位身份证号码。这就是我建议使用3位数的顺序码来来做奇数和偶数判断的原因。
2、顺序码被2除,所得的余数是否为1判断身份证性别
在C2单元格中输入“=IF(MOD(MID(A2,15,3),2)=1,"男","女")”。回车后即可在单元格获得该身份证的性别。
公式分析:MID函数从A2的指定位置提取3个字符,而MOD函数将该字符与2相除,获得余数。如果余数为1,则这个数就是奇数,这时就会在C2单元格中填入“男”,反之则会填入“女”。
3、顺序码被2除所得的值,通过TRUNC函数截尾取整后,是否与原值相等,判断身份证性别
在D2单元格中输入“=IF((MID(A2,15,3)/2)=TRUNC((MID(A2,15,3)/2)),"女","男")”。回车后即可在单元格获得该身份证的性别。
公式分析:MID函数从A2的指定位置提取3个字符并与2相除,再比较MID函数从A2的指定位置提取3个字符并与2相除后截尾取整后所得的值。如果两者相等,则这个数就是偶数,这时就会在D2单元格中填入“女”,反之则会填入“男”。
4、顺序码被2除所得的值,通过INT函数截尾取整后,是否与原值相等,判断身份证性别
在E2单元格中输入“=IF((MID(A2,15,3)/2)=INT((MID(A2,15,3)/2)),"女","男")”。回车后即可在单元格获得该身份证的性别。
公式分析:INT函数处理与用TRUNC函数处理一致,在此不在赘述。
5、顺序码与2最大公约数是否等于2,判断身份证性别
在F2单元格中输入“=IF(GCD(MID(A2,15,3),2)=2,"女","男"))”。回车后即可在单元格获得该身份证的性别。
公式分析:GCD函数从A2的指定位置提取3个字符并与2计算最大公约数,如果值为2,则这个数就是偶数,这时就会在E2单元格中填入“女”,反之则会填入“男”。
6、顺序码-1的乘幂是否等于1,判断身份证性别
在G2单元格中输入“=IF(-1^(MID(A2,15,3))=1,"女","男")”。回车后即可在单元格获得该身份证的性别。
公式分析: POWER函数从A2的指定位置提取3个字符并作为负1的指数幂,负1的偶数次方的值为1,奇数次方的值为负1,通过函数计算,就能该数是奇数或者是偶数,进而得到身份证号码的性别。
7、ISODD函数判断身份证性别
在H2单元格中输入“=IF(ISODD((MID(A2,15,3))),"男","女")”。回车后即可在单元格获得该身份证的性别。
公式分析: ISODD函数从A2的指定位置提取3个字符,并判断其是否是奇数,如果其值为真,则这个数就是奇数,则在H2单元格填入“男”,反之,则会填入“女”。
8、ISEVEN函数判断身份证性别
在F2单元格中输入“=IF(ISEVEN ((MID(A2,15,3))),"女","男")”。回车后即可在单元格获得该身份证的性别。
公式分析: ISEVEN函数从A2的指定位置提取3个字符,并判断其是否是偶数,如果其值真,则这个数就是偶数,这时就会在I2单元格中填入“女”,反之则会填入“男”。
9、IFERROR、ISODD函数判断身份证性别
在J2单元格中输入“=IF(IFERROR(ISODD(MID(A2,15,3)),),"男","女")”。回车后即可在单元格获得该身份证的性别。
公式分析: IFERROR检查是ISODD函数的计算结果是否有效,具体来说,就是判断“从A2的指定位置提取3个字符是否是奇数”这个结论是否有效,如果计算结果有效,则为返回结果TRUE,否则,返回值0。之后再在IF函数的作用下,当IFERROR计算结果为TRUE时,则这个数就是奇数,这时就会在J2单元格填入“男”,反之,则会填入“女”。
这里要注意,在公式“=IF(IFERROR(ISODD(MID(A2,15,3)),),"男","女")”中,跟前面的公式相比,IFERROR函数在第一个参数的后面多了1个逗号,而逗号后面没有任何内容,这种情况不是省略参数,而是省略了参数的值,具体省略的值是0,这个公式完整的写法是“=IF(IFERROR(ISODD(MID(A2,15,3)),0), ),"男","女")”。
顺便说一句,所有的函数,如果逗号后面没有内容,或者逗号后面还是逗号,就表示省略了逗号后面或者逗号之间的数值0,这种情况就是省略值。
10、IFERROR、ISEVEN函数判断身份证性别
在K2单元格中输入“=IF(IFERROR(ISODD(MID(A2,15,3)),),"女","男")”。回车后即可在单元格获得该身份证的性别。
公式分析: IFERROR检查是IEVEN函数的计算结果是否有效,如果计算结果有效,则这个数就是偶数,则在K2单元格填入“女”,反之,则会填入“男”。
11、计算式构建逻辑值判断身份证性别
在L2单元格中输入“=IF(MOD(MID(A2,(LEN(A2)=18)*2+15,1),2),"男","女")”。回车后即可在单元格获得该身份证的性别。
公式分析: LEN (A2)=18为真时,返回TRUE,反之,则返回FALSE。在Excel的计算中,TRUE值为1,FALSE值为0。所以当“LEN (A2)=18”为真时,则“LEN(A2)=18)*2+15”的值为17。当“LEN (A2)=18”为假时,则“(LEN(A2)=18)*2+15”的值为15。这就使得当A2单元格的数码为18位时,提取第17位来判断身份证性别,当A2单元格的数码为15位时,提取第15位来判断身份证性别。在这里采用被2除,是否有余数的方法来判断身份证的性别。
从“根据身份证号码的结构判断性别的方法”中可以看出,该种方法对于20位的残疾号码结果是错误的,这是因为把文本长度设置为18位和15位两种,没有20位的,当文本长度为20位时,是按15位的方法来计算,故而出错。事实上,20位的残疾号码的顺序码与18位身份证一致,表示性别的顺序码为第15-17位。
六、提取身份证号码的1位数来判断性别的方法
以上我叙述了几种使用3位数的顺序码来来判断身份证号码的方法。实际上,我们也可以使用身份证的1位数来判断其性别,具体来说,18位身份证提取第17位数码判断其性别,15位身份证提取第15位数码判断其性别。
当然,其计算方法也是多种多样,我以从身份证中提取的一位数被2除,所得的余数是否为1判断身份证性别。
在M2单元格中输入“=IF(LEN(A2)=15,IF(MOD(MID(A 2,15,1),2)=1,"男","女"),IF(MOD(MID(A2,17,1),2)=1,"男","女"))”。回车后即可在单元格获得该身份证的性别。
公式分析:第一代居民身份证只有15位,第二代居民身份证号码共18位。为了适应上述情况,必须设计一个能够适应两种身份编码的性别计算公式。
为了便于大家了解上述公式的设计思路,下面简单介绍一下它的工作原理:该公式由三个IF函数构成,其中“IF(MOD(MID(A2,15,1),2)=1,"男","女")”和“IF(MOD(MID(A2,17,1),2)=1,"男","女")”作为第一个函数的参数。
公式中“LEN(A2)=15”是一个逻辑判断语句,LEN函数提取A2单元格中的字符长度,如果该字符的长度等于15,则执行参数中的第一个IF函数,否则就执行第二个IF函数。
在参数“IF(MOD(MID(A2,15,1),2)=1,"男","女")”中。MID函数从A2的指定位置(第15位)提取1个字符,而MOD函数将该字符与2相除,获得余数。如果两者能够除尽,说明提取出来的字符是0(否则就是1),逻辑条件“MOD(MID(A2,15,1),2)=1”不成立,则这个数就是偶数,这时就会在M2单元格中填入“女”,反之则会填入“男”。
如果LEN函数提取的A2等单元格中的字符长度不等于15,则会执行第2个IF函数。除了MID函数从A2的指定位置(第17位,即倒数第2位)提取1个字符这点不同之外,其他运算过程与第一个IF函数相似,在此不再赘述。
七、结语
本文从身份证号码的结构入手,紧紧围绕顺序码的奇偶性,利用Excel函数的不同技巧,巧妙构造从身份证中提起性别的不同方法。从函数分解、公式分析等方面,详细解析各种公式的计算方法。各种计算公式各具特色,又相互联系。以上方法各具特色,又相互联系。大家对照以上思路,可以举一反三,或者另辟蹊径,得出更多的方法。总之,面对一个难题,只要要多角度分析,理清了方向,就会事半功倍。
参考文献:
1、彭雨田《更相减损术新解》 《中学数学月刊》2013年第5期
2、曹飞羽、王正旭《小学数学基础理论和教法》人民教育出版社
3、宋乃庆《初等数学选读》西南师范大学出版社
4、李敏《随手查——Excel函数与公式应用技巧》电子工业出版社
5、张迎新《Excel2003函数应用完全手册》
6、互联网上相关的各种方法、文章、论坛等
论文作者:缪景洪
论文发表刊物:《基层建设》2018年第25期
论文发表时间:2018/9/18
标签:函数论文; 性别论文; 身份证论文; 单元格论文; 顺序论文; 偶数论文; 公式论文; 《基层建设》2018年第25期论文;