Там кто-либо - известные регулярные выражения там для проверки кредитной карты, отслеживают 1 и отслеживают 2 данные?
Править:
Из Википедии:
Информация на ходу 1 на финансовых картах содержится в нескольких форматах: A, который резервируется для собственного использования эмитента карты, B, который описан ниже, C-M, которые резервируются для использования Подкомиссией ANSI X3B10 и N-Z, которые доступны для использования отдельными эмитентами карты:
Дорожка 1, формат B:
Дорожка 2: Этот формат был разработан банковским делом (ABA). Эта дорожка записана с 5-разрядной схемой (4 бита данных + 1 четность), который допускает шестнадцать возможных символов, которые являются номерами 0-9 плюс эти шесть символов:; <=>?. Выбор шести символов пунктуации может казаться нечетным, но на самом деле шестнадцать кодов просто отображаются на диапазон ASCII 0x30 через 0x3f, который определяет десять символов цифры плюс те шесть символов. Формат данных следующие:
Я собирался разместить ту же ссылку на regular-expressions.info для проверки части трека с номером cc.
А теперь самое сложное. Данные треков различаются по формату в зависимости от эмитента карты и даже устройства чтения карт.Например, символы-разделители не всегда одинаковы. То же самое и с конечными «стражами».
Википедия дает хороший обзор: http://en.wikipedia.org/wiki/M Magnetic_stripe_card
В track2 номер карты сопровождается знаком «=» (или иногда буквой «D»). Тогда у вас есть срок годности как MMDD. После этого у Track2 есть «дискреционные данные», которыми может быть что угодно.
Я бы не стал слишком беспокоиться после этого. Если это данные отслеживания, вы уже будете в этом уверены. Думаю, это зависит от того, что вы собираетесь делать с данными.
В любом случае, для Track2 вы могли бы сделать намного хуже, чем добавить [= D] [0-9] {4} вместо $ в конце регулярного выражения cc:
^(?:4[0-9]{12}(?:[0-9]{3})?|5[1-5][0-9]{14}|6(?:011|5[0-9][0-9])[0-9]{12}|3[47][0-9]{13}|3(?:0[0-5]|[68][0-9])[0-9]{11}|(?:2131|1800|35\d{3})\d{11})[=D][0-9]{4}
Для track1 вы могли бы сделать что-то подобное ... Track1 содержит больше переменных данных, поэтому может быть немного сложнее.
Удачи!
Дорожка 1, формат B переводится в
^%B[^\^\W]{0,19}\^[^\^]{2,26}\^\d{4}\w{3}[^?]+\?\w?$
с некоторыми предположениями относительно того, что составляет допустимый символ.
Конечно, нет никаких проверок, действительно ли данные значимы, и LRC (если есть) также не может быть подтвержден.
Можете ли вы сравнить это с некоторыми реальными данными и посмотреть, работает ли это?
Дорожка 2 переводится как
;[^=]{0,19}=\d{4}\w{3}[^?]+\?\w?
Следующие два регулярных выражения, похоже, подтверждают данные дорожки 1 и дорожки 2. Обратите внимание, что в этих регулярных выражениях делается предположение, что используемые символы - это символы, которые "обычно" используются в приведенной выше информации из Википедии.
Track 1: ^%B\d{0,19}\^[\w\s\/]{2,26}\^\d{7}\w*\?$
Предполагается, что % и ? являются символами-разделителями, а ^ используется в качестве символа-разделителя полей. Также предполагается, что номер счета, дата и код услуги являются цифрами.
Track 2: ;\d{0,19}=\d{7}\w*\?
Предполагается, что ; и ? являются отправными символами, а = - символом-разделителем полей. Также предполагается, что номер счета, дата и код услуги являются цифрами.
Я проверил эти выражения, используя данные трека, считанные со считывателя карт MagTek. Следующие два набора трек-данных соответствуют тому, что было считано со считывателя, и проверяются на соответствие двум регулярным выражениям, приведенным выше (числа, очевидно, были изменены):
%B1234567891234567^SMITH/JOHN ^15024041234567891234?
;1234567891234567=152024041234567891234?