#include <regex>
#include <iostream>
char const* trackData = "%B341111597242000^ISO/AMEX TEST ^1412101000000000000000000000000?";
enum class CardIssuer { Unknown, AmericanExpress };
CardIssuer m_issuer;
void IdentifyIssuer()
{
try {
// Assume unknown by default to handle failures.
m_issuer = CardIssuer::Unknown;
std::regex magStripe{R"(^%B(\d+)\^)"};
std::cout << "blah" << std::endl;
std::cmatch matches;
if (std::regex_search(trackData, matches, magStripe))
{
std::string const& pan = matches[1];
std::cout << pan << std::endl;
}
}
catch( std::regex_error const& e )
{
using namespace std::regex_constants;
switch(e.code())
{
case error_escape:
std::cout << "error_escape" << std::endl;
break;
default:
std::cout << "unknown code" << std::endl;
break;
}
std::cout << e.code() << std::endl;
}
}
int main()
{
IdentifyIssuer();
}
I2luY2x1ZGUgPHJlZ2V4PgojaW5jbHVkZSA8aW9zdHJlYW0+CgpjaGFyIGNvbnN0KiB0cmFja0RhdGEgPSAiJUIzNDExMTE1OTcyNDIwMDBeSVNPL0FNRVggVEVTVCAgICAgICAgICAgICBeMTQxMjEwMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMD8iOwplbnVtIGNsYXNzIENhcmRJc3N1ZXIgeyBVbmtub3duLCBBbWVyaWNhbkV4cHJlc3MgfTsKCkNhcmRJc3N1ZXIgbV9pc3N1ZXI7Cgp2b2lkIElkZW50aWZ5SXNzdWVyKCkKewoJdHJ5IHsKCSAgIC8vIEFzc3VtZSB1bmtub3duIGJ5IGRlZmF1bHQgdG8gaGFuZGxlIGZhaWx1cmVzLgoJICAgbV9pc3N1ZXIgPSBDYXJkSXNzdWVyOjpVbmtub3duOwoJCgkgICBzdGQ6OnJlZ2V4IG1hZ1N0cmlwZXtSIiheJUIoXGQrKVxeKSJ9OwoJICAgc3RkOjpjb3V0IDw8ICJibGFoIiA8PCBzdGQ6OmVuZGw7CgkgICBzdGQ6OmNtYXRjaCBtYXRjaGVzOwoJCgkgICBpZiAoc3RkOjpyZWdleF9zZWFyY2godHJhY2tEYXRhLCBtYXRjaGVzLCBtYWdTdHJpcGUpKQoJICAgewoJICAgICAgc3RkOjpzdHJpbmcgY29uc3QmIHBhbiA9IG1hdGNoZXNbMV07CgkgICAgICAKCSAgICAgIHN0ZDo6Y291dCA8PCBwYW4gPDwgc3RkOjplbmRsOwoJCgkgICB9Cgl9CgljYXRjaCggc3RkOjpyZWdleF9lcnJvciBjb25zdCYgZSApCgl7CgkJdXNpbmcgbmFtZXNwYWNlIHN0ZDo6cmVnZXhfY29uc3RhbnRzOwoJCQoJCXN3aXRjaChlLmNvZGUoKSkKCQl7CgkJY2FzZSBlcnJvcl9lc2NhcGU6CgkJCXN0ZDo6Y291dCA8PCAiZXJyb3JfZXNjYXBlIiA8PCBzdGQ6OmVuZGw7CgkJCWJyZWFrOwoJCQkKCQlkZWZhdWx0OgoJCQlzdGQ6OmNvdXQgPDwgInVua25vd24gY29kZSIgPDwgc3RkOjplbmRsOwoJCQlicmVhazsKCQl9CgkJCgkJc3RkOjpjb3V0IDw8IGUuY29kZSgpIDw8IHN0ZDo6ZW5kbDsKCX0KfQoKaW50IG1haW4oKQp7CiAgICBJZGVudGlmeUlzc3VlcigpOwp9