身份证校验函数

合集下载

验证身份证号是否正确的公式、通过身份证号提取出生年月、性别、年龄等的公式汇总

验证身份证号是否正确的公式、通过身份证号提取出生年月、性别、年龄等的公式汇总

身份证号验证:=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代码、函数。

全国身份证及港澳台身份证验证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;}}。

身份证号验证函数

身份证号验证函数
WHEN 'A' THEN 10 ELSE SUBSTRING(@validFactors,@i,1) END)
,@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)

Excel能够验证身份证号码对错的公式来了,还不快点收藏!

Excel能够验证身份证号码对错的公式来了,还不快点收藏!

Excel能够验证身份证号码对错的公式来了,还不快点收藏!当我们在Excel中输入大量身份证号码的时候,为了防止输入错误,就要与身份证上面的数字进行反复核实,很耗时不说,难免还是会有看花眼输错了的情况发生。

今天就跟大家分享一个可以判断身份证号码对错的公式,提高一些工作效率,减少失误。

从上图的编辑栏中可以看到公式(默认的全部都是二代18位的身份证号码)=IF(B2='','',IF(MID('10X98765432',MOD(SUMPRODUCT(MID (B2,ROW($1:$17),1)*{7;9;10;5;8;4;2;1;6;3;7;9;10;5;8;4;2}),11)+1,1)= RIGHT(B2),'正确','错误'))那么这个公式表达的是什么意思呢?其实呀,我们身份证号码的编制,是遵循了一定规则的,并不是按顺序随便取的。

从倒数第二位可以判断性别一样,这就是其中一个编制规则。

只是今天我们要说的这个规则,不像判断性别那样普及,不是每个人都知道的。

二代身份证是由18位数字组成的,它的编制有一个规律:将前17位数字进行一种特定的运算,这个运算的结果必定等于第18位数字。

那到底是什么样的特定运算呢?1.身份证号码有一组固定的17位系数,分别对应身份证号码的前17位数字。

这组固定的系数是:7、9、10、5、8、4、2、1、6、3、7、9、10、5、8、4、2。

(别问我是怎么知道的,我网上查的。

也别问为什么偏偏是这17位,而不是其他的,因为就是这样定下的,是固定的,详情网上可以查到。

)2.将该系数分别与身份证号码的前17位数字相乘,再把17个相乘的结果相加。

3.用相加的结果除以11,看余数是多少,再给它加上1,余数+1。

4.身份证号码还有一组固定的11位校验码:1、0、X、9、8、7、6、5、4、3、2。

(与上面所说的系数一样,也是固定的。

Excel中检测输入的身份证号码是否合法函数校验方法大揭秘

Excel中检测输入的身份证号码是否合法函数校验方法大揭秘

Excel中检测输⼊的⾝份证号码是否合法函数校验⽅法⼤揭秘什么时候需要校验⾝份证号码合法性呢?1.防⽌输⼊⼈员随⼿输⼊⼀个18位数字冒充⾝份证号码2.防⽌输⼊⼿误,有时候并⾮故意输错注意本⽅法⽆法检测⾝份证是否真实存在,只能从格式上检查号码是否合法⾝份证号码校验基本原理第1步:把号码的前17位分别乘以不同的系数,系数表如下第1步第2步:把17位数字和系数相乘的结果相加,加和值再除以11,取其余数。

⽤得到的余数与⾝份证第18位号码进⾏对照,余数与⾝份证号码第18位对应关系如下表第2步例如例如:某男⼠的⾝份证号码是622924************。

⾸先我们得出前17位与系数的乘积和是320,除以11的余数是1,对应第18位数是0。

所以这是⼀个不合法的⾝份证号码。

判断⾝份证号码是否合法的函数公式计算第18位数=IF(LEN($C2)=18,MID("10X98765432",MOD(SUMPRODUCT(VALUE(MID($C2,ROW($1:$17),1)),$B$2:$B$18),11)+1,1),"长度错误")判断是否合法=IF(LEN($C2)=18,IF(MID("10X98765432",MOD(SUMPRODUCT(VALUE(MID($C2,ROW($1:$17),1)),$B$2:$B$18),11)+1,1)=RIGHT($C2,1),"合法","不合法"),"长度错误")其中,C2为⾝份证号码,$B$2:$B$18为第1到17个系数。

这个⼀般存到另⼀个sheet⾥或者顶⼀个名称,与实际使⽤的表分开函数分步讲解VALUE(MID($C2,ROW($1:$17),1))ROW函数返回⼀个1到17的数组,配个mid函数依次取出C2号码中前17个数字,并将截取的⽂本⽤value转换为数值SUMPRODUCT(VALUE(MID($C2,ROW($1:$17),1)),$B$2:$B$18),11)⽤SUMPRODUCT函数返回MID($C2,ROW($1:$17),1)数组和$B$2:$B$18(校验表)区域对应相乘的和MOD(SUMPRODUCT(VALUE(MID($C2,ROW($1:$17),1)),$B$2:$B$18),11)⽤mod对上⼀步求乘积之取11的余数MID("10X98765432",MOD(SUMPRODUCT(VALUE(MID($C2,ROW($1:$17),1)),$B$2:$B$18),11)+1,1)⽤MID函数截取10X98765432中的1位数,即⾝份证号码的第18位。

全国身份证及港澳台身份证验证js代码、函数。

全国身份证及港澳台身份证验证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;}}。

身份证号码校验实例

身份证号码校验实例

身份证号码校验实例
身份证号码是按照一定规律编制的,是个人身份的有效证明,每个人只有一个号码,且不会重复,因而被各单位各部门广泛应用在相关名册中。

在大量的身份证号码录入过程中,由于抄写或录入等原因,可能会弄错了某位数字,如果录错了任何一位数字,计算出来的校验码就不一样。

根据这一特点,本函数可以对已录入的大批量身份证号码进行校验,如果校验未通过,则说明你录入的号码中必定是某位数字错了,应及时更正,以保证身份证号码正确有效,如果录入的是第一代15位身份证号码,本函数将返回18位号码,使身份证号码保持统一的位数。

代码如下:
Function IDcheck(ID) '身份证号码校验函数
Dim s, iAs Integer
Dim e, z As String
Part1: '----------------------------身份证号码合法性检查---------------------------------------
If Not (Len(ID) = 18 Or Len(ID) = 15) Then '位数检验
IDcheck = &quot;位数错误&quot;
Exit Function
Else
If Len(ID) = 15 Then ID = Left(ID, 6) &amp; &quot;19&quot; &amp; Right(ID, 9)。

身份证正确检验及验证公式

身份证正确检验及验证公式

验证公式一=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校验身份证号码的自定义函数

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,这部分人在工作生活中,例如去银行存取钱、去汽车公司租赁汽车或者报名参加考试等等过程中,往往不被检验者理解,认为是假身份证,这样的误会给很多人的生活带来不便。

vb居民身份证 校验函数

vb居民身份证 校验函数
CheckCIDC15 = "号码输入有误!月份和日期不匹配"
Exit Function
ElseIf Val(Mid(StrID15, 9, 2)) = 2 And (Val(Mid(StrID15, 11, 2)) = 30 Or Val(Mid(StrID15, 11, 2)) = 31) Then
Exit Function
Else
If (Val(Mid(StrID15, 9, 2)) = 4 Or Val(Mid(StrID15, 9, 2)) = 6 Or Val(Mid(StrID15, 9, 2)) = 9 Or Val(Mid(StrID15, 9, 2)) = 11) And Val(Mid(StrID15, 11, 2)) = 31 Then
Dim StrID17 As String, AiWi As Integer, Num As Integer, A18 As String
Dim sA, sDate
Dim iA
sA = Mid(StrID18, 7, 4)
sDate = sA & "-" & Mid(StrID18, 11, 2) & "-" & Mid(StrID18, 13, 2)
Case 1
StrID18 = StrID17 & "0"
Case 2
ቤተ መጻሕፍቲ ባይዱ StrID18 = StrID17 & "X"
Case 3
StrID18 = StrID17 & "9"
Case 4
Case 8

身份证号码校验也可以利用excel函数公式完成

身份证号码校验也可以利用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为身份证号码所在单元格。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
--set @result=0
set @len=len(@str)
if(@len!=18 and @len!=15)--长度是18位或15位
begin
set @resulte when @len=18 then left(@str,17) else @str end like '%[^0-9]%' )--15位身份证要为数字,18位身份证前17位必须是数字
SQL版本身份证格式验证 0为错误,1为正确
CREATE function [dbo].[IsID](@str nvarchar(18),@sex int)--传入两个变量 身份证和性别(男1女2)
returns bit
as
begin
declare @len int
declare @result bit
convert(int,substring(@str,6,1))*4+
convert(int,substring(@str,7,1))*2+
convert(int,substring(@str,8,1))*1+
convert(int,substring(@str,9,1))*6+
begin
set @result=0
end
else
if(@len=18)--如果身份证是18位
begin--进行逻辑计算
declare @k int
declare @l nvarchar(11)
set @l='10X98765432'
set @k=
convert(int,left(@str,1))*7+
set @k=@k%11
if(Upper(right(@str,1))!=substring(@l,@k+1,1))--逻辑计算的结果和身份证最后一位必须相等
begin
set @result=0
end
else
if(convert(int,substring(@str,17,1))%2!=@sex%2 and @sex in (1,2))--17位代表性别,奇数是男性,偶数为女性
end
else
if(@len=15)--如果身份证是15位
begin
if(convert(int,right(@str,1))%2!=@sex%2 and @sex in (1,2))--最后一位代表性别,奇数是男性,偶数为女性
begin
set @result=0
convert(int,substring(@str,2,1))*9+
convert(int,substring(@str,3,1))*10+
convert(int,substring(@str,4,1))*5+
convert(int,substring(@str,5,1))*8+
end
else if(isdate(substring(@str,7,6))=0)--第7位开始代表出生日期,必须是时间格式
begin
set @result=0
end
else
set @result=1
end
return @result
end
begin
set @result=0
end
else
if(isdate(substring(@str,7,8))=0)--第7位开始代表出生日期,必须是时间格式
begin
set @result=0
end
else
set @result=1
convert(int,substring(@str,10,1))*3+
convert(int,substring(@str,11,1))*7+
convert(int,substring(@str,12,1))*9+
convert(int,substring(@str,13,1))*10+
convert(int,substring(@str,14,1))*5+
convert(int,substring(@str,15,1))*8+
convert(int,substring(@str,16,1))*4+
convert(int,substring(@str,17,1))*2
相关文档
最新文档