18位身份證校驗算法
身份證校驗碼算法
身份證校驗碼產生方法:
∑(ai×Wi)(mod11)
i:表示號碼字符從由至左包括校驗碼在內的位置序號;
ai表示第i位置上的號碼字符值;
Wi第i位置上的加權因子,其數值Wi=mod(power(2,(n-1)),11)
i181716151413121110987654321
Wi79105842163791058421
相應的校驗碼:
∑(ai×WI)(mod11)012345678910
校驗碼字符值ai10X98765432
下面是校驗函數:
FUNCTIONsfzjy(num)
iflen(num)=15then
cID=left(num,6)&"19"&right(num,9)
elseiflen(num)=17orlen(num)=18then
cID=left(num,17)
endif
nSum=mid(cID,1,1)*7
nSum=nsum+mid(cID,2,1)*9
nSum=nsum+mid(cID,3,1)*10
nSum=nsum+mid(cID,4,1)*5
nSum=nsum+mid(cID,5,1)*8
nSum=nsum+mid(cID,6,1)*4
nSum=nsum+mid(cID,7,1)*2
nSum=nsum+mid(cID,8,1)*1
nSum=nsum+mid(cID,9,1)*6
nSum=nsum+mid(cID,10,1)*3
nSum=nsum+mid(cID,11,1)*7
nSum=nsum+mid(cID,12,1)*9
nSum=nsum+mid(cID,13,1)*10
nSum=nsum+mid(cID,14,1)*5
nSum=nsum+mid(cID,15,1)*8
nSum=nsum+mid(cID,16,1)*4
nSum=nsum+mid(cID,17,1)*2
'*計算校驗位
check_number=12-nsummod11
Ifcheck_number=10thencheck_number="X"elseIfcheck_number=12thencheck_number="1"elseifcheck_number=11thencheck_number="0"Endifsfzjy=check_number
Endfunction
其它校驗:
性別與出生年月:
sfznum=身份證號碼
lenx=len(sfznum)
iflenx=15then
yy="19"&mid(xian,7,2)
mm=mid(xian,9,2)
dd=mid(xian,11,2)
aa=mid(xian,15,1)'15位身分證取第十五位,能被2整除為女性
endif
iflenx=18then
yy=mid(xian,7,4)
mm=mid(xian,11,2)
dd=mid(xian,13,2)