Я прочитал похожие вопросы stackoverflow, чтобы понять данные финансовых карт.
Я думаю, что проблема, с которой я сталкиваюсь, может немного отличаться, или, может быть, я действительно слаб в регулярном выражении.
Теперь у нас есть сервис, который случайно возвращает данные трека вместо имени гостя.
Моя цель - каждый раз, когда я получаю данные трека, я показываю "" пустую строку, иначе возвращаю имя гостя. (Это временное решение, пока мы не исправим основную причину)
Это то, что представляют собой мои регулярные выражения, но похоже, что они не обнаруживают данные треков.
irb(main):043:0> guestname="%4234242xx12^TEST/GUEST L ^324532635645744646462"
irb(main):044:0> (/[(%[bB])(;)]\d{3,}.{9,}[(^.+^)(=)].+\?.{,2}/.match(guestname)) ? "" : guestname
=> "%4234242xx12^TEST/GUEST L ^324532635645744646462"
(Не настоящие данные)
Теперь, глядя на вики для информации о треках, я хочу охватить большинство, если не все, случаев:
https://en.wikipedia.org/wiki/Mintage_stripe_card#Financial_cards
Не могли бы помочь с моим регулярным выражением. Вот что у меня есть:
/[(%[bB])(;)]\d{3,}.{9,}[(^.+^)(=)].+\?.{,2}
/
Дорожка 1, формат B:
Старт дозорного - один символ (обычно "%")
Код формата = "B" - один символ (только альфа)
Номер основного счета (PAN) - до 19 символов. Обычно, но не всегда, совпадает с номером кредитной карты, напечатанным на лицевой стороне карты.
Разделитель полей - один символ (обычно "^").
Имя - от 2 до 26 символов.
Разделитель полей - один символ (обычно "^").
Срок годности - четыре символа в формате ГГММ.
Сервисный код - три символа
Дискреционные данные - могут включать индикатор ключа проверки PIN-кода (PVKI, 1 символ), значение проверки PIN (PVV, 4 символа), значение проверки карты или код проверки карты (CVV или CVC, 3 символа).
Конец дозорного - один символ (обычно "?")
Продольная проверка избыточности (LRC) - это один символ и символ достоверности, рассчитанный на основе других данных на дорожке.
Трек 2: этот формат был разработан банковским сектором (ABA). Эта дорожка записана по 5-битной схеме (4 бита данных + 1 четность), которая позволяет использовать шестнадцать возможных символов, которые являются числами 0-9, плюс шесть символов:; ‹=>? . Выбор шести знаков пунктуации может показаться странным, но на самом деле шестнадцать кодов просто отображаются в диапазоне ASCII от 0x30 до 0x3f, который определяет десять цифр плюс эти шесть символов. Формат данных следующий:
Старт дозорного - один символ (обычно ";")
Номер основного счета (PAN) - до 19 символов. Обычно, но не всегда, совпадает с номером кредитной карты, напечатанным на лицевой стороне карты.
Разделитель - один символ (обычно '=')
Срок годности - четыре символа в формате ГГММ.
Сервисный код - трехзначный. Первая цифра указывает правила обмена, вторая указывает обработку авторизации, а третья указывает спектр услуг.
Дискреционные данные - как в первом треке.
Конец дозорного - один символ (обычно "?")
Продольная проверка избыточности (LRC) - это один символ и символ достоверности, рассчитанный на основе других данных на дорожке. Большинство устройств чтения не возвращают это значение, когда карта перемещается на уровень представления, и используют его только для внутренней проверки ввода в устройство чтения.