您的位置首页百科知识

银行卡号是怎么生成和校验的(LUHM校验算法)

银行卡号是怎么生成和校验的(LUHM校验算法)

的有关信息介绍如下:

银行卡号是怎么生成和校验的(LUHM校验算法)

银行卡卡号长度一般是15-19位,常见的是18位、19位。最后一位是校验位,它是怎么校验的呢??如果你学会了该算法,可以在Excel中设置一个校验公式,当用户输入了错误的银行卡时,给予提示,如果你是软件开发者,学会改算法,可以校验用户输入的银行卡是否正确。

除去校验位后,从右至左,将卡号按位编码,从0开始。

2、将偶数位×2,得到的结果按位相加,比如偶数为6,×2=12,则将1和2相加=3;奇数位则直接参与相加;

3、重复步骤2得到总和,该总和加上校验位应能被10整除,否则校验位不正确。

图解:

设卡号:

1 3 8 6 2 6 7 1 8 check

×2= 216 41416

--------------------------------------------------------------

2 +3+1+6+6+4+6+1+4+1+1+6 = x

判断 (( x + check )%10 == 0 )表达式是否为真即可。

BOOLLuhmCheck(LPCSTRlpszCard,BOOLbCheck=TRUE)

{

intnLength=strlen(lpszCard);

if(nLength!=16&&nLength!=19)

returnFALSE;

if(!bCheck)

returnTRUE;

intnCheck=(lpszCard[nLength-1]-'0');

intsum=0;

nLength-=2;

for(inti=0;i<=nLength;++i)

{

intj=nLength-i;

intw=lpszCard[j]-'0';

if(i%2==0)

{

intn=w*2;

if(n>9)

{

sum+=(n%10);

sum+=(n/10);

}

else

sum+=n;

}

else

{

sum+=w;

}

}

if((sum+nCheck)%10==0)

returnTRUE;

else

returnFALSE;

}