信用卡欺诈的 Python 算法

Posted

技术标签:

【中文标题】信用卡欺诈的 Python 算法【英文标题】:Python algorithm for Credit Card fraud 【发布时间】:2020-10-11 02:53:43 【问题描述】:

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

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

    第一个数字必须是 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) 

我认为我在第三种和第四种情况下遇到困难,但不知道该怎么做/如何处理它。

【问题讨论】:

您不想打印字符串,而是想return "rule#1" 等。仅供参考 您能否提供更多输入值和相应预期输出的示例? 您首先要处理的是number 是一个字符串,而不是一个数字,因此您需要将相关部分转换为整数才能对它们进行求和。索引到字符串的正确方法是number[0:1],而不是number[0,1] 要获得总和,您可以使用它; sum(map(int, '1234-5678-9012'.replace('-', ''))) 这能回答你的问题吗? Python Credit Card Validation 【参考方案1】:

您应该return 字符串而不是打印。对于第三条规则,您可以使用模 % 函数。这是一种方法(几乎可以肯定第四条规则可以改进......)

def verify(number):
    if len(number) != 14 or int(number[0]) != 4:
        return False
    if int(number[0]) != 4:
        return "rule#1"
    if int(number[5]) + 1 != int(number[3]):
        return "rule#2"
    if sum(int(num) for num in number.replace("-","")) % 4 != 0:
        return "rule#3"
    if int(str(number[0] + str(number[1]))) + int(str(number[6] + str(number[7]))) != 100:
        return "rule#4"
    return True

input = "4501-0550-0000"
output = verify(input)
print(output)

【讨论】:

【参考方案2】:

你可以试试这个:

import re
def verify(number):
    try:
        ## remove any spaces in begginng and end
        number = number.strip()
        ## remove any spaces between numbers
        number = re.sub("\s+","",number)
        if len(number) != 14:
            return False, "current number length is "+str(len(number)) + " but number is missing the expected length of 14."
        if int(number[0]) != 4:
            return False, "First digit must be 4. but received first digit is " + number[0]
        if int(number[5]) + 1 != int(number[3]):
             return False, "The fourth digit must be one greater than the fifth digit"
        if sum([int(digit) for digit in re.sub("-","",input)]) % 4 != 0:
            return False, "Sum of all digit is not divisible by 4"
        if int(input[0:2]) +  int(input[-2:]) != 100:
            return False, "Sum of first two digit and last two digit is not 100"
        return True, "All conditions are met"
    except Exception as e:
        print(e)
        return False, "code got interrupted."
    
input = "4000-0000-0010" 
output = verify(input) 
print(output) 

您可以通过output[0] 访问输出以获取真/假,output[1] 获取消息

【讨论】:

【参考方案3】:

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

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)

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

【讨论】:

以上是关于信用卡欺诈的 Python 算法的主要内容,如果未能解决你的问题,请参考以下文章

通俗易懂--信用卡欺诈预测案例讲解(算法+案例)

R语言:利用机器学习建立信用卡反欺诈模型

Python 大数据的进行信用卡欺诈检测(附源码与注释)

机器学习实战分享:用 Python 进行信用卡欺诈检测

基于孤立森林的信用卡欺诈 Python 实战案例,最佳参数选择可视化等

自动编码器检测检测信用卡欺诈