银行卡号是怎么生成和校验的(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;
}