身份证校验码的计算器

作者&投稿:端秦 (若有异议请与网页底部的电邮联系)
身份证的校验码怎么计算~

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 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)

身份证校验码:身份证号码的最后一位

用第1位数乘以2的16次方(即65536)
加上
第2位数乘以2的15次方(即32768)
加上
第3位数乘以2的14次方(即16384)
加上
第4位数乘以2的13次方(即8192)
加上
第5位数乘以2的12次方(即4096)
加上
第6位数乘以2的11次方(即2048)
加上
第7位数乘以2的10次方(即1024)
加上
第8位数乘以2的9次方(即512)
加上
第9位数乘以2的8次方(即256)
加上
第10位数乘以2的7次方(即128)
加上
第11位数乘以2的6次方(即64)
加上
第12位数乘以2的5次方(即32)
加上
第13位数乘以2的4次方(即16)
加上
第14位数乘以2的3次方(即8)
加上
第15位数乘以2的2次方(即4)
加上
第16位数乘以2的1次方(即2)
加上
第17位数乘以2的0次方(即1)
将所得的数乘以9再加上1的和除以11,所得的余数便是18位身份证号的最后一位(余数为10时最后一位是X)。

在网上有身份证归属地查询之类的网站,其中有一部分提供校验码计算,你可以去搜索.


dos状态下一些命令
delete 删除远程ftp服务器上的文件。这也必须保证你有可写的权限。 bye 退出当前连接。 quit 同上。 八,telnet 功能强大的远程登陆命令,几乎所有的入侵者都喜欢用它,屡试不爽。为什么?它操作简单,如同使用自己的机器一样,只要你熟悉DOS命令,在成功以 administrator身份连接了远程机器后,就可以用它来干你想干的...

计算机是什么时候发明的
而帕斯卡所发明的加法器则第一次确立了计算机器的概念。在电脑史前史里,帕斯卡被公认为制造出机械...逻辑电路、二进制码、记忆元件……,计算机的结构一一构思成熟。更重要的是,他打算采用电子管作为开关...(P.Eckert),向戈德斯坦提交了一 份研制电子计算机的设计方案——“高速电子管计算装置的使用”,他们...

NIT和计算机等级证有什么区别?
具有机关、企事业单位秘书和办公信息计算机化的能力。Nit证书则是按照国际通行的证书样式设计,由教育部考试中心统一印制发行。证书正面用中英文书写,证书持有人的身份证号码、学生代码、证书号码、模块名称等,证书背面附有证书持有人能力的总结。本证书在中国通用,是持证人计算机应用能力的证明。

计算机之父是谁?
EDVAC方案明确规定新机器有五个构成部分:①计算器;②逻辑控制装置;③存贮器;④输入;⑤输出,并描述了这五部分的职能和相互关系。EDVAC方案有两个非常重大的改进:一是采用二进制,二是完成了存贮程序,可以自动地从一个程序指令进到下一个程序指令,其作业可以通过指令自动完成。“指令”包括数据和程序,把它们用码的形...

计算机八大常用硬件得发展史
他与阿达所设想的分析机最终也未能问世,但是他们却为后人留下了一份宝贵的遗产,那就是面对困难不屈不挠的精神,以及那数十种设计方案和程序。1873年:美国人鲍德温(F. Baldwin)利用自己过去发明的齿数可变齿轮制造了第一台手摇式计算机。1886年:美国人Dorr E. Felt (1862-1930), 制造了第一台用按键操作的计算器...

计算器插画-思维导图怎么画?求解答
契克卡德计算钟——被遗忘的第一台机械计算器 _欢迎来到神奇的01世界_ 一个问题:世界上谁发明了第一台机械式计算机? 长久以来,学界一致认为是布莱士·帕斯卡(BlaisePascal)——对,就是那个成为压强单位的法国大物理学家帕斯卡。不过他发明的机器我们下回分解,今天的主角另有其人。 1935年,后人在整理天文学家开普勒...

计算机的发展史是什么样的
1945年3月,他起草了一份〃离散变量自动电子计算器〃的设计报告,对ENIAC作了两项重大的改进。 一项改进是将10进制改为2进制,从而大大简化了计算器的结构和运算过程;另一项改进是将程序与数据一起存贮在计算器内,使得电子计算器的全部运算成为真正的自动过程。 这份设计报告是计算器结构思想一次最重要的改革,标志着...

用Java做的计算器中小数点部分的代码在怎么写?
其他回答 你是要取小数点以后的数字吧,比如说小数位12.323你就要323这个部分。你可以首先将这个小数,转成string类型,然后再用substring方法去截取小数部分啊。 追问 编写按钮型计算器时,小数点后面的怎么编写? bluefisher007 | 发布于2012-11-07 举报| 评论 1 0 ...

计算机操作系统都经历了什么版本?
Windows 1.0 自带了一些简单的应用程序,包括日历、记事本、计算器等等。总之,现在看那时的Windows 1.0,总会让人感到它像是一个PDA,甚至可能功能还赶不上现在的PDA,不过这在当时已经相当吸引人了。Windows 1.0的另外一个显著特点就是允许用户同时执行多个程序,并在各个程序之间进行切换,这对于DOS来说是不可想象的。

计算机史著名人物及贡献,要详细,拜托了。
“图灵机”不是一种具体的机器,而是一种思想模型,可制造一种十分简单但运算能力极强的计算装置,用来计算所有能想象得到的可计算函数.。图灵机”与“冯·诺伊曼机”齐名,被永远载入计算机的发展史中。3、克劳德·艾尔伍德·香农(Claude Elwood Shannon,1916-2001)克劳德·艾尔伍德·香农1916年4月30日...

巴楚县13470274317: 居民身份证号码的最后一位校验码的计算公式
照话山苏: 第十八位数字的计算方法为: 1.将前面的身份证号码17位数分别乘以不同的系数.从第一位到第十七位的系数分别为:7 9 10 5 8 4 2 1 6 3 7 9 10 5 8 4 2 2.将这17位数...

巴楚县13470274317: 身份证号码如何计算出来的? -
照话山苏: 根据〖中华人民共和国国家标准 GB 11643-1999〗中有关公民身份号码的规定,公民身份号码是特征组合码,由十七位数字本体码和一位数字校验码组成.排列顺序从左至右依次为:六位数字地址码,八位数字出生日期码,三位数字顺序码和...

巴楚县13470274317: 身份证末位计算示范下 -
照话山苏: 身份证的末位是前17位的校验码,有一个免费的小软件可以计算,你试着用一下,地址是http://jlbc.skycn.com/down/zcyreal2007zcy.zip

巴楚县13470274317: 身份证的效验码是通过怎样的方法计算出的? -
照话山苏: Visual FoxPro 版的. *功能:计算身份证的校验码 *返回:18位身份证号码 *入口参数:15位号码或17位号码或18位号码 * 1至6位为区域码 * 15位号码的7至12位、18位号码的7至14位为出生日期 * 15位号码的13位至15位、18位号码的15位至17...

巴楚县13470274317: 关于身份证18位身份证的18位怎么算,有计算它的软件吗?
照话山苏: 公民身份号码是特征组合码,由十七位数字本体码和一位校验码组成.排列顺序从左至右依次为:六位数字地址码,八位数字出生日期码,三位数字顺序码和一位数字校验...

巴楚县13470274317: 身份证号码有几位数字? -
照话山苏: 根据〖中华人民共和国国家标准 GB 11643-1999〗中有关公民身份号码的规定,身份证号码有18位数字. 具体内容:一、旧的身份证是15位. 1. 前1、2位数字表示:所在省份的代码. 2. 第3、4位数字表示:所在城市的代码. 3. 第5、6位数...

巴楚县13470274317: 18位身份证的最后一位数字是怎样算出来的 -
照话山苏: 18位身份证号码最后一位校验码的计算方法 公民身份号码是一系列组合码,由十七位数字本体码和一位校验码组成.排列顺序从左至右依次为:六位数字地址码,八位数字出生日期码,三位数字顺序码和一位数字校验码.前六位的内容可以通...

巴楚县13470274317: 身份证校验码是怎样计算的什么是其分别对应的最后一位身份证的号码为
照话山苏: 我自己做了个EXCEL表格来进行校验码计算里面有算法你要是需要可以给我你的邮箱,我发过去你要是只想知道算法,我就简单告诉你校验码作为第1位(这里按照18、17...

巴楚县13470274317: Y = mod(S,n) 怎么算?校验的计算方式:1.对前17位数字本体码加权求和 公式为:S = Sum(Ai * Wi),i = 0,...,17 其中Ai表示第i位置上的身份证号码数字值,Wi... -
照话山苏:[答案] S除以11取余数

巴楚县13470274317: 身份证后四位计算 -
照话山苏: 居民身份证号码,根据〖中华人民共和国国家标准 GB 11643-1999〗中有关公民身份号码的规定,公民身份号码是特征组合码,由十七位数字本体码和一位数字校验码组成.排列顺序从左至右依次为:六位数字地址码,八位数字出生日期码,...

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 星空见康网