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

2025-10-14 11:46:49

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

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

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

1、BOOL LuhmCheck( LPCSTR lpszCard, BOOL bCheck = TRUE )  

{  

    int nLength = strlen( lpszCard );  

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

        return FALSE;  

  

    if( !bCheck )  

        return TRUE;  

  

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

    int sum = 0;  

    nLength -= 2;  

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

    {  

        int j = nLength - i;  

        int w = lpszCard[ j ] - '0';  

        if( i % 2 == 0 )  

        {  

            int n = w * 2;  

            if( n > 9 )  

            {  

                sum += ( n % 10 );  

                sum += ( n / 10 );  

            }  

            else  

                sum += n;  

        }  

        else  

        {  

            sum += w;  

        }  

    }  

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

        return TRUE;  

    else  

        return FALSE;  

}  

声明:本网站引用、摘录或转载内容仅供网站访问者交流或参考,不代表本站立场,如存在版权或非法内容,请联系站长删除,联系邮箱:site.kefu@qq.com。
猜你喜欢