首页 > 解决方案 > 信用卡欺诈的 Python 算法

问题描述

提示:根据一些简单的算法,实现一个判断卡号是否有效的函数。假设信用卡号是一个由14个字符组成的字符串,格式为####-####-####,包括破折号,其中'#'代表0-9之间的数字,所以总共有 12 位数字。

目标:实现一个名为“verify”的函数,它接受一个名为“number”的参数,然后检查以下规则:

  1. 第一个数字必须是 4。
  2. 第四位必须比第五位大一;请记住,这些由破折号分隔,因为格式是####-####-####。
  3. 所有数字之和必须能被 4 整除。
  4. 如果将前两位视为两位数,将第七位和第八位视为两位数,则它们的总和必须为 100。

如果条件不满足,则根据失败的规则返回“rule#X”。

我的进步:

def verify(number):
    if len(number) != 14:
        return False
    if number[0] != 4:
        print("rule#1")
    if number[5] + 1 != number[3]:
        print("rule#2")
    if sum(number) != int:
        print("rule#3")
    if number[0,1] + number[6,7] != 100
        print("rule#4")

    return True # 

input = "5000-0000-0000" 
output = verify(input) 
print(output) 

我认为我在第 3 和第 4 个条件下遇到困难,但不知道该怎么做/如何处理它。

标签: pythonconditional-statementscredit-card

解决方案


对于第三条规则,您可以这样做。删除“-”字符并添加所有数字。

strippedNum=number.replace('-','')  # remove '-'
digits_sum = sum([int(digit) for digit in strippedNum]) # make a list with all the digits and find their sum
if sum_of_all % 4 != 0:
    print(rule#3)

对于第四个,您可能会遇到错误,因为您试图连接两个字符串并将其等同于一个整数。这应该是这样的,

  if int(number[0:1]) + int(number[6:7]) != 100 # Use [lower_limit:upper_limit] when extracting from a list
    print("rule#4")

所以这就是你最终代码的样子(处理字符串和整数时要小心)

def verify(number):
    valid = True
    if len(number) != 14:
        valid = False
if number[0] != '4':    # number[0] is a string
    print("rule#1")
    valid = False


if number[5] < number[3]:
    print("rule#2")
    valid = False


strippedNum=number.replace('-','')  # remove '-'
digits_sum = sum([int(digit) for digit in strippedNum]) # make a list with all the digits and find their sum
print(digits_sum)
if digits_sum % 4 != 0:
    print("rule#3")
    valid = False


if int(number[0:1]) + int(number[6:7]) != 100:
    print("rule#4")
    valid = False


return valid 

input = "5000-0000-0000" 
output = verify(input) 
print(output)

此方法一次打印所有故障并给出布尔输出。


推荐阅读