📄 lluhn.cpp
字号:
//////////////////////////////////////////////////////////////////////
//
// Designed by Liutao, Xi'an Jitotong University
// 2001-04-23
//
//////////////////////////////////////////////////////////////////////
//
// LLUHN.cpp: implementation of the LLUHN class.
//
//////////////////////////////////////////////////////////////////////
#include "LLUHN.h"
#ifdef _DEBUG
#undef THIS_FILE
static char THIS_FILE[]=__FILE__;
#define new DEBUG_NEW
#endif
//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////
LLUHN::LLUHN()
{
m_strCardNum = _T("");
}
LLUHN::LLUHN(CString strCardNum)
{
for (int i=0; i<strCardNum.GetLength(); i++)
if (!isdigit(strCardNum[i]))
{
LLUHN();
return;
}
m_strCardNum = strCardNum;
}
LLUHN::~LLUHN()
{
m_strCardNum = _T("");
}
#define CurrentDigit(i) (m_strCardNum[i]-'0')
BOOL LLUHN::IsValid()
{
int sum = 0;
if (m_strCardNum.IsEmpty()) return false;
for (int i=m_strCardNum.GetLength()-2; i>=0; )
{
sum += CurrentDigit(i)*2>10 ? 1+(CurrentDigit(i)*2)%10 : CurrentDigit(i)*2, i--;
if (i>=0) sum += CurrentDigit(i), i--;
}
return (10-sum%10)==(m_strCardNum[m_strCardNum.GetLength()-1]-'0');
}
char LLUHN::GetCheckSum()
{
int sum = 0;
if (m_strCardNum.IsEmpty()) return false;
for (int i=m_strCardNum.GetLength()-1; i>=0; )
{
sum += CurrentDigit(i)*2>10 ? 1+(CurrentDigit(i)*2)%10 : CurrentDigit(i)*2, i--;
if (i>=0) sum += CurrentDigit(i), i--;
}
return (10-sum%10+'0');
}
#undef CurrentDigit
BOOL LLUHN::SetCardNum(CString strCardNum)
{
for (int i=0; i<strCardNum.GetLength(); i++)
if (!isdigit(strCardNum[i])) return false;
m_strCardNum = strCardNum;
return true;
}
const CString LLUHN::GetCardNum()
{
return m_strCardNum;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -