如何确定信用卡的类型?
对于一个学校任务,我试图确定用户输入卡号时所用的信用卡类型。 主卡以51-55开头。 该号码前面的额外零将被认为是有效的。 我已经回顾了关于如何将它集成到python中的其他线程,尽管我可以复制和粘贴代码,但我仍然不能真正理解正在发生的事情或者他们如何绕过前面的零?
下面是一个Master卡代码的例子:
^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,}$
有谁能向我解释发生了什么事吗? 感谢您的时间。
你发布的是正则表达式,而不是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”或“猫”。 如果你没有指定正确的数字,例如{3,},这意味着没有限制。 所以“[0-9] {3,}”将匹配“12341234123412341234123412341234”。
所以表达的基本意图是检查很多事情,其中,数字以5,222,22,2,27或2720开头。正如评论中所述,它没有正确地检查它是否“开始”这些数字是因为在每个“|”(或)之后没有^,因此它只是说“它是以5开头还是包含222,22,2,27或2720”。
表达结果:
请参阅:http://regexr.com/3h78i或者参阅:
更正
这个表达式的误报少得多:
^(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或:
编辑:我的修正假设信用卡是16位数字。 如果这是一个问题,您可以通过更改{}的方式并从最后删除 d {9}来解决此问题。 或者只需将 d {9}更改为 d +即可。
替代
我个人选择确定信用卡类型的方法是pycard:https://github.com/orokusaki/pycard
这是我不愿意负责维护可能会发生变化并确保准确检测的规则列表的那些事情之一。 链接的图书馆是开放源代码的,创建该图书馆的人一直在积极合并人们提出的推荐请求,这些人建议在图书馆或者写作之前对图书馆进行改进。 如果它变得陈旧,你需要改变,你可以把它分开。
链接地址: http://www.djcxy.com/p/70735.html