Регулярное выражение для данных дорожки кредитной карты

Там кто-либо - известные регулярные выражения там для проверки кредитной карты, отслеживают 1 и отслеживают 2 данные?

Править:

Из Википедии:

Информация на ходу 1 на финансовых картах содержится в нескольких форматах: A, который резервируется для собственного использования эмитента карты, B, который описан ниже, C-M, которые резервируются для использования Подкомиссией ANSI X3B10 и N-Z, которые доступны для использования отдельными эмитентами карты:

Дорожка 1, формат B:

  • Запустите сигнальную метку — один символ (обычно '%')
  • Код формата = "B" — один символ (только альфа)
  • Первичный номер счета (PAN) — до 19 символов. Обычно, но не всегда, соответствует номеру кредитной карты, распечатанному на передней стороне карты.
  • Разделитель полей — один символ (обычно '^ ')
  • Имя — два к 26 символам
  • Разделитель полей — один символ (обычно '^ ')
  • Дата истечения срока — четыре символа в форме YYMM.
  • Служебный код — три символа
  • Дискреционные данные — могут включать Ключевой показатель Проверки Контакта (PVKI, 1 символ), Значение Проверки PIN (Партия свободы, 4 символа), Значение Проверки Карты или Код подтверждения Карты (CVV или CVK, 3 символа)
  • Сигнальная метка конца — один символ (обычно'?')
  • Продольная проверка по избыточности (LRC) — это - один символ и символ законности, вычисленный от других данных по дорожке. Нужно отметить, что большинство считывающих устройств не возвращает это значение, когда карта проведена к уровню представления, и используйте его только для проверки входа внутренне читателю.

Дорожка 2: Этот формат был разработан банковским делом (ABA). Эта дорожка записана с 5-разрядной схемой (4 бита данных + 1 четность), который допускает шестнадцать возможных символов, которые являются номерами 0-9 плюс эти шесть символов:; <=>?. Выбор шести символов пунктуации может казаться нечетным, но на самом деле шестнадцать кодов просто отображаются на диапазон ASCII 0x30 через 0x3f, который определяет десять символов цифры плюс те шесть символов. Формат данных следующие:

  • Запустите сигнальную метку — один символ (обычно'';)
  • Первичный номер счета (PAN) — до 19 символов. Обычно, но не всегда, соответствует номеру кредитной карты, распечатанному на передней стороне карты.
  • Разделитель — один символ (обычно '=')
  • Дата истечения срока — четыре символа в форме YYMM.
  • Служебный код — три символа
  • Дискреционные данные — как в дорожке один
  • Сигнальная метка конца — один символ (обычно'?')
  • Продольная проверка по избыточности (LRC) — это - один символ и символ законности, вычисленный от других данных по дорожке. Нужно отметить, что большинство считывающих устройств не возвращает это значение, когда карта проведена к уровню представления, и используйте его только для проверки входа внутренне читателю.

12
задан Bart Kiers 29 March 2010 в 20:31
поделиться

3 ответа

Я собирался разместить ту же ссылку на 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 содержит больше переменных данных, поэтому может быть немного сложнее.

Удачи!

2
ответ дан 2 December 2019 в 20:40
поделиться

Дорожка 1, формат B переводится в

^%B[^\^\W]{0,19}\^[^\^]{2,26}\^\d{4}\w{3}[^?]+\?\w?$

с некоторыми предположениями относительно того, что составляет допустимый символ.

Конечно, нет никаких проверок, действительно ли данные значимы, и LRC (если есть) также не может быть подтвержден.

Можете ли вы сравнить это с некоторыми реальными данными и посмотреть, работает ли это?

Дорожка 2 переводится как

;[^=]{0,19}=\d{4}\w{3}[^?]+\?\w?
1
ответ дан 2 December 2019 в 20:40
поделиться

Следующие два регулярных выражения, похоже, подтверждают данные дорожки 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?
2
ответ дан 2 December 2019 в 20:40
поделиться
Другие вопросы по тегам:

Похожие вопросы: