Python程序检查信用卡号码是否有效

Python程序检查信用卡号码是否有效

随着信用卡的广泛使用,保障信用卡交易安全成为了一个重要的问题。本文将介绍使用Python编写代码来检查信用卡号码的有效性。

信用卡号码规则

首先,需要了解信用卡号码的规则。信用卡号码通常由16位数字组成,其中前6位为银行识别号码(Bank Identification Number,简称BIN),由银行颁发;第7位到第15位是个人账户号码;最后一位是校验码。

校验码的计算方法如下:

  1. 从信用卡号码倒数第二位开始,偶数位数字乘以2,若乘积大于等于10,则将两位数字相加,否则直接取乘积结果;
  2. 将所有奇数位数字与第1步得到的偶数位数字之和相加;
  3. 若第2步结果个位数为0,则校验码为0,否则校验码为10减去个位数。

例如,信用卡号码为5390 1234 6789 9865,那么校验码计算过程如下:

  1. 5 3 0 1 2 3 4 6 7 8 9 8 6 5
    偶数位数字乘以2之后为6 0 2 2 6 16 18,其中602218是小于10的数字,直接保留;而616是大于等于10的数字,需要将十位数和个位数相加,得到127
  2. 将所有奇数位数字和上述结果相加,结果为5+9+3+0+1+2+3+4+7+7+8+6+5=60
  3. 60的个位数是0,因此校验码为0。

Python实现

有了校验码的计算方法,我们就可以在Python中实现。下面是代码示例:

def luhn_checksum(card_number):
    """
    计算信用卡号码的校验码
    :param card_number: str, 信用卡号码,不包含空格
    :return: int, 校验码
    """
    digits = [int(x) for x in card_number]
    odd_digits_sum = sum(digits[-1::-2])
    even_digits = digits[-2::-2]
    even_digits_sum = sum([(x * 2 - 9) if x >= 5 else (x * 2) for x in even_digits])
    total_sum = odd_digits_sum + even_digits_sum
    return (10 - total_sum % 10) % 10

代码中定义了一个luhn_checksum函数,用于计算信用卡号码的校验码。该函数接收一个字符串形式的信用卡号码,不包含空格。函数返回一个整数,为计算出的校验码。

接下来,我们需要实现一个函数来判断信用卡号码是否有效。具体来说,就是判断信用卡号码的长度是否为16位,且计算出的校验码是否与最后一位数字相等。

代码示例如下:

def is_valid_card(card_number):
    """
    判断信用卡号码是否有效
    :param card_number: str, 信用卡号码,包含空格
    :return: bool, True表示有效,False表示无效
    """
    card_number_without_space = card_number.replace(" ", "")
    if len(card_number_without_space) != 16:
        return False
    computed_checksum = luhn_checksum(card_number_without_space)
    actual_checksum = int(card_number_without_space[-1])
    return computed_checksum ==actual_checksum

代码中定义了一个is_valid_card函数,用于判断信用卡号码是否有效。该函数接收一个字符串形式的信用卡号码,包含空格。函数返回一个布尔值,True表示信用卡号码有效,False表示无效。

将上述两个函数组合在一起,可以方便地检查一个信用卡号码的有效性。代码示例如下:

def check_card_validity(card_number):
    """
    检查信用卡号码的有效性
    :param card_number: str, 信用卡号码,包含空格
    :return: bool, True表示有效,False表示无效
    """
    return is_valid_card(card_number) and luhn_checksum(card_number.replace(" ", "")) == int(card_number[-1])

函数check_card_validity接收一个字符串形式的信用卡号码,包含空格。该函数先调用is_valid_card函数判断信用卡号码长度是否为16位,再调用luhn_checksum函数计算校验码,检查计算出的校验码是否与最后一位数字相等,最终返回一个布尔值表示信用卡号码的有效性。

示例

下面是几个示例,演示如何使用Python代码检查信用卡号码的有效性:

# 正确的信用卡号码
card_number = "5390 1234 6789 9860"
print(check_card_validity(card_number))  # True

# 错误的信用卡号码,长度不足16位
card_number = "5390 1234 678"
print(check_card_validity(card_number))  # False

# 错误的信用卡号码,校验码不正确
card_number = "5390 1234 6789 9861"
print(check_card_validity(card_number))  # False

结论

本文介绍了使用Python编写代码检查信用卡号码有效性的方法。通过校验码的计算方法,可以方便地判断一个信用卡号码是否有效。我们可以通过上述示例代码的方式,轻松对信用卡号码进行有效性检查,保障信用卡交易的安全。

Camera课程

Python教程

Java教程

Web教程

数据库教程

图形图像教程

办公软件教程

Linux教程

计算机教程

大数据教程

开发工具教程