身份证号验证函数
验证身份证号是否正确的公式、通过身份证号提取出生年月、性别、年龄等的公式汇总
身份证号验证:=IF(LEN(身份证号所在单元格)=0,"空",IF(LEN(身份证号所在单元格)=15,"老号",IF(LEN(身份证号所在单元格)<>18,"位数不对",IF(CHOOSE(MOD(SUM(MID(身份证号所在单元格,1,1)*7+MID(身份证号所在单元格,2,1)*9+MID(身份证号所在单元格,3,1)*10+MID(身份证号所在单元格,4,1)*5+MID(身份证号所在单元格,5,1)*8+MID(身份证号所在单元格,6,1)*4+MID(身份证号所在单元格,7,1)*2+MID(身份证号所在单元格,8,1)*1+MID(身份证号所在单元格,9,1)*6+MID(身份证号所在单元格,10,1)*3+MID(身份证号所在单元格,11,1)*7+MID(身份证号所在单元格,12,1)*9+MID(身份证号所在单元格,13,1)*10+MID(身份证号所在单元格,14,1)*5+MID(身份证号所在单元格,15,1)*8+MID(身份证号所在单元格,16,1)*4+MID(身份证号所在单元格,17,1)*2),11)+1,1,0,"X",9,8,7,6,5,4,3,2)=IF(ISNUMBER(RIGHT(身份证号所在单元格,1)*1),RIGHT(身份证号所在单元格,1)*1,"X"),"正确","错误"))))性别:=IFERROR(IF(MOD(VALUE(MID(身份证号所在单元格,17,1)),2)=1,"男","女"),"")年龄:=IFERROR(YEAR(NOW())-VALUE(MID(身份证号所在单元格,7,4)),"")出生年月日:=CONCATENATE(MID(身份证号所在单元格,7,4),"-",MID(身份证号所在单元格,11,2),"-",MID(身份证号所在单元格,13,2))是否农村青壮年(女16至45、男16至50):=IF(户口性质<>"农业户口","否",IF(AND(性别="女",G4>=16,G4<=45),"是",IF(AND(性别="男",G4>=16,G4<=50),"是","否")))照片插入:第一步:新建一寸照文件夹为“目标文件夹”,照片命名例:99人以内(01+姓名),999人以内(001+姓名)第二步:在基础信息表内输入公式:=”照片源地址”&\”&序号栏&姓名栏&”.jpg”输入公式后,把公式内所有的“\”都换为“\\”;序号要求:99人以内从01开始,999人以内从001开始;第三步:到WORD文档,建立表格,并使光标在照片格“插入”→“文档部件”→“域”→“includepicture”→域属性输入“123”→FN+ALT+F9→把先前输入的“123”删除,在邮件合并内找输入合并域,选择“照片栏”→FN+F9。
全国身份证及港澳台身份证验证js代码、函数。
// 988058查号网,骗子号码查询(http:// )//一下是验证身份证号码的js函数function checkIdcard(idcard){var Errors=new Array("验证通过!","身份证号码位数不对!","身份证号码出生日期超出范围或含有非法字符!","身份证号码校验错误!","身份证地区非法!");var area={11:"北京",12:"天津",13:"河北",14:"山西",15:"内蒙古",21:"辽宁",22:"吉林",23:"黑龙江",31:"上海",32:"江苏",33:"浙江",34:"安徽",35:"福建",36:"江西",37:"山东",41:"河南",42:"湖北",43:"湖南",44:"广东",45:"广西",46:"海南",50:"重庆",51:"四川",52:"贵州",53:"云南",54:"西藏",61:"陕西",62:"甘肃",63:"青海",64:"宁夏",65:"新疆",71:"台湾",81:"香港",82:"澳门",91:"国外"}var retflag=false;var idcard,Y,JYM;var S,M;var idcard_array = new Array();idcard_array = idcard.split("");//地区检验if(area[parseInt(idcard.substr(0,2))]==null) return Errors[4];//身份号码位数及格式检验switch(idcard.length){case 15:if ( (parseInt(idcard.substr(6,2))+1900) % 4 == 0 || ((parseInt(idcard.substr(6,2))+1900) %100 == 0 && (parseInt(idcard.substr(6,2))+1900) % 4 == 0 )){ereg=/^[1-9][0-9]{5}[0-9]{2}((01|03|05|07|08|10|12)(0[1-9]|[1-2][0-9]|3[0-1])|(04|06|09|11)(0[1-9] |[1-2][0-9]|30)|02(0[1-9]|[1-2][0-9]))[0-9]{3}$/;//测试出生日期的合法性}else {ereg=/^[1-9][0-9]{5}[0-9]{2}((01|03|05|07|08|10|12)(0[1-9]|[1-2][0-9]|3[0-1])|(04|06|09|11)(0[1-9] |[1-2][0-9]|30)|02(0[1-9]|1[0-9]|2[0-8]))[0-9]{3}$/;//测试出生日期的合法性}if(ereg.test(idcard))return Errors[0];else{return Errors[2];}break;case 18://18位身份号码检测//出生日期的合法性检查//闰年月日:((01|03|05|07|08|10|12)(0[1-9]|[1-2][0-9]|3[0-1])|(04|06|09|11)(0[1-9]|[1-2][0-9]|30)|02(0[1-9]|[ 1-2][0-9]))//平年月日:((01|03|05|07|08|10|12)(0[1-9]|[1-2][0-9]|3[0-1])|(04|06|09|11)(0[1-9]|[1-2][0-9]|30)|02(0[1-9]|1 [0-9]|2[0-8]))if ( parseInt(idcard.substr(6,4)) % 4 == 0 || (parseInt(idcard.substr(6,4)) % 100 == 0 && parseInt(idcard.substr(6,4))%4 == 0 )){ereg=/^[1-9][0-9]{5}19[0-9]{2}((01|03|05|07|08|10|12)(0[1-9]|[1-2][0-9]|3[0-1])|(04|06|09|11)(0[1 -9]|[1-2][0-9]|30)|02(0[1-9]|[1-2][0-9]))[0-9]{3}[0-9Xx]$/;//闰年出生日期的合法性正则表达式}else{ereg=/^[1-9][0-9]{5}19[0-9]{2}((01|03|05|07|08|10|12)(0[1-9]|[1-2][0-9]|3[0-1])|(04|06|09|11)(0[1 -9]|[1-2][0-9]|30)|02(0[1-9]|1[0-9]|2[0-8]))[0-9]{3}[0-9Xx]$/;//平年出生日期的合法性正则表达式}if(ereg.test(idcard)){//测试出生日期的合法性//计算校验位S = (parseInt(idcard_array[0]) + parseInt(idcard_array[10])) * 7+ (parseInt(idcard_array[1]) + parseInt(idcard_array[11])) * 9+ (parseInt(idcard_array[2]) + parseInt(idcard_array[12])) * 10+ (parseInt(idcard_array[3]) + parseInt(idcard_array[13])) * 5+ (parseInt(idcard_array[4]) + parseInt(idcard_array[14])) * 8+ (parseInt(idcard_array[5]) + parseInt(idcard_array[15])) * 4+ (parseInt(idcard_array[6]) + parseInt(idcard_array[16])) * 2+ parseInt(idcard_array[7]) * 1+ parseInt(idcard_array[8]) * 6+ parseInt(idcard_array[9]) * 3 ;Y = S % 11;M = "F";JYM = "10X98765432";M = JYM.substr(Y,1);//判断校验位if(M == idcard_array[17]) return Errors[0]; //检测ID的校验位else return Errors[3];}else return Errors[2];break;default:return Errors[1];break;}}。
身份证正确检验及验证公式
验证公式一=IF(LEN(H20)=18,IF(RIGHT(H20,1)="X",IF(CHOOSE(MOD(SUM(LEFT(RIGHT(H20,18) )*7 LEFT(RIGHT(H20,17))*9 LEFT(RIGHT(H20,16))*10 LEFT(RIGHT(H20,15))*5 LEFT(RIGHT(H20,14))*8 LEFT(RIGHT(H20,13))*4 LEFT(RIGHT(H20,12))*2LEFT(RIGHT(H20,11))*1 LEFT(RIGHT(H20,10))*6 LEFT(RIGHT(H20,9))*3LEFT(RIGHT(H20,8))*7 LEFT(RIGHT(H20,7))*9 LEFT(RIGHT(H20,6))*10LEFT(RIGHT(H20,5))*5 LEFT(RIGHT(H20,4))*8 LEFT(RIGHT(H20,3))*4LEFT(RIGHT(H20,2))*2),11)1,1,0,"X",9,8,7,6,5,4,3,2)=LEFT(RIGHT(H20,1)),"正确!","出错啦!"),IF(CHOOSE(MOD(SUM(LEFT(RIGHT(H20,18))*7 LEFT(RIGHT(H20,17))*9LEFT(RIGHT(H20,16))*10 LEFT(RIGHT(H20,15))*5 LEFT(RIGHT(H20,14))*8 LEFT(RIGHT(H20,13))*4 LEFT(RIGHT(H20,12))*2 LEFT(RIGHT(H20,11))*1LEFT(RIGHT(H20,10))*6 LEFT(RIGHT(H20,9))*3 LEFT(RIGHT(H20,8))*7LEFT(RIGHT(H20,7))*9 LEFT(RIGHT(H20,6))*10 LEFT(RIGHT(H20,5))*5LEFT(RIGHT(H20,4))*8 LEFT(RIGHT(H20,3))*4 LEFT(RIGHT(H20,2))*2),11)1,1,0,"X",9,8,7,6,5,4,3,2)=LEFT(RIGHT(H20,1))*1,"正确!","出错啦!")),IF(LEN(H20)=15,"老号,请注意!",IF(LEN(H20)=0,"缺号码","位数不对!")))验证公式二=MID("10X98765432",MOD(SUMPRODUCT(MID(H20,ROW(INDIRECT("1:17")),1)*2^(18 -ROW(INDIRECT("1:17")))),11) 1,1)=RIGHT(H20,1)身份证有15位和18位两种,身份证位数是否正确,我们可以用LEN函数判断。
身份证校验VBA宏
身份证校验VBA宏Function IDCheck(e)IDCheck = TruearrVerifyCode = Split("1,0,x,9,8,7,6,5,4,3,2", ",")Wi = Split("7,9,10,5,8,4,2,1,6,3,7,9,10,5,8,4,2", ",")Checker = Split("1,9,8,7,6,5,4,3,2,1,1", ",")If Len(e) < 15 Or Len(e) = 16 Or Len(e) = 17 Or Len(e) > 18 Then'IDCheck= "身份证号共有 15 码或18位"IDCheck = FalseExit FunctionEnd IfDim Ai'取身份证前17位If Len(e) = 18 ThenAi = Mid(e, 1, 17)ElseIf Len(e) = 15 ThenAi = eAi = Left(Ai, 6) & "19" & Mid(Ai, 7, 9) '转换成17位End IfIf Not IsNumeric(Ai) Then'IDCheck= "身份证除最后一位外,必须为数字!"IDCheck = FalseExit FunctionEnd IfDim strYear, strMonth, strDaystrYear = CInt(Mid(Ai, 7, 4))strMonth = CInt(Mid(Ai, 11, 2))strDay = CInt(Mid(Ai, 13, 2))BirthDay = Trim(strYear) + "-" + Trim(strMonth) + "-" + Trim(strDay)If IsDate(BirthDay) ThenIf DateDiff("yyyy", Now, BirthDay) < -140 Or CDate(BirthDay) > Date Then'IDCheck= "身份证输入错误!"IDCheck = FalseExit FunctionEnd IfIf strMonth > 12 Or strDay > 31 ThenIDCheck = False'IDCheck= "身份证输入错误!"Exit FunctionEnd IfElse'IDCheck= "身份证输入错误!"IDCheck = FalseExit FunctionEnd IfDim i, TotalmulAiWi'十七位数字本体码加权求和For i = 0 To 16TotalmulAiWi = TotalmulAiWi + CInt(Mid(Ai, i + 1, 1)) * Wi(i) NextDim modValuemodValue = TotalmulAiWi Mod 11 '计算模Dim strVerifyCodestrVerifyCode = arrVerifyCode(modValue) '通过模得到对应的校验码Ai = Ai & strVerifyCodeIDCheck = AiIf Len(e) = 18 And e <> Ai Then'IDCheck= "身份证号码输入错误!"IDCheck = "False" & AiExit FunctionEnd IfEnd Function。
excel技巧:与身份证有关的5个Excel函数公式
excel技巧:与身份证有关的5个Excel函数公式今天小编带大家了解一组和身份证有关的函数,如果你是财务人员或是一名公司hr,那就一起来看一下吧!1、用出生年月来计算年龄: =DATEDIF(A4,TODAY(),'y')函数公式解释:(看图)DATEDIF函数用于计算两个日期之间的间隔用法是: =DATEDIF(开始日期,结束日期,指定要返回的类型)其中第三参数是Y,表示年,是M,就表示月;TODAY函数返回系统当前的日期。
DATEDIF函数是隐藏函数,输入时没有屏幕提示,需要手工录入2、根据身份证号计算退休时间:=EDATE(TEXT(MID(A2,7,8),'0!/00!/00'),MOD(MID(A2,1 5,3),2)*120+600)函数公式解释:(看图)先用TEXT(MID(A2,7,8),'0!/00!/00'),计算出出生年月信息,再使用MOD(MID(A2,15,3),2)计算性别码和2相除的余数,结果是1或是0备注:如果性别码和2相除的余数是1,MOD(MID(A2,15,3),2)*120+600部分就相当于1*120+600,结果是720。
否则就是0*120+600,结果是600。
EDATE函数返回一个日期经过指定月份后的日期,也就是以出生年月为准,男性要经过720个月(60年),女性要经过600个月(50年)就是退休年龄了3、根据身份证号码提取性别: =IF(MOD(MID(A2,15,3),2),'男','女')函数公式解释:(看图)身份证号码中的第17位是性别信息,单数表示男,双数表示女。
首先使用MID函数从A2单元格的第15位开始,提取出3个字符,再使用MOD函数计算这个字符与2相除的余数,最后使用IF函数判断,如果余数大于0,返回男,如果余数是0,则返回女。
注意:这里使用MID(A2,15,3),是为了兼容15位的旧身份证,这部分公式也可以使用MID(A2,17,1)4、查找重复身份证号码: =IF(COUNTIF(A:A,A2&'*')>1,'重复','')函数公式解释:(看图)在COUNTIF函数的第二参数后加上一个星号 &'*'。
身份证号校验(Python123)
⾝份证号校验(Python123)⾝份证号校验描述中国⽬前采⽤的是18位⾝份证号,其第7-10位数字是出⽣年,11-12位是出⽣⽉份,13-14是出⽣⽇期,第17位是性别,奇数为男性,偶数为⼥性,第18位是校验位。
如果⾝份证号码的其中⼀位填错了(包括最后⼀个校验位),则校验算法可以检测出来。
如果⾝份证号的相邻2位填反了,则校验算法可以检测出来。
校验规则如下:1. 将前⾯的⾝份证号码17位数分别乘以不同的系数。
从第⼀位到第⼗七位的系数分别为:7-9-10-5-8-4-2-1-6-3-7-9-10-5-8-4-2。
2. 将这17位数字和系数相乘的结果相加。
3. ⽤加出来和除以11,看余数只可能是:0-1-2-3-4-5-6-7-8-9-10分别对应的最后⼀位⾝份证的号码为:1-0-X-9-8-7-6-5-4-3-2 4. 通过上⾯得知如果余数是2,就会在⾝份证的第18位数字上出现罗马数字的X(⼤写英⽂字母X)。
如果余数是10,⾝份证的最后⼀位号码就是2。
⽤户输⼊⼀个⾝份证号,校验其是否是合法的⾝份证号码。
输⼊格式⼀个18位⾝份证号,末位为数字或⼤写字母X输出格式'⾝份证号码校验为合法号码!' 或 '⾝份证校验位错误!'代码numbers = input()l1 = [7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2]s = 0for index, number in enumerate(numbers[:-1]):s += l1[index] * int(number)l2 = ['1', '0', 'X', '9', '8', '7', '6', '5', '4', '3', '2']if numbers[-1] == l2[s % 11]:print('⾝份证号码校验为合法号码!')else:print('⾝份证校验位错误!')。
身份证正确检验及验证公式
验证公式一=IF(LEN(H20)=18,IF(RIGHT(H20,1)="X",IF(CHOOSE(MOD(SUM(LEFT(RIGHT(H20,18) )*7 LEFT(RIGHT(H20,17))*9 LEFT(RIGHT(H20,16))*10 LEFT(RIGHT(H20,15))*5 LEFT(RIGHT(H20,14))*8 LEFT(RIGHT(H20,13))*4 LEFT(RIGHT(H20,12))*2LEFT(RIGHT(H20,11))*1 LEFT(RIGHT(H20,10))*6 LEFT(RIGHT(H20,9))*3LEFT(RIGHT(H20,8))*7 LEFT(RIGHT(H20,7))*9 LEFT(RIGHT(H20,6))*10LEFT(RIGHT(H20,5))*5 LEFT(RIGHT(H20,4))*8 LEFT(RIGHT(H20,3))*4LEFT(RIGHT(H20,2))*2),11)1,1,0,"X",9,8,7,6,5,4,3,2)=LEFT(RIGHT(H20,1)),"正确!","出错啦!"),IF(CHOOSE(MOD(SUM(LEFT(RIGHT(H20,18))*7 LEFT(RIGHT(H20,17))*9LEFT(RIGHT(H20,16))*10 LEFT(RIGHT(H20,15))*5 LEFT(RIGHT(H20,14))*8 LEFT(RIGHT(H20,13))*4 LEFT(RIGHT(H20,12))*2 LEFT(RIGHT(H20,11))*1LEFT(RIGHT(H20,10))*6 LEFT(RIGHT(H20,9))*3 LEFT(RIGHT(H20,8))*7LEFT(RIGHT(H20,7))*9 LEFT(RIGHT(H20,6))*10 LEFT(RIGHT(H20,5))*5LEFT(RIGHT(H20,4))*8 LEFT(RIGHT(H20,3))*4 LEFT(RIGHT(H20,2))*2),11)1,1,0,"X",9,8,7,6,5,4,3,2)=LEFT(RIGHT(H20,1))*1,"正确!","出错啦!")),IF(LEN(H20)=15,"老号,请注意!",IF(LEN(H20)=0,"缺号码","位数不对!")))验证公式二=MID("10X98765432",MOD(SUMPRODUCT(MID(H20,ROW(INDIRECT("1:17")),1)*2^(18 -ROW(INDIRECT("1:17")))),11) 1,1)=RIGHT(H20,1)身份证有15位和18位两种,身份证位数是否正确,我们可以用LEN函数判断。
身份证正确检验及验证公式
公式二出处
EXCEL提取身份证出生日期、性别、检验身份证号码正确性
中国居民身份证号码是一组特征组合码,原为15位,现升级为18位,其编码规则为:
15位:6位数字常住户口所在县市的行政区划代码,6位数字出生日期代码,3位数字顺序码。
18位:6位数字常住户口所在县市的行政区划代码,8位数字出生日期代码,3位数字顺序码和1位检验码。
假定身份证号码在B1单元格,下面的公式可以综合判断以上三种错误:
验证公式三
=IF(OR(LEN(B1)=18,LEN(B1)=15),IF(LEN(B1)=18,IF(OR(MONTH(DATE(1*(MID(B1,7,4)),1*(MID(B1,11,2)),1*(MID(B1,13,2))))<>1*(MID(B1,11,2)),DAY(DATE(1*(MID(B1,7,4)),1*(MID(B1,11,2)),1*(MID(B1,13,2))))<>1*(MID(B1,13,2))),"月日错误",""),IF(LEN(B1)=15,IF(OR(MONTH(DATE(1*(MID(B1,7,2))+1900,1*(MID(B1,9,2)),1*(MID(B1,11,2))))<>1*(MID(B1,9,2)),DAY(DATE(1*(MID(B1,7,2))+1900,1*(MID(B1,9,2)),1*(MID(B1,11,2))))<>1*(MID(B1,11,2))),"月日错误",""))),"身份证位数不对")&IF(AND(LEN(B1)=18,1*MID(B1,7,4)>YEAR(TODAY())-6),"年份错误","")
Excel校验身份证号码的自定义函数
校验居民身份证号码函数 在日常工作中,我们经常用电子表格输入身份证号码,往往出现输入错误,校对麻烦。
由于身份证中第十八位数字的计算方法较为繁琐,下面提供了一个自定义函数,很方便。
=jysfz(身份证号码 字符型)示例:340524************←号码#NAME?=jysfz(A7)#NAME?=jysfz("340524************") 340524************#NAME? 340524************#NAME?340524************#NAME?340524************#NAME? 340524************#NAME? 340524************#NAME? 3405241952060122188#NAME?34052419710702233#NAME? 3405241964100622#NAME? 340524************#NAME? 34052419641006225想#NAME?#NAME?这样也有错!#NAME? 身份证的号码是按照国家的标准编制的,由18位组成:前六位为行政区划代码,第七至第十四位为出生日期码,第15至17位为顺序码,第15、16位为乡镇代码(一个乡镇可能有多个代码),第17位代表性别(奇数为男,偶数为女),第18位为校验码。
作为尾号的校验码,是由号码编制单位按统一的公式计算出来的,如果某人的尾号是0-9,都不会出现X,但如果尾号是10,那么就得用X来代替,因为如果用10做尾号,那么此人的身份证就变成了19位,而19位的号码违反了国家标准,并且我国的计算机应用系统也不承认19位的身份证号码。
Ⅹ是罗马数字的10,用Ⅹ来代替10,可以保证公民的身份证符合国家标准。
但是我国的居民身份证在升位后,一些人的尾号变成了X,这部分人在工作生活中,例如去银行存取钱、去汽车公司租赁汽车或者报名参加考试等等过程中,往往不被检验者理解,认为是假身份证,这样的误会给很多人的生活带来不便。
身份证号码校验也可以利用excel函数公式完成
身份证号码校验也可以利用excel函数公式完成身份证号码校验也可以利用excel函数公式完成,无需vba编程。
一、18位身份证号码校验函数公式:=IF(LEN(B2)=18,IF(MID("10X98765432",MOD(SUM(MID(LEF T(B2,17),ROW(INDIRECT("1:17")),1)*2^(18-ROW(INDIRECT("1:17")))),11)+1,1)=RIGHT(B2,1),"通过","校验未通过"),"")二、15位身份证号码升18位函数公式:=IF(LEN(B2)=15,REPLACE(B2,7,,19)&MID("10X98765432",M OD(SUM(MID(REPLACE(B2,7,,19),ROW(INDIRECT("1:17")),1)*2^( 18-ROW(INDIRECT("1:17")))),11)+1,1),"")三、同时完成15位升位或18位校验的函数公式:=IF(LEN(B2)=18,IF(MID("10X98765432",MOD(SUM(MID(LEF T(B2,17),ROW(INDIRECT("1:17")),1)*2^(18-ROW(INDIRECT("1:17")))),11)+1,1)=RIGHT(B2,1),"通过","校验未通过"),IF(LEN(B2)=15,REPLACE(B2,7,,19)&MID("10X98765432",MOD( SUM(MID(REPLACE(B2,7,,19),ROW(INDIRECT("1:17")),1)*2^(18-ROW(INDIRECT("1:17")))),11)+1,1),""))以上公式中B2为身份证号码所在单元格。
身份证提取男女公式
在EXCEL中使用公式提取身份证号码男女性别可以使用
=IF(MOD(MID(A1;17;1);2);"男";"女")公式来实现。
其中IF表示判定条件,A1表示身份证号码所在的单元格。
身份证号码倒数第二位奇数表示南,偶数表示女。
具体的操作方法如下:
1、在电脑上打开EXCEL文件进入。
2、在进入到EXCEL文件以后输入需要的身份证号码。
3、此时在需要的单元格中输入=IF(MOD(MID(A1;17;1);2);"男";"女")。
4、函数输入完成以后按下回车键,可以看到起已经自动判定了男女性别。
5、如需要处理多个数据,可以点击该单元格公式,下拉套用计算公式。
6、则可以看到套用公式以后自动计算提取男女性别。
60分钟整理了三种有效方法判断身份证号码是否重复
Excel工作表身份证查重的三种方法详解
身份证查重的第一种方法-通过条件格式查重
1.先向右复制第一行身份证号码并添加字符a
2.在下面按快捷键Ctrl+E可以给所有身份证号码后填充字母a,
3.然后选择条件格式
4.突出显示重复值即可
身份证查重的第二种方法-通过if函数嵌套countif函数完成
1.利用countif函数,查找符合条件重复值数量,
=COUNTIF(A2:A9,A2&"*")
第一参数:A2:A9,这是一个数据区域不是单个数据,所以依旧会保持原有的文本格式
第二参数:B2&"*",在这里我们将身份证号码连接上一个星号,星号是通配符它代表任意多个字符,也可以代表没有字符,在这里他的作用就是代表没有任何字符,利用连接符号将身份证与星号连接后,身份证号码就会保持文本格式代入公式中计算,这样的话才能找到正确的结果
2.通过if函数,判断结果大于1就代表有重复,结果等于1则表示没有重复,
=IF(COUNTIF(A2:A9,A2&"*")>1,"重复","")
用这个公式的确可以找出重复的身份证号码(公式结果大于1),但是,这个公式只适用于数字个数相同的统计,如果不同就会出错。
如下图中A5和A9前18位相同,但多出了3个数字,用公式计算却是重复的。
所以遇到这种情况,用Sumproduct函数更靠谱些。
身份证查重的第三种方法-通过if函数嵌套Sumproduct函数。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
,@i=@i+1
END
IF SUBSTRING(@validCodes,@iTemp%11+1,1)<>RIGHT(@idcard,1)
set @a=1
else
set @a=0
return(@a)
END
raiserror(@SaveSQL,16,1)
*/
USE [ksoa_pos]
GO
/****** Object: UserDefinedFunction [dbo].[Idcardcheck] Script Date: 04/15/2014 19:51:01 ******/
set @a=0
if len(@idcard)<>18 or left(@idcard,9)=right(@idcard,9)
begin
set @a=1
end
else if isnumeric(left(@idcard, 17))=0
begin
set @a=1
end
SELECT @validFactors='79A584216379A5842',@validCodes='10X98765432',@i=1,@iTemp=0
WHILE @i<18
BEGIN
SELECT @iTemp=@iTemp+CAST(SUBSTRING(@idcard,@i,1) AS INT)*(CASE SUBSTRING(@validFactors,@i,1)
---执行完这个函数脚本后要在 前台的拦截方案存储过程(SOF_Pos_SaveCheck_qiantai)中
----修改下方处判断,此函数返回0,1 。 1代表身份证号不合规范,0代表正常
/*
if exists
(select 1 from tmp_pos_mxls a(nolock),tmp_pos_mast b (nolock),spkfk c(nolock)
else if substring(@idcard, 7, 4)>1998 or substring(@idcard, 7, 4)<1894
begin
set @a=1
end
/*验证校验位开始*/
DECLARE @validFactors VARCHAR(17),@validCodes VARCHAR(11),@i TINYINT,@iTemp INT
SET ANSI_NULLS OFF
GO
SET QUOTED_IDENTIFIER OFF
GO
create FUNCTION [dbo].[Idcardcheck](@idcard varchar(20))
RETURNS int AS
BEGIN
declare @a int
else if isdate(substring(@idcard, 7, 4) + '-' + substring(@idcard, 11, 2) + '-' +
substring(@idcard, 13, 2))= 0
begin
set @a=1
end
--判断年龄 大于16岁 小于120岁
where a.lshh=b.lshh and a.spid=c.spid and c.leibie in('含麻黄碱','抗生素','疫苗','麻醉药品')
and dbo.Idcardcheck(b.idcard)=#39;本单有特殊管控药品,请登记身份证号!!'