问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501
你好,欢迎来到懂视!登录注册
当前位置: 首页 - 正文

身份证的校验码怎么计算

发布网友 发布时间:2022-04-23 13:46

我来回答

3个回答

热心网友 时间:2022-04-11 17:48

http://zhangf.bokee.com/4013564.html

我国现行使用公民身份证号码有两种尊循两个国家标准,〖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 m<48 OR m>57 &&数字
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 m<48 OR m>57
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)

热心网友 时间:2022-04-11 19:06

我自己做了个EXCEL
表格
来进行
校验码
计算
里面有
算法
你要是需要可以给我你的邮箱,我发过去
你要是只想知道算法,我就简单告诉你
校验码作为第1位(这里按照18、17、16...1
进行号码排列),它生成不是随机的,而是通过前17位的计算得出
具体算法是
前17位分别乘以7,9,10,5,8,4,2,1,6,3,7,9,10,5,8,4,2,然后进行ξ和,也就是结果相加;得到的数据模除11(也就是除以11,取其余数),得出0到10共11个
数字
,然后分别对照1,0,X,9,8,7,6,5,4,3,2进行替换,这便是最终的校验码。
举个例子:34052419800101001X
当你不知道最后一位时,也就是
34052419800101001
前17位的
乘积
和(就是分别乘以7,9,10,5,8,4,2,1,6,3,7,9,10,5,8,4,2再求和)是189
,再除以11,
余数
为2
此时,对照1,0,X,9,8,7,6,5,4,3,2的第三位(从0到10
顺序
替换)
得到校验位为X。

热心网友 时间:2022-04-11 20:41

付费内容限时免费查看回答1.

首先,需要将你的身份证前17位数字分别按规定的系数相乘。第一~第十七对应分别对应的系数:7,9,10,5,8,4,2,1,6,3,7,9,10,5,8,4,2。

2.

然后将于对应系数相乘后所得的数全部相加,结果除以11,取余数。

3.

余数可能的结果有0,1,2,3,4,5,6,7,8,9,10。分别对应1,0,X,9,8,7,6,5,4,3,2;即如果余数是5,则对应校验码是7;如果余数是2,第十八位校验码就是X。

举个例子来验证一下,某人的身份证号码为【510132199010023028】,我们计算一下此身份证是否合法。(5*7)+(1*9)+(0*10)+(1*5)+(3*8)+(2*4)+(1*2)+(9*1)+(9*6)+(0*3)+(1*7)+(0*9)+(0*10)+(2*5)+(3*8)+(0*4)+(2*2)=191;191除以11取余结果是4,4对应的校验码是8,说明身份证合法。

身份证号码的最后一位校验码是怎么计算出来的?

1. 身份证号码的最后一位称为校验码,其计算方式涉及将身份证号码前17位中的每一位数字分别乘以不同的系数。2. 这些系数不是固定的,它们分别是7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2。3. 接下来,将每个乘积相加,得到一个总和。4. 然后,将这个总和除以11...

身份证的效验码是通过怎样的方法计算出的?

- 将身份证号码的每个数字位置分别乘以对应的加权因子。- 将每个乘积相加。- 对总和进行模11运算,得到的余数即为校验码。- 根据余数,查找校验码表,将对应的校验码添加到身份证号码的最后一位。例如,如果一个18位身份证号码为"123456199001019876",计算校验码的过程如下:- 将号码分为前17位和最后...

身份证号最后一位数字称之为校验码,校验码的计算方式是怎样的?

1. 校验码的计算方式 - 首先,将身份证号码的前17位分别乘以一组固定的系数(7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2)。- 其次,将得到的乘积相加。- 最后,将总和除以11,取余数作为校验码。- 需要注意的是,余数可能为0到10之间的任何一个数字,但校验码...

身份证验证码咋求???

校验码: 1 0 X 9 8 7 6 5 4 3 2 通俗解释:余数为0,则校验码为1;依次类推:余数为1,则校验码对应0;以下:2--X;3--9;4--8;5--7;6--6;7--5;8--4;9-3;10-2。如果校验码不符合这个规则,则肯定是假号码。关于18位身份证号码尾数是“X”的一种解释:因为按照上...

身份证校验码计算方法

身份证校验码的计算方法如下:1. 将身份证号码的前17位数字分别乘以特定的系数。系数为:7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2。例如,第一位的系数是7。2. 将每一位数字乘以对应的系数后相加,形成一个总和。例如,对于身份证号34052419800101001X,前17位...

身份证号码的校验公式怎么写

身份证校验码计算公式是将身份证号码的第1位数字与7相乘、将身份证号码的第2位数字与9相乘,将身份证号码的第3位数字与10相乘、将身份证号码的第4位数字与5相乘等。身份证号码中的校验码是身份证号码的最后一位,是根据GB 11643-1999中有关公民身份号码的规定,根据精密的计算公式计算出来的,公民...

身份证校验码计算公式是什么?

校验码是根据前面十七位数字码。具体的公式举例说明为:某男性公民身份号码本体码为34052419800101001,首先按照公式计算:∑(ai×Wi)(mod11),其中,i表示号码字符从右至左包括校验码在内的位置序号;这4个的前2个代表着我们身份证的派出所的代码,那么接着的是1个数字是根据性别来定的,奇数代表的是...

身份证的校验码是什么意思

身份证的校验码是什么意思身份证的校验码是指身份证的最后一位数字,身份证校验码是根据身份证的前十七位数字,跟据精密的计算公式算出,如果算出来是0-9之间,就按实际情况写,如果算出来是10.就用X来代表10这个数字。身份证 身份证是由国家和政府颁发的证件,是用来证明自己是公民身份的工具,每个...

身份证最后一位怎么算?

身份证最后一位是校验码,计算方式:根据前面十七位数字码,按照ISO 7064:1983.MOD 11-2校验码计算出来的检验码。具体过程如下:1、将前面的身份证号码17位数分别乘以不同的系数。从第一位到第十七位的系数分别为:7-9-10-5-8-4-2-1-6-3-7-9-10-5-8-4-2。2、将这17位数字...

身份证校验码计算公式

身份证校验码计算公式如下:1、将前面的身份证号码17位数分别乘以不同的系数。从第一位到第十七位的系数分别为:7、9、10、5、8、4、2、1、6、3、7、9、10、5、8、4、2。2、将这17位数字和系数相乘的结果相加。3、用加出来和除以11,看余数是多少。4、余数只可能有0、1、2、3、4、5、...

声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。
E-MAIL:11247931@qq.com
茶叶做成的美食 写我关爱他人的作文 白条额度负了有什么影响 "珍惜现在"用英文怎么说 做机压双眼皮五天了,昨天朋友过生日,喝酒了,今天早起眼睛有点红肿。会... 浙江省景区排名,浙江最好旅游景点排名 ...有什么好玩的地方:浙江最好玩的景点前十名,浙江省那里有旅游景点 别人打我,拉我的衣服,我怔了下他就摔倒了,有我的责任吗 被别人打了但是没有证据正当房卫下打人者脸上有一点点划痕怎么办?_百 ... 帮我用probably造一个句子,我或许会不高兴 把身份证,照片,手机号以及验证码提供给别人会有什么严重的后果 身份证和验证码泄露了,有什么办法弥补 身份证上的校验码是什么意思? 身份证号码和验证码不一致怎么办 身份证验证码是什么 身份证号码和验证码给了会不会有事?望各位兄弟姐妹们帮解释一下呗。 身份证为什么要校验码 身份证号。银行卡号和密码,以及验证码泄露出去了会什么呀? 身份证号最后一位数字称之为校验码,校验码的计算方式是怎样的?_百度知 ... 怎样画手抄报才能画的好看? 怎样才能把手抄报画好 如何画好手抄报? 要怎样画好手抄报 手抄报怎么画好看的 智能化会议系统可以实现什么功能 ? 手抄报怎样画好 智能会议系统功能亮点? 怎样画好手抄报? microsoft office word2007怎样设置行距 请问智能数字会议系统好用吗? 如果他人知道我的身份证信息和手机还有验证码能有什么危险? 豌豆多长时间成熟? 请问身份证验证码是? 身份证号码的意义:校验码 身份证验证码怎么计算? 身份证验证码是多少 我要寄很多衣服回家,什么快递比较便宜? 好多衣服什么的寄回家,用什么快递好 寄大件东西回家什么物流便宜? 什么物流可以寄空调等大件物品回家,收费标准多少? 寄东西用哪个物流比较便宜 毕业寄东西回家用什么快递好? 寄一箱衣服回家用什么物流好? 寄东西回家用什么快递好 寄东西回家哪个物流便宜 回老家发展,需要把东西寄回去,什么物流便宜? 请问寄东西回家那家快递或者物流最便宜 毕业寄东西回家用什么物流好 寄东西回家哪个物流公司便宜? 求问毕业行李寄什么快递回家最便宜
  • 焦点

最新推荐

猜你喜欢

热门推荐