搜档网
当前位置:搜档网 › 身份证校验码计算公式(含代码)

身份证校验码计算公式(含代码)

//生成 身份证校验码
/*
// 逻辑
1、为代码中的每一位数字规定序号;
2、给每一位代码分配一个权数;权数的计算公式为?2^(i-1)?mod?11
3、权数与对应的代码相乘;
4、将所有的乘积相加;
5、对和进行MOD(求余数)运算;Mod(S,11) 若为身份证余数为10则显示X,其他的则为0()
6、对结果进行再处理得到校验码

公式:Ax=(∑(Ai×Wi))(mod 11)…………………………(1)
i----表示号码字符从右至左包括校验码在内的位置序号;
Ai----表示第i位置上的数字号码;
Ax----数字校验码的值;
Wi----示第i位置上的加权因子;
公式:Wi=(2^(i-1))(mod 11)…………………………(2)
i>1

∑(Ai×WI)(mod 11)
0 1 2 3 4 5 6 7 8 9 10
校验码字符值:
1 0 X 9 8 7 6 5 4 3 2

*/
string ls_rc,ls_checkcode
long i,Ai[],Ax,Wi[]
long J
string ls_temp
string ls_checkA[]

ls_checkA[]={'1','0','X','9','8','7','6','5','4','3','2'}

as_code=trim(as_code)

i=1
For J=1 To len(as_code)
i++
ls_temp=mid(as_code,len(as_code) - J +1,1)
Ai[i]=long(ls_temp)
Wi[i]=mod(2 ^ (i -1),11)
//各个 权数与对应的代码相乘之和
Ax=Ax+Ai[i]*Wi[i]

Next

Ax=mod(Ax,11)
/*
校验码字符值的确定:?
Y
0?1?2?3?4?5?6?7?8?9?10?
校验码?
1?0?X?9?8?7?6?5?4?3?2
*/
choose case Ax
case 0
ls_checkcode='1'
case 1
ls_checkcode='0'
case 2
ls_checkcode='X'
case 3
ls_checkcode='9'
case 4
ls_checkcode='8'
case 5
ls_checkcode='7'
case 6
ls_checkcode='6'
case 7
ls_checkcode='5'
case 8
ls_checkcode='4'
case 9
ls_checkcode='3'
case 10
ls_checkcode='2'
End choose

ls_rc=as_code+ls_checkcode

Return ls_rc



相关主题