【问题标题】:How to determine the type of credit card?如何确定信用卡的类型?
【发布时间】:2017-02-23 08:47:39
【问题描述】:

对于学校作业,我试图确定用户在输入卡号时所拥有的信用卡类型。主卡以 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 问题。
  • ...而且,错误,您在此处提供的内容没有绕过前面的零。不过,这样做很容易——在你的模式的开头放一个^0*(以适用于每个分支的方式),你就完成了。
  • (它也只锚定在开始和结束分支上,这几乎肯定是错误的;我绝不建议相信这段代码——无论你从哪里得到它——实际上是正确的)。
  • @CharlesDuffy 谢谢!!!对不起,我仍然是一个菜鸟,我很感激。
  • 对于学校作业,如果他们没有覆盖regex,那么你不应该使用regex。无论如何,这只是模式,而不是真正使用该模式的正确 Python 代码。

标签: python credit-card


【解决方案1】:

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

简介:

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

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

理解正则表达式

一些有助于理解给定模式的基本正则表达式规则:

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

管道“|”标记为其他人所说的“分支”。它的基本意思是“或”。例如:'I (am|was) happy' 将匹配 'I am happy' 和 'I was happy' 但不匹配 'I am not happy' 或 "I be happy"。

最后,{} 是一个量词。这意味着,“前一个字符必须在 X 和 Y 之间出现”。所以“[0-9]{2,4}”将匹配“12”和“1234”,但不匹配“1”、“12345”或“cats”。如果您没有指定正确的数字,例如 {3,},则表示没有限制。所以“[0-9]{3,}”将匹配“12341234123412341234123412341234”。

所以表达式基本上是为了检查很多东西,其中,数字以 5、222、22、2、27 或 2720 开头。正如 cmets 所述,它没有正确检查它“以这些数字开头”,因为每个“|”(或)之后没有 ^,所以它只是说“它是从 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

这是我宁愿不亲自负责维护可能会更改的规则列表并确保准确检测的事情之一。链接库是开源的,并且创建它的人一直在积极合并人们提出的拉取请求,这些请求建议对库进行改进,直到时间或写作。如果它变得陈旧并且您需要进行更改,您可以分叉它。

【讨论】:

    猜你喜欢
    • 2011-02-04
    • 2010-11-21
    • 2013-02-18
    • 1970-01-01
    • 2012-12-05
    • 2018-07-10
    • 2023-03-26
    • 2014-07-17
    相关资源
    最近更新 更多