。我们在对身份证的号码数据进行处理时,往往会发现输入的身份证号码有错误,或者有重复,那么如何防止身份证号码重复录入呢?确保输入的身份证号码没有错误呢?
Excel根据公民身份证号的组成原则,设置数据有效性,在录入的身份证号码重复时,提示输入的身份证号码错误或有重复。
公民身份证号的组成:1. 地址码:表示编码对象常住户口所在县(市、旗、区)的行政区划代码,按GB/T2260的规定执行。身份证号码的前六位即地址码。
2. 出生日期码:表示编码对象出生的年、月、日,按GB/T7408的规定执行,年、月、日分别用4位、2位、2位数字表示,之间不用分隔符。早期的15位的身份证号码年采用2位数据表示。
3. 顺序码:表示在同一地址码所标识的区域范围内,对同年、同月、同日出生的人编定的顺序号,顺序码的奇数分配给男性,偶数分配给女性。第17位为顺序码。
4. 第18位为校验码。
校验码的计算方式:1. 对前17位数字本体码加权求和。公式为:S = Sum(Ai * Wi), i = 0, ... , 16。其中Ai表示第i位置上的身份证号码数字值,Wi表示第i位置上的加权因子,其各位对应的值依次为: 7 9 10 5 8 4 2 1 6 3 7 9 10 5 8 4 2
2.以11对计算结果取模 Y = mod(S, 11)
3.根据模的Y值(0 1 2 3 4 5 6 7 8 9 10)得到对应的校验码,依次对应关系为1 0 X 9 8 7 6 5 4 3 2。
如上图所示,在A列上单击,选中存放身份证号码的数据A列。
选择“数据”菜单-“有效性”菜单项,打开“数据有效性”对话框,在“设置”选项卡“允许”列表框中选择“自定义”,在“公式”输入框输入
单击“出错警告”选项卡,在“标题”输入框输入“错误提示”,在“错误信息”输入框输入“您输入的身份证号码不正确或重复!”,单击“确定”按钮保存。
=OR(AND(LEN(A1)=15,COUNTIF(A:A,A1&"*")<=1),IF(AND(LEN(A1)=18,COUNTIF(A:A,A1&"*")<=1),
MID("10X98765432",MOD(SUM(MID(A1,ROW(INDIRECT("1:17")),1)*2^(18-ROW(INDIRECT("1:17")))),11)+1,1)
=RIGHT(A1,1)))
当输入的身份证号码错误或重复时,Excel2003弹出提示框,如上图所示。
思路:首先判断A列身份证号码是15位还是18位,如果是15位,统计是否有重复;如果是18位,统计18位的身份证号码是否有重复,并且计算校验码是否正确。
相关说明:Excel2003OR函数,任何一个参数为TRUE时,结果为TRUE,否则为FALSE。
Excel2003AND函数,当所有的参数为TRUE,结果为TRUE,否则为FALSE。
Excel2003COUNTIF函数在第一个参数中统计等于第二个参数个数。
Excel2003ROW函数返回引用的行号。
Excel2003INDIRECT函数返回由文本字符串指定的引用。
Excel2003IF函数,第一个条件为真,则取第二个参数的值,否则取每三个参数的值。
Excel2003LEN函数判断参数的长度。
Excel2003MOD函数结果是第一个参数除以第二个参数所得的余数。
Excel2003MID函数从第二个参数位置开始,在第一个参数查找,返回第三个参数长度的字符串。
Excel2003RIGHT函数截取第一个参数右边第二个参数长度的字符串。
|