mirror of
https://bitbucket.org/theswgsource/src-1.2.git
synced 2026-07-30 00:15:47 -04:00
Added ChatServer and soePlatform
This commit is contained in:
@@ -0,0 +1,165 @@
|
||||
#include "ccspanutil.h"
|
||||
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
|
||||
#ifdef EXTERNAL_DISTRO
|
||||
namespace NAMESPACE
|
||||
{
|
||||
|
||||
#endif
|
||||
namespace Base
|
||||
{
|
||||
|
||||
char * CSpanUtil::getDescriptionFromCardNum(const char *cardNum)
|
||||
{
|
||||
// if the card number is less than this we wont be able to determine it, and we dont want to crash so . . .
|
||||
if(strlen(cardNum) < 8 )
|
||||
return "Credit Card";
|
||||
|
||||
switch(cardNum[0])
|
||||
{
|
||||
case '3':
|
||||
if(cardNum[1] == '4')
|
||||
return "AMEX";
|
||||
|
||||
if(cardNum[1] == '7')
|
||||
{
|
||||
// RG 5/9 changed to fix rrc=233. We do not support OP anyway.
|
||||
// Card prefix check is unclear.
|
||||
//
|
||||
// if(cardNum[3] == '7')
|
||||
// return "OP";
|
||||
// else
|
||||
return "AMEX";
|
||||
}
|
||||
if((cardNum[1] == '0') || (cardNum[1] == '6'))
|
||||
return "DINERS";
|
||||
if(cardNum[1] == '8')
|
||||
{
|
||||
if((cardNum[2] >= '1') && (cardNum[2] <= '8'))
|
||||
return "DINERS";
|
||||
}
|
||||
if(cardNum[1] == '5')
|
||||
{
|
||||
char temp[3];
|
||||
memcpy(temp, &cardNum[2], 2);
|
||||
temp[2] = 0;
|
||||
|
||||
int value = atoi(temp);
|
||||
if((value >= 28) && (value <= 89))
|
||||
return "JCB";
|
||||
}
|
||||
break;
|
||||
case '4':
|
||||
// RG 5/6 changed to fix rrc=233. We do not support SW anyway.
|
||||
// Card prefix check is unclear.
|
||||
//
|
||||
// if(cardNum[1] == '9')
|
||||
// return "SW";
|
||||
// else
|
||||
return "VISA";
|
||||
break;
|
||||
case '5':
|
||||
if(cardNum[1] == '6')
|
||||
return "Switch/solo";
|
||||
if((cardNum[1] >= '1') && (cardNum[1] <= '5'))
|
||||
return "MC";
|
||||
if(memcmp(cardNum, "504990", 6) == 0)
|
||||
return "Bill me Later";
|
||||
break;
|
||||
case '6':
|
||||
{
|
||||
char temp[8];
|
||||
memcpy(temp, cardNum, 7);
|
||||
temp[7] = 0;
|
||||
int value7 = atoi(temp);
|
||||
temp[6] = 0;
|
||||
int value6 = atoi(temp);
|
||||
temp[5] = 0;
|
||||
int value5 = atoi(temp);
|
||||
|
||||
// september 29 2005 added new card IIN ranges for Discover per email from
|
||||
// paymentTech email effective Oct 1, 2005
|
||||
if((value5 == 60110) ||
|
||||
(value5 == 60112) ||
|
||||
(value5 == 60113) ||
|
||||
(value5 == 60114) ||
|
||||
(value5 == 60115) ||
|
||||
(value5 == 60116) ||
|
||||
(value6 == 601174) ||
|
||||
(value6 >= 601177 && value6 <= 601179) ||
|
||||
(value6 >=601186 && value6 <= 600189) ||
|
||||
(value5 == 60119) ||
|
||||
(value6 >= 650000 && value6 <=650999))
|
||||
return "DISCOVER";
|
||||
|
||||
if(value6 == 603571)
|
||||
return "Saved Value";
|
||||
|
||||
return "Switch/Solo";
|
||||
}
|
||||
break;
|
||||
case '7':
|
||||
return "Switch/Solo";
|
||||
break;
|
||||
case '9':
|
||||
//if((cardNum[1] == '4') && (cardNum[1] == '5'))
|
||||
return "Carte Blanche";
|
||||
break;
|
||||
}
|
||||
|
||||
return "Credit Card";
|
||||
}
|
||||
|
||||
|
||||
// generates a credit card span for an account number string up to a length of any size.
|
||||
std::string CSpanUtil::generateCCSpan(std::string cardNumber)
|
||||
{
|
||||
// according to the PCI standard on visa's web site, the max number of displayable digits for a cc are the first 6 and last 4
|
||||
// we will however require that at least the middle half of the card is not shown
|
||||
std::string ccSpan;
|
||||
const std::string asteriks = "*";
|
||||
|
||||
// if the length of the card is an odd number we will display the larger portion of the card on the front viewable amount.
|
||||
// for Amex this will look like 1234********123
|
||||
// on a 16 digit card, the most digits will be displayed being 1234********1234
|
||||
// a 12 digit card would look like 123******123
|
||||
|
||||
// as per qa request and devtrack bug 2440 masking is first 4 and las 4 visible
|
||||
|
||||
unsigned displayableBeginningDigits = 4;
|
||||
unsigned displayableEndingDigits = 4;
|
||||
|
||||
if(cardNumber.length() <= 8)
|
||||
return cardNumber;
|
||||
|
||||
ccSpan = cardNumber.substr(0, displayableBeginningDigits);
|
||||
|
||||
unsigned totalMasked = cardNumber.length() - displayableBeginningDigits - displayableEndingDigits;
|
||||
|
||||
// now add in characters to mask the middle numbers
|
||||
for(unsigned maskedDigits = 0; maskedDigits < totalMasked; maskedDigits++)
|
||||
ccSpan += asteriks;
|
||||
|
||||
ccSpan += cardNumber.substr((totalMasked+displayableBeginningDigits));
|
||||
|
||||
return ccSpan;
|
||||
}
|
||||
|
||||
std::string CSpanUtil::generateCCDescription(std::string cardNumber)
|
||||
{
|
||||
std::string ccDescription;
|
||||
|
||||
// get the card type
|
||||
|
||||
ccDescription = std::string(getDescriptionFromCardNum(cardNumber.c_str())) + std::string("(") + generateCCSpan(cardNumber) + std::string(")");
|
||||
|
||||
return ccDescription;
|
||||
}
|
||||
};
|
||||
#ifdef EXTERNAL_DISTRO
|
||||
};
|
||||
#endif
|
||||
|
||||
|
||||
Reference in New Issue
Block a user