身份证校验算法与ASP程序
2018-09-06 12:42
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=XelseIfcheck_number=12thencheck_number=1elseifcheck_number=11thencheck_number=0Endifsfzjy=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)
aa=mid(xian,17,1)18位身分证取第十七位,能被2整除为女性
endif
ifaamod2=0then
xb=女
else
xb=男
endif
iflenx=18then
ifmid(xian,18,1)<>cstr(sfzjy(xian))then如果第十八位校验码不等于计算出的校验码则身份证号码有误.
response.write提示:身份证校验位错误!
else
response.write结果:身份证号码校验为合法号码!
endif
else如果输入的是十五位号,则计算出十八位新号
response.write新身份证:&left(xian,6)&19&right(xian,9)&cstr(sfzjy(xian))
endif
关于户籍判断则而要数据库.这里就不提供了.