如何确定信用卡的类型?

时间:2016-10-14 03:15:12

标签: python credit-card

对于学校作业,我试图确定用户在输入卡号时所拥有的信用卡类型。主卡以51-55开头。该数字前面的额外零将被视为有效。我已经回顾了有关如何将其集成到python中的其他主题,虽然我可以复制并粘贴代码,但我还是不了解它们是什么,或者它们如何绕过前面的零点?

以下是执行此操作的主卡代码的示例:

^5[1-5][0-9]{5,}|222[1-9][0-9]{3,}|22[3-9][0-9]{4,}|2[3-6][0-9]{5,}|27[01][0-9]{4,}|2720[0-9]{3,}$ 

有人可以向我解释发生了什么事吗?感谢您的时间。

1 个答案:

答案 0 :(得分:0)

你发布的是正则表达式,而不是python。

说明:

正则表达式是指定搜索模式的字符序列。各种搜索算法可以使用该字符串来执行查找,查找和替换,或匹配字符串上的操作。

主要语言都有办法评估正则表达式。 对于python,请参阅:https://docs.pytho.org/3/howto/regex.html

了解正则表达式

一些基本的正则表达式规则可以帮助某人理解给定的模式:

[] 标记一个字符列表,其中一个字符必须出现在该位置才能进行匹配。例如:' asdf [a-fz]'会匹配' asdfe'或者' asdfz'但不是' asdfg'

管道" |" 标记为其他人说"分支"。它基本上意味着"或"。例如:'我(很高兴)'会匹配'我很开心'并且'我很开心'但不是'我不开心'或者"我很开心"。

最后 {} 是量词。这意味着,"前一个角色"必须在X和Y之间出现。所以" [0-9] {2,4}"会匹配" 12"和" 1234"但不是" 1"," 12345",或者"猫"。如果你没有指定正确的号码,ex {3,}就意味着没有限制。所以" [0-9] {3,}"将匹配" 12341234123412341234123412341234"。

所以表达式基本上是为了检查很多东西,其中,数字从5,222,22,2,27或2720开始。如评论中所述,它没有正确检查它"开始"有了这些数字,因为在每个" |"(或)之后都没有,所以它只是说"它是以5开头,还是包含222,22,2,27,或2720。"。

表达结果:

请参阅:http://regexr.com/3h78i 或者看: Results of given expression

校正

此表达式的误报率更低:

^(5[1-5][0-9]{5,5}|222[1-9][0-9]{3,3}|22[3-9][0-9]{4,4}|2[3-6][0-9]{5,5}|27[01][0-9]{4,4}|2720[0-9]{3,3})\d{9}$

请参阅:http://regexr.com/3h78l或: Better regex query

修改:我的更正假定信用卡为16位数。如果这是一个问题,您可以通过更改{}返回并从结尾删除\ d {9}来解决此问题。或者只需将\ d {9}更改为\ d +。

替代

我个人选择的确定信用卡类型的方法是pycard:https://github.com/orokusaki/pycard

这是我不应该个人负责维护可能会发生变化并确保准确检测的规则列表的事情之一。链接的库是开源的,制作它的人一直积极地合并人们提出的拉动请求,建议改进库直到时间或写作。如果它变得陈旧,你需要改变,你可以把它分开。