用于信用卡欺诈的Python算法
提示: 根据一些简单的算法,实现一个确定卡号是否有效的函数。假设信用卡号是一个由14个字符组成的字符串,格式为#####-##-##-###,包括破折号,其中“#”表示一个数字 介于0-9之间,因此总共有12位数字 目标:实现一个名为“验证”的函数,该函数只接受一个参数 调用“编号”,然后检查以下规则:用于信用卡欺诈的Python算法,python,conditional-statements,credit-card,Python,Conditional Statements,Credit Card,提示: 根据一些简单的算法,实现一个确定卡号是否有效的函数。假设信用卡号是一个由14个字符组成的字符串,格式为#####-##-##-###,包括破折号,其中“#”表示一个数字 介于0-9之间,因此总共有12位数字 目标:实现一个名为“验证”的函数,该函数只接受一个参数 调用“编号”,然后检查以下规则: 第一个数字必须是4 第四位数字必须比第五位数字大一位;请记住,这些 由于格式为#####-#-#-# 所有数字之和必须能被4整除 如果将前两位数字视为两位数字,将第七位和第八位数字视为 数字作为
def验证(编号):
如果len(数字)!=14:
返回错误
如果数字[0]!=4:
打印(“规则1”)
如果数字[5]+1!=编号[3]:
打印(“规则2”)
如果总和(数字)!=int:
打印(“规则3”)
如果数字[0,1]+数字[6,7]!=100
打印(“规则4”)
返回真值#
输入=“5000-0000-0000”
输出=验证(输入)
打印(输出)
我想我对第三个和第四个条件有困难,但不确定该怎么做/如何处理。对于第三个规则,您可以这样做。删除“-”字符并添加所有数字
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验证(编号):
有效=真
如果len(数字)!=14:
有效=错误
如果数字[0]!='4':#数字[0]是一个字符串
打印(“规则1”)
有效=错误
如果编号[5]<编号[3]:
打印(“规则2”)
有效=错误
strippedNum=编号。替换('-','')#删除'-'
digits_sum=sum([strippedNum中的数字为int(digit))#列出所有数字并找到它们的和
打印(数字和)
如果数字总和为%4!=0:
打印(“规则3”)
有效=错误
如果整数(数字[0:1])+整数(数字[6:7])!=100:
打印(“规则4”)
有效=错误
返回有效
输入=“5000-0000-0000”
输出=验证(输入)
打印(输出)
此方法一次打印所有故障并给出布尔输出。对于第三条规则,您可以这样做。删除“-”字符并添加所有数字
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验证(编号):
有效=真
如果len(数字)!=14:
有效=错误
如果数字[0]!='4':#数字[0]是一个字符串
打印(“规则1”)
有效=错误
如果编号[5]<编号[3]:
打印(“规则2”)
有效=错误
strippedNum=编号。替换('-','')#删除'-'
digits_sum=sum([strippedNum中的数字为int(digit))#列出所有数字并找到它们的和
打印(数字和)
如果数字总和为%4!=0:
打印(“规则3”)
有效=错误
如果整数(数字[0:1])+整数(数字[6:7])!=100:
打印(“规则4”)
有效=错误
返回有效
输入=“5000-0000-0000”
输出=验证(输入)
打印(输出)
此方法一次打印所有故障并给出布尔输出。您应该
返回字符串,而不是打印。对于第三条规则,可以使用modulo%
函数。这里有一种方法(第四条规则几乎肯定可以改进…)
您应该返回
字符串,而不是打印。对于第三条规则,可以使用modulo%
函数。这里有一种方法(第四条规则几乎肯定可以改进…)
您可以尝试以下方法:
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]
访问消息您可以尝试以下操作:
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]
访问消息而不是打印字符串,而是返回“rule#1”
等。FYIcan您能提供更多输入值和相应预期输出的示例吗?您必须处理的第一件事是number
是一个字符串,而不是一个数字,因此您需要将相关部分转换为整数才能对其进行求和。另外,索引到字符串中的正确方法是number[0:1]
,而不是number[0,1]
,以获得您可以使用的总和<代码>总和(映射(int,'1234-5678-9012'。替换('-',''))
这是否回答了您的问题?您不想打印字符串,而是希望返回“rule#1”
等。FYIcan您能提供更多输入值和相应预期输出的示例吗?您必须处理的第一件事是number
是一个字符串,而不是一个数字,因此您需要将相关部分转换为整数才能对其进行求和。另外,索引到字符串中的正确方法是number[0:1]
,而不是number[0,1]
,以获得您可以使用的总和<代码>总和(映射(int,'1234-5678-9012'。替换('-',''))这是否回答了您的问题?