0

我正在尝试编写一个程序来检查 15-16 位输入并查看它们属于哪个银行。我不熟悉我正在编写的语言(c++),并且想要一些指针。我知道如果没有其余代码,您将无法复制和粘贴,但是发布所有代码会很长。我只需要对几件事有一点建议。

现在我让程序检查输入的长度以及字符串的前两个值是什么。我想知道是否有比我现在更简单的方法。

if(cLen==15 && c[0]== 3 && c[1]==4)

if(cLen==15 && c[0]== 3 && c[1]==7)

因为我只需要找到前两个数字为 34 或 37 的字符串

其次,我需要检查字符串的第一个值是否为 51 到 55

最后我需要检查字符串开头是否包含 6011。

string validatebankcc(string c, int cLen, bool& ccOK) {
    string bankcc;
    if(cLen==15 && c[0]== 3 && c[1]==4)
        bankcc = "AmericanExpress";
    if(cLen==15 && c[0]== 3 && c[1]==7)
        bankcc = "AmericanExpress";
    if(cLen==16 && "6011 in beginning")
        bankcc = "Discover";
    if(cLen==16 && c[0]==5 && c[1]==1)
        bankcc="MasterCard";
    if(cLen==16 && c[0]==5 && c[1]==5)
        bankcc="MasterCard";
    if(c[0]==4)
        bankcc="Visa";
    else
        bankcc = "Uknown Bank"
    return bankcc;
4

3 回答 3

2
bool got_length_and_prefix(string s, int desired_length, string desired_prefix) {
  if (s.length() != desired_length) return false;
  if (s.find(desired_prefix) != 0) return false;
  return true;
}

string validatebankcc(string c, int /* cLen useless here*/, bool& ccOK) {
  ccOK = true;

  if (got_length_and_prefix(c, 15, "34")) return "AmericanExpress";
  if (got_length_and_prefix(c, 15, "37")) return "AmericanExpress";
  if (got_length_and_prefix(c, 16, "6011")) return "Discover";
  if (got_length_and_prefix(c, 16, "51")) return "MasterCard";
  if (got_length_and_prefix(c, 16, "55")) return "MasterCard";
  if (c[0] == '4') return "Visa";

  ccOK = false;
  return "Unkown Bank";
}

虽然整体设计很糟糕。将银行名称作为字符串返回很麻烦(这也会导致无用的 ccOK 标志,可以用 BANK_UNKNOWN 或类似的东西代替。将字符串长度与知道它长度的字符串一起传递也闻起来很麻烦。

于 2013-01-14T02:59:55.060 回答
0
if (c.find("6011") != string::npos && c.find("6011") == 0) //"6011" in beginning
{
}
于 2013-01-14T02:54:46.637 回答
0

首先,您不需要传递字符串长度 - 有一个成员函数size()。其次,你应该路过const &。最后,您可以使用它find_first_of来简化:

因此,您的方法将如下所示:

string validate_bank_cc(const string& c, bool& ccOk) 
{
    if((c.size() == 15) && (c.find_first_of("34") == 0))
        return "AmericanExpress";
    //etc...
}
于 2013-01-14T02:55:52.407 回答