銀行卡LUHM校驗演算法(C++)
阿新 • • 發佈:2019-02-18
演算法比較簡單。
1、除去校驗位後,從右至左,將卡號按位編碼,從0開始。
2、將偶數位×2,得到的結果按位相加,比如偶數為6,×2=12,則將1和2相加=3;奇數位則直接參與相加;
3、重複步驟2得到總和,該總和加上校驗位應能被10整除,否則校驗位不正確。
圖解:
設卡號:
1 3 8 6 2 6 7 1 8 check
×2 = 2 16 4 14 16
--------------------------------------------------------------
2 +3+1+6+6+4+6+1+4+1+1+6 = x
(( x + check )%10 == 0 )
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; }