我阅读了类似的堆叠溢出问题,以了解金融跟踪卡数据。
我认为我所面临的问题可能略有不同,或者我在regex方面真的很薄弱。
现在,我们有了一个服务,它意外地返回跟踪数据,而不是客户名称。
我的目标是每次收到跟踪数据时显示"“空字符串,否则返回来宾名称。(这是一个临时解决方案,直到我们修复根本原因)。
这就是我的正则表达式,但它似乎没有检测到跟踪数据。
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"
(非真实数据)
现在,在wiki上查找我想要涵盖的大多数情况(如果不是全部)的跟踪数据信息:
可以帮我的忙。这就是我所拥有的:
/[(%[bB])(;)]\d{3,}.{9,}[(^.+^)(=)].+\?.{,2}
/
轨道1,格式B: 启动哨兵-一个字符(一般为'%') 格式code="B" -一个字符(仅阿尔法) 主帐号(PAN) -最多19个字符.通常,但不总是,匹配信用卡号码打印在卡的正面。 字段分隔符-一个字符(一般为'^') 名称-2到26个字符 字段分隔符-一个字符(一般为'^') Expiration date -格式为YYMM的四个字符。 服务代码-三个字符 自由裁量数据-可以包括Pin验证密钥指示器(PVKI,1字符)、PIN验证值(PVV,4个字符)、卡验证值或卡验证代码(CVV或CVC,3个字符)。 结束哨兵-一个字符(一般是'?') 纵向冗余校验()--它是从轨道上的其他数据中计算出来的一个字符和一个有效性字符。 曲目2:这种格式是由银行业开发的。此跟踪是用5位方案编写的(4个数据位+1个奇偶),允许16个可能的字符,即数字0-9,加上6个字符:;<=>?选择6个标点符号似乎有些奇怪,但实际上,这16个代码只是映射到ASCII范围0x30到0x3f,它定义了十个数字字符加上这六个符号。数据格式如下: 开始哨兵-一个字符(一般是';') 主帐号(PAN) -最多19个字符.通常,但不总是,匹配信用卡号码打印在卡的正面。 分离器-一个字符(一般为'=') Expiration date -格式为YYMM的四个字符。 服务代码-三位数。第一个数字指定交换规则,第二个数字指定授权处理,第三个数字指定服务范围。 自由裁量数据--如第一轨道中的 结束哨兵-一个字符(一般是'?') 纵向冗余校验()--它是从轨道上的其他数据中计算出来的一个字符和一个有效性字符。大多数读取器设备在刷卡到表示层时不返回此值,并且只使用它在内部验证读取器的输入。
发布于 2015-09-02 14:05:38
所以,我从html解码开始。例如用诺科吉里
▶ guestname="%4234242xx12^TEST/GUEST L ^324532635645744646462"
#⇒ "%4234242xx12^TEST/GUEST L ^324532635645744646462"
▶ parsed = Nokogiri::HTML.parse(guestname).text
#⇒ "%4234242xx12^TEST/GUEST L ^324532635645744646462"
好吧,现在我们至少有一个领先的百分比。现在让我们扪心自问:有多少用户有一个以百分比符号开头的来宾名称?我打赌一点也不。您可以通过对数据库运行查询来重新检查自己。由于这是一个暂时的解决办法,我肯定会关闭完美主义,转而:
▶ parsed =~ /\A%/ ? '' : parsed
希望能帮上忙。
https://stackoverflow.com/questions/32355160
复制相似问题