⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 lluhn.cpp

📁 LUHN算法
💻 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 + -