从磁条中分析信用卡输入

Cha*_*ell 23 javascript asp.net parsing credit-card

有谁知道如何解析磁卡Swiper的信用卡串输入?

我尝试了一个JavaScript解析器,但从来没有让它工作.这就是输入的样子.

%BNNNNNNNNNNNNNNNN^DOE/JOHN
^1210201901000101000100061000000?;NNNNNNNNNNNNNNNN=12102019010106111001?
Run Code Online (Sandbox Code Playgroud)

N是信用卡号.

Ali*_*xel 25

请参阅磁条卡条目@ Wikipedia:


跟踪一,格式B:

  • 开始哨兵 - 一个角色(通常是'%')
  • 格式代码="B" - 一个字符(仅限alpha)
  • 主帐号(PAN) - 最多19个字符.通常(但不总是)与卡片正面印刷的信用卡号码相匹配.
  • 字段分隔符 - 一个字符(通常为"^")
  • 名称 - 2到26个字符
  • 字段分隔符 - 一个字符(通常为"^")
  • 到期日期 - YYMM格式的四个字符.
  • 服务代码 - 三个字符
  • 全权委托数据 - 可能包括Pin验证密钥指示符(PVKI,1个字符),PIN验证值(PVV,4个字符),卡验证值或卡验证码(CVV或CVK,3个字符)
  • 结束哨兵 - 一个角色(一般是'?')
  • 纵向冗余校验(LRC) - 一个字符(大多数读卡器设备在将卡刷到表示层时不返回此值,并仅用于验证读卡器内部的输入.)

我希望数据是假的,否则任何人都可以得到:

  • 名称
  • 截止日期
  • CVV

我不确定,但我认为可以使用LRC计算信用卡号(或可能性数).

  • 卡数据是假的. (4认同)

Mar*_*gan 7

我做得更好了:我制作了一个视频,展示了如何使用ASP.Net/c#完成此操作:

http://www.markhagan.me/Samples/CreditCardSwipeMagneticStripProcessing

以下是您可能关心的代码部分:

    protected void CardReader_OTC(object sender, EventArgs e)
    {
        bool CaretPresent = false;
        bool EqualPresent = false;

        CaretPresent = CardReader.Text.Contains("^");
        EqualPresent = CardReader.Text.Contains("=");

        if (CaretPresent)
        {
            string[] CardData = CardReader.Text.Split('^');
            //B1234123412341234^CardUser/John^030510100000019301000000877000000?

            PersonName.Text = FormatName(CardData[1]);
            CardNumber.Text = FormatCardNumber(CardData[0]);
            CardExpiration.Text = CardData[2].Substring(2, 2) + "/" + CardData[2].Substring(0, 2);
        }
        else if (EqualPresent)
        {
            string[] CardData = CardReader.Text.Split('=');
            //1234123412341234=0305101193010877?

            CardNumber.Text = FormatCardNumber(CardData[0]);
            CardExpiration.Text = CardData[1].Substring(2, 2) + "/" + CardData[1].Substring(0, 2);
        }
    }
Run Code Online (Sandbox Code Playgroud)

完整的代码在我上面链接的网站上.