身份证为什么要校验码
我国现行使用公民身份证号码有两种尊循两个国家标准,〖GB 11643-1989〗和〖GB 11643-1999〗。
〖GB 11643-1989〗中规定的是15位身份证号码:排列顺序从左至右依次为:六位数字地址码,六位数字出生日期码,三位数字顺序码,其中出生日期码不包含世纪数。
〖GB 11643-1999〗中规定的是18位身份证号码:公民身份号码是特征组合码,由十七位数字本体码和一位数字校验码组成。排列顺序从左至右依次为:六位数字地址码,八位数字出生日期码,三位数字顺序码和一位数字校验码。
地址码表示编码对象常住户口所在县(市、旗、区)的行政区划代码。
生日期码表示编码对象出生的年、月、日,其中年份用四位数字表示,年、月、日之间不用分隔符。
顺序码表示同一地址码所标识的区域范围内,对同年、月、日出生的人员编定的顺序号。
顺序码的奇数分给男性,偶数分给女性。
校验码是根据前面十七位数字码,按照ISO 7064:1983.MOD 11-2校验码计算出来的检验码。
为什么除11,在于计算校验码时的函数。请看下边的函数:
公式如下:
∑(a[i]*W[i]) mod 11 ( i = 2, 3, ..., 18 ) (1)
"*" 表示乘号
i--------表示身份证号码每一位的序号,从右至左,最左侧为18,最右侧为1。
a[i]-----表示身份证号码第 i 位上的号码
W[i]-----表示第 i 位上的权值 W[i] = 2^(i-1) mod 11
计算公式 (1) 令结果为 R
根据下表找出 R 对应的校验码即为要求身份证号码的校验码C。
R 0 1 2 3 4 5 6 7 8 9 10
C 1 0 X 9 8 7 6 5 4 3 2
由此看出 X 就是 10,罗马数字中的 10 就是X,所以在新标准的身份证号码中可能含有非数字的字母X。
~(重点看清楚)~ 这个函数展开就是:
a[1]*W[1]+a[2]*W[2]+……+a[18]*W[18]=?
?mod11=“?对11求模”
如:22mod11=2 23mod22也是2 33mod11=3
就是出于后面那个数,只取商不取余数
所以从函数和其展开式来看要对11求模,所一要除11
以下为列子:
*此函数功能:输入的15位或17位或18位的身份证号,返回校验后的最后一位
*
*-----------------------------
FUNCTION sfzjy
Parameters cID
DO CASE
CASE LEN(ALLTRIM(cID)) = 15
cID = STUFF(ALLTRIM(cID),7,0,"19")
CASE LEN(ALLTRIM(cID)) = 18 OR LEN(ALLTRIM(cID)) = 17
cID =LEFT(ALLTRIM(cID),17)
OTHERWISE
RETURN .F.
ENDCASE
If Len(ALLTRIM(cID))#17
Return .f.
Endif
nSum=Val(SubStr(cID,1,1)) * 7 ;
+ Val(SubStr(cID,2,1)) * 9 ;
+ Val(SubStr(cID,3,1)) * 10 ;
+ Val(SubStr(cID,4,1)) * 5 ;
+ Val(SubStr(cID,5,1)) * 8 ;
+ Val(SubStr(cID,6,1)) * 4 ;
+ Val(SubStr(cID,7,1)) * 2 ;
+ Val(SubStr(cID,8,1)) * 1 ;
+ Val(SubStr(cID,9,1)) * 6 ;
+ Val(SubStr(cID,10,1)) * 3 ;
+ Val(SubStr(cID,11,1)) * 7 ;
+ Val(SubStr(cID,12,1)) * 9 ;
+ Val(SubStr(cID,13,1)) * 10 ;
+ Val(SubStr(cID,14,1)) * 5 ;
+ Val(SubStr(cID,15,1)) * 8 ;
+ Val(SubStr(cID,16,1)) * 4 ;
+ Val(SubStr(cID,17,1)) * 2
*计算校验位
check_number=INT((12-nSum % 11)%11)
If check_number=10
check_number='X'
Endif
Return check_number
Endfunc
*-----------------------------
*
*此函数功能:输入的15位或18位身份证号,返回正确的18位的身份证号。
*
*---------------------------
FUNCTION IDCardTF
PARAMETERS cNumber
#DEFINE InvalidSize "身份证号码长度不正确!"
#DEFINE InvalidChar "身份证号码包括非法字符!"
#DEFINE InvalidDate "出生日期无效!"
#DEFINE InvalidReturnValue ".F."
PRIVATE cString
DO CASE
CASE LEN(cNumber) = 15
cString = STUFF(cNumber,7,0,"19")
CASE LEN(cNumber) = 18
cString =LEFT(ALLTRIM(cNumber),17)
OTHERWISE
MESSAGEBOX(InvalidSize,48,"信息提示")
RETURN InvalidReturnValue
ENDCASE
PRIVATE i,n,iRet
STORE 0 TO iRet
FOR i = 1 TO 17
n = SUBSTR(cString,i,1)
IF NOT ISDIGIT(n)
MESSAGEBOX(invalidChar,48,"信息提示")
RETURN invalidReturnValue
ENDIF
n = 2 ^ (18 - i) % 11 * VAL(n)
iRet = iRet + n
ENDFOR
iRet = iRet % 11 + 1
PRIVATE oldDateSet, oldCentury
PRIVATE oldStrictDate, BirthDay
oldDateSet = SET("DATE")
oldCentury = SET("CENTURY")
oldStrictDate = SET("STRICTDATE")
SET DATE ANSI
SET CENTURY ON
SET STRICTDATE TO 0
BirthDay = CTOD(SUBSTR(cString,7,4)+"-"+SUBSTR(cString,11,2)+"-"+SUBSTR(cString,13,2))
SET STRICTDATE TO &oldStrictDate
SET CENTURY &oldCentury
SET DATE &oldDateSet
IF EMPTY(BirthDay)
MESSAGEBOX(InvalidDate,48,"信息提示")
RETURN InvalidReturnValue
ENDIF
RETURN cString+SUBSTR("10x98765432",iRet,1)
ENDFUNC
*-----------------------------
*
*此函数功能:检验输入的15位或18位身份证号码是否为合法
*
*-----------------------------
FUNCTION sfzyn
LPARAMETERS lstr &&参数:lstr 传入的号码
LOCAL lstr,relyn,tsfz
LOCAL m1,m2,m3,m4,m,i,r,c,ai,wi
SET TALK OFF
SET DATE TO ANSI
SET CENT ON
relyn=.F. &&返回值
tsfz=ALLT(lstr)
*分别用m1,m2,m3,m4表示四个条件是否成立
STOR .T. TO m1,m2,m3,m4
*条件1:只能是15或18位
m1=IIF(LEN(tsfz)=15 OR LEN(tsfz)=18,.T.,.F.)
IF LEN(tsfz)=15 && 15位的号码
FOR i=1 TO 15 &&检查每一位是否为数字
m=ASC(SUBS(tsfz,i,1))
IF m57 &&数字
m2=.F. &&若有一位不是就不再查
EXIT
ENDIF
ENDFOR
m="19" +SUBS(tsfz, 7,2) &&早期的号都是上个世纪的
m=m+"."+SUBS(tsfz, 9,2)
m=m+"."+SUBS(tsfz,11,2)
m=CTOD(m)
IF ISNULL(m) OR isblank(m)
m3=.F. &&生日不正确
ENDIF
ENDIF
IF LEN(tsfz)=18 && 18位的号码
FOR i=1 TO 17
m=ASC(SUBS(tsfz,i,1))
IF m57
m2=.F.
EXIT
ENDIF
ENDFOR
m=SUBS(tsfz,7,4)
m=m+"."+SUBS(tsfz,11,2)
m=m+"."+SUBS(tsfz,13,2)
m=CTOD(m)
IF ISNULL(m) OR isblank(m)
m3=.F.
ENDIF
r=0 &&计算校验位
FOR i=18 TO 2 STEP -1
ai=VAL(SUBS(tsfz,19-i,1))
wi=MOD(2^(i-1),11)
r=r+ai*wi
NEXT
r=MOD(r,11)
DO CASE
CASE r=0
c="1"
CASE r=1
c="0"
CASE r=2
c="X"
OTHER
c=ALLTRIM(STR(12-r))
ENDCASE
IF UPPE(SUBS(tsfz,18,1))c
m4=.F. &&校验位与原码最末位不同
ENDIF
ENDIF
*四个条件全成立,则返回.t.
relyn=IIF(m1 AND m2 AND m3 AND m4,.T.,.F.)
RETU relyn
ENDFUN
*-----------------------------
*
*此函数功能:输入15位或18位的身份证号,返回被校验后的18位的身份证号,若身份证号非法,则返回空
*
*-----------------------------
FUNC sfjy
PARA msfz
ON ERRO RETU ''
DIME T(17)
PRIV msfz,T,sn,i
msfz=ALLT(msfz)
DO CASE
CASE LEN(msfz)=15
msfz=LEFT(msfz,6)+'19'+SUBS(msfz,7)
CASE LEN(msfz)=18
msfz=LEFT(msfz,17)
OTHE
RETU ''
ENDC
FOR i=1 TO 17
IF !ISDI(SUBS(msfz,i,1))
RETU ''
ENDI
ENDF
IF !LEFT(msfz,2)$'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'
RETU ''
ENDI
IF EMPT(DATE(VAL(SUBS(msfz,7,4)),VAL(SUBS(msfz,11,2)),VAL(SUBS(msfz,13,2))))
RETU ''
ENDI
sn=0
T(1)=7
T(2)=9
T(3)=10
T(4)=5
T(5)=8
T(6)=4
T(7)=2
T(8)=1
T(9)=6
T(10)=3
T(11)=7
T(12)=9
T(13)=10
T(14)=5
T(15)=8
T(16)=4
T(17)=2
FOR i=1 TO 17
sn=sn+VAL(SUBS(msfz,i,1))*T(i)
ENDF
sn=MOD(sn,11)
ON ERRO
RETU msfz+SUBS('10X98765432',sn+1,1)
身份证校验码:身份证号码的最后一位
原因:可以保证公民的身份证符合国家标准。
作为尾号的校验码,是由号码编制单位按统一的公式计算出来的:
例如:
某男性的身份证号码为【53010219200508011X】, 我们看看这个身份证是不是合法的身份证。
首先我们得出前17位的乘积和【(5*7)+(3*9)+(0*10)+(1*5)+(0*8)+(2*4)+(1*2)+(9*1)+(2*6)+(0*3)+(0*7)+(5*9)+(0*10)+(8*5)+(0*8)+(1*4)+(1*2)】是189。
然后用189除以11得出的结果是189/11=17----2,也就是说其余数是2。最后通过对应规则就可以知道余数2对应的检验码是X。所以,可以判定这是一个正确的身份证号码。
扩展资料:
身份证挂失方法如下:
1、身份证丢失后,本人应尽快携带户口簿到户籍所在地的公安分局户政大厅,进行丢失补证的申报。民警对户口簿、本人、电脑户籍上的信息核对后,对当事人进行信息采集和证件办理。
2、首先进行相貌信息采集,就是拍摄证件照。由于背景是浅色,当事人应穿着深色衣物,露出眉毛和耳朵,不要佩戴耳钉、项链等首饰和头饰,不许化浓妆。
如果平时戴眼镜的情况比较多,为了避免身份证上的相貌与生活中差异过大,并且出于避免闪光灯遇镜片反光的目的,可在照相时戴眼镜框。拍照之后,采集当事人指纹信息。
3、信息采集完毕后,当事人在确认单上签字,一个月后可到公安机关领取新证。如果着急用,可以办理加急手续,10个工作日由邮政部门寄送到指定地点。如果在办证期间需要办理银行卡业务或者购买火车票、飞机票,当事人可现场办理临时身份证,或开具相关户籍证明。
临时身份证和户籍证明,在有效期内都具备身份证的法律效力,只是没有磁条和芯片,不能够刷卡买票。
参考资料来源:百度百科-居民身份证号码
校验码是识别一个身份证号码是否真实存在的重要的依据。
居民身份证的号码是按照国家的标准编制的,由18位组成:前六位为行政区划代码,第七至第十四位为出生日期码,第15至17位为顺序码(单数为男性,双数为女性),第18位为校验码,是前面17位的一种检验代码。
如果你改变了前面某个数字,位于最后一位的效验代码不响应改变,就会被计算软件判断为非法身份证号码。作为尾号的校验码,是由号码编制单位按统一的公式计算出来的,由0——10组成。如果某人的尾号是0-9,都不会出现X,但如果尾号是10,那么就得用X来代替。
因为如果用10做尾号,那么此人的身份证就变成了19位,而19位的号码违反了国家标准,并且我国的计算机应用系统也不承认19位的身份证号码。Ⅹ是罗马数字的10,用X来代替10,可以保证公民的身份证符合国家标准。
扩展资料
校验码作为尾号的校验码,是由号码编制单位按统一的公式计算出来的,如果某人的尾号是0-9,都不会出现X,但如果尾号是10,那么就得用X来代替,因为如果用10做尾号,那么此人的身份证就变成了19位,而19位的号码违反了国家标准,并且中国的计算机应用系统也不承认19位的身份证号码。
Ⅹ是罗马数字的10,用X来代替10,可以保证公民的身份证符合国家标准。
从1999年10月1日起,全国实行公民身份证号码制度,居民身份证编号由原15位升至18位。前6位为地址码;第七位至14位为出生日期码,此码由6位数改为8位数,其中年份用4位数表示;第15位至17位为顺序码,取消了顺序码中对百岁老人使用的特定编号。
第十八位为校验码,主要是为了校验计算机输入公民身份证号码的前17位数字是否正确,其取值范围是0至10,当值等于10时,用罗马数字符X表示。
参考资料来源:百度百科-居民身份证号码
校验码是识别一个身份证号码是否真实存在的重要的依据。
校验码判断身份证号码真伪过程如下:
第一步:将身份证号码的第1位数字与7相乘;将身份证号码的第2位数字与9相乘;将身份证号码的第3位数字与10相乘;将身份证号码的第4位数字与5相乘;将身份证号码的第5位数字与8相乘;将身份证号码的第6位数字与4相乘;将身份证号码的第7位数字与2相乘;将身份证号码的第8位数字与1相乘;将身份证号码的第9位数字与6相乘;将身份证号码的第10位数字与3相乘;将身份证号码的第11位数字与7相乘;将身份证号码的第12位数字与9相乘;将身份证号码的第13位数字与10相乘;将身份证号码的第14位数字与5相乘;将身份证号码的第15位数字与8相乘;将身份证号码的第16位数字与4相乘;将身份证号码的第17位数字与2相乘。
第二步:将第一步身份证号码1~17位相乘的结果求和,全部加起来。
第三步:用第二步计算出来的结果除以11,这样就会出现余数为0,余数为1,余数为2,余数为3,余数为4,余数为5,余数为6,余数为7,余数为8,余数为9,余数为10共11种可能性。
第四步:如果余数为0,那对应的最后一位身份证的号码为1;如果余数为1,那对应的最后一位身份证的号码为0;如果余数为2,那对应的最后一位身份证的号码为X;如果余数为3,那对应的最后一位身份证的号码为9;如果余数为4,那对应的最后一位身份证的号码为8;如果余数为5,那对应的最后一位身份证的号码为7;如果余数为6,那对应的最后一位身份证的号码为6;如果余数为7,那对应的最后一位身份证的号码为5;如果余数为8,那对应的最后一位身份证的号码为4;如果余数为9,那对应的最后一位身份证的号码为3;如果余数为10,那对应的最后一位身份证的号码为2。
比如: 身份证号码 432831196411150810 这个身份证是否是有效身份证号码,看校验码分析。
校验码是0,身份证号码 432831196411150810中最后一位是0,所以这是一个有效的身份证号码。
身份证校验码是根据前面十七位数字码,按照ISO 7064:1983.MOD 11-2校验码计算出来的检验码。作为尾号的校验码,是由号码编制单位按统一的公式计算出来的,如果某人的尾号是0-9,都不会出现X,但如果尾号是10,那么就得用X来代替,因为如果用10做尾号,那么此人的身份证就变成了19位,而19位的号码违反了国家标准,并且我国的计算机应用系统也不承认19位的身份证号码。Ⅹ是罗马数字的10,用X来代替10,可以保证公民的身份证符合国家标准。
身份证的第十八位是校验码,校验码是根据前面的十七位算出来的0-10的数字,有了校验码就可以防止录入前面数字的时候录入错误也可以防止有假的身份证号码。
身份证校验码干啥用?
身份证校验码是用来验证身份证号码是否合法的一个关键代码。它位于身份证号码的末尾,通常是一个数字或者X。校验码的计算基于身份证前17位数字,通过特定的公式得出,以确保身份证号码的正确性和唯一性。居民身份证号码由18位数字组成,其中第1至6位表示户籍所在地的行政区划代码,第7至14位表示持有人的...
身份证为什么要校验码
校验码是识别一个身份证号码是否真实存在的重要的依据。居民身份证的号码是按照国家的标准编制的,由18位组成:前六位为行政区划代码,第七至第十四位为出生日期码,第15至17位为顺序码(单数为男性,双数为女性),第18位为校验码,是前面17位的一种检验代码。如果你改变了前面某个数字,位于最后一...
身份证的校验码是什么意思
身份证的校验码是身份证号码中的第18位数字,它的作用是用于验证身份证号码的正确性。校验码的计算基于身份证前17位数字,通过一定的算法得出,用以检验身份证号码在生成过程中是否出现错误。身份证上的前6位数字代表持有人的出生年月日,其中前4位表示年份,接下来2位表示月份,再接下来2位表示日期。...
身份证的校验码是什么意思
校验码可以用来识别身份证号码是否真实存在。身份证上的号码一共有18位,前1和2位的数字是目前所在省份的代码,3和4位是所在城市的代码,5、6位则是所在区县的代码,7-14位分别代表了出生的年、月、日,7-10位代表的是年份,11和12位是月份,13和14位是日。15和16位是当地派出所的代码,17位是...
身份证校验码是什么意思
身份证校验码是身份证号码的最后一位数字,用于验证身份证号码的正确性。它通过一系列复杂的算法计算得出,以确保身份证号码的准确无误。身份证上的号码共有18位,其中前1到2位代表所在省份的代码,3到4位代表所在城市的代码,5到6位则代表所在区县的代码。第7到14位表示出生年月日,其中第7到10位...
身份证号码编码规则
4、校验码:身份证号码的最后一位是校验码,用于检验身份证号码的合法性和准确性。校验码是根据前面17位数字按照一定算法计算得出的,通过校验码可以判断身份证号码是否正确。身份证号码的有效性验证方法是通过一系列规则和算法来确认一个身份证号码是否合法和有效。这些规则包括校验码的计算、身份证号码长度...
身份证后四位代表什么意思 三位数字顺序码和一位数字校验码?
顺序码:表示的是对同一地区码内(身份证前六位)同年同月同日出生的进行编订顺序号而得出得来的,奇数代表着男生,偶数代表着女生,以便更好地分辨男女。校验码:是根据身份证十八位数字的前十七位,按照号码编制单位ISO 7064:1983.MOD 11-2校验码统一计算出来的检验码。验证码分别是从0-10,但由于10...
身份证码是有哪几部分组成的
代表在同一地址码所标识的区域范围内,对同年、同月、同日出生的人编定的顺序号,一般顺序码的奇数为男性,偶数分配为女性。4、第18位为校验码。 当检验码为“10”时,为了保证公民身份证号码18位,所以用“X”表示。关于居民身份证中的“X”从1999年10月1日起,全国实行购级公民身份证号码制度,...
身份证号码的组成结构和校验码计算方法是怎样的?
以一个例子说明:假设某男性公民的身份证号码是34052419800101001。我们将其扩展成19位,然后运用加权因子Wi(根据位置计算得出)进行计算。经过一系列复杂的计算,我们得出校验码为X,这意味着他的完整号码是34052419800101001X。通过这样的系统,每个身份证号码都独一无二,如同每个人的身份标签,确保了信息的...
身份证的编码规则是什么
一般是随计算机的随机产生,用来检验身份证的正确性。校检码可以是0-9的数字,有时也用_表示。1、身份证编码规则如下:根据【中华人民共和国国家标准GB11643-1999】中有关公民身份号码的规定,公民身份号码是特征组合码,由十七位数字本体码和一位数字校验码组成。顺序码(身份证第十五位到十七位)是县...
栋怜天方: 不用,新身份证,里面有芯片.直接可以调出的.
榆树市13998688599: 为什么身份证后面带字母 - ?
栋怜天方: 你好,身份证号码的最后一位数字是校验码,因为同一个县(区)同一天出生的人数太多,无法按数字编排,只能用“X”代替.
榆树市13998688599: 为什么有些人的身份证后面有X,而有些人没有? - ?
栋怜天方: 居民身份证的号码是按照国家的标准编制的,由18位组成:前六位为行政区划代码,第七至第十四位为出生日期码,第15至17位为顺序码,第18位为校验码.作为尾号的校验码,是由号码编制单位按统一的公式计算出来的,如果某人的尾号是0...
榆树市13998688599: 身份证号为什么有x?
栋怜天方: 18位为校验码,0-9和X.作为尾号的校验码,是由号码编制单位按统一的公式计算出来的,计算的结果是0-10,如果某人的尾号是0-9,都不会出现X,但如果尾号是10,那么就得用X来代替,因为如果用10做尾号,那么此人的身份证就变成了19位.X是罗马数字的10,用X来代替10.
榆树市13998688599: 为什么有的身份证有英文字母?
栋怜天方: 关于新身份证号码上的“X”,有关人士解释称:公民身份证号码由18位数字组成,其中前6位为行政区划代码,第7至14位为出生日期码,第15至17位为顺序码,第18位为校验码.校验码主要是为了校验计算机输入公民身份证号前17位数字是否正确.校验码字符值的取值范围是0至10.当校验码为0至9都使用原数,当校验码为10时,就用表示“10”的罗马数字符“X”代替.
榆树市13998688599: 身份证为什么有带字母的? - ?
栋怜天方: 首先我告诉你,18位身份证号码后面的字母只有"X"这一个. "X"作为尾号的校验码,是由号码编制单位按统一的公式计算出来的,如果您的尾号是0—9,都不会出现X. 但是您的尾号是10,那么就得用X来代替,因为要是用10作为尾号,您的身份证号码就是19位而不是18位了.19位的号码就违反了国家标准,而且我国的计算机应用系统也不承认19位的身份证号码. X是罗马数字的10,用X来代替10,可以保证您的身份证号码符合国家标准. 18位身份证号码含义: 1至6位代表行政归属, 7至14位代表出生年月日,15至18代表检测码和性别. 15~17位是派出所尾码,第18位是校验码 第17位单数是男人,偶数是女人
榆树市13998688599: 为什么身份证号中有时候会出现“X”呢? ?
栋怜天方: 身份证号第十八位是校验码 作为尾号的校验码,是由号码编制单位按统一的公式计算出来的,如果某人的尾号是0-9,都不会出现X,但如果尾号是10,那么就得用X来代替,因为如果用10做尾号,那么 此人的身份证就变成了19位.X是罗马数字的10,用X来代替10,可以保证公民的身份证符合国家标准
榆树市13998688599: 为什么我的身份证升成18位后不是再末位加一位校验码?为什么我的身 ?
栋怜天方: 你的身份证校验码应当是7,变更倒数第二位的原因可能是你身份证原来的最后3位与他人重号,重新进行了赋号,号码重新分配后,其相应的第3位也变为7.
榆树市13998688599: 谁能把身份证号的具体来历和原因告诉我?比如人们为什么要有身份证号 ?
栋怜天方: 身份证号有13位的吗?不知道,只找到15位和18位的.我们知道邮政编码是代表投送邮件的邮局的一种专用代号,也是这个局(所)投送范围内的居民与单位的通信代号...