python - 信用卡欺诈的 Python 算法
问题描述
提示:根据一些简单的算法,实现一个判断卡号是否有效的函数。假设信用卡号是一个由14个字符组成的字符串,格式为####-####-####,包括破折号,其中'#'代表0-9之间的数字,所以总共有 12 位数字。
目标:实现一个名为“verify”的函数,它接受一个名为“number”的参数,然后检查以下规则:
- 第一个数字必须是 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 个条件下遇到困难,但不知道该怎么做/如何处理它。
解决方案
对于第三条规则,您可以这样做。删除“-”字符并添加所有数字。
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)
此方法一次打印所有故障并给出布尔输出。
推荐阅读
- c - 将 char* argv[] 传递给函数时无法理解,十六进制到十进制
- c - 如何计算内核级程序中线程创建的时间?
- amazon-web-services - AWS Gateway API 部分路径重定向
- python - 使用正则化技术后如何解释预训练的 CNN 模型?
- css - 滚动条跳回顶部
- python - 如何将timestamptz转换为时间戳
- google-sheets - Google 表格:在查询结果更改时更新现有数据的行
- sql - 一个查询中不同表的 SQL 计数
- c - linux - 子进程写入管道并且父进程读取无法正常工作
- xcode - 来自命令行的 Xcode 代码覆盖率