You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python实现银行卡号校验时如何将两位数拆分为单个数字求和

Luhn算法(银行卡校验逻辑)实现方案

现有代码问题修正

  • 你当前使用card_number.split()处理输入是错误的:split()默认按空白符切割字符串,如果你输入的是连续的11位数字,最终得到的是仅包含整个卡号字符串的单元素列表,无法遍历单个数字。可改为用列表推导式直接生成单个数字组成的列表:
card_numbers = [int(i) for i in card_number.strip()]

两位数拆分求和实现方式

方法1:数学运算实现(性能最优)

对于任意大于等于10的整数n,十位数字为n // 10(整数除法取整),个位数字为n % 10(取余),直接相加即可得到各位和:

# 示例:n=14时
sum_digit = (n // 10) + (n % 10)
# 计算结果为1+4=5

方法2:字符串转换实现(通用性强)

把数字转为字符串后遍历每一位,分别转整数再求和,该方法对任意位数的数字都适用,不需要提前判断位数:

# 示例:n=14时
sum_digit = sum(int(i) for i in str(n))
# 计算结果为1+4=5

调整后的完整可运行代码

card_number = input('Please enter your 11 digit card number: ')
# 修正:将输入字符串转为单个数字组成的列表
card_numbers = [int(i) for i in card_number.strip()]

total = 0 

# 从右往左数第二位开始,隔一位遍历
for num in card_numbers[-2::-2]:
    doubled = num * 2
    if doubled >= 10:
        # 调用拆分求和逻辑,这里用数学方法为例
        total += (doubled // 10) + (doubled % 10)
    else:
        total += doubled
    
# 加上不需要翻倍的位的和,得到最终校验和
total += sum(card_numbers[-1::-2])

print("最终校验和为:", total)

内容的提问来源于stack exchange,提问作者maxwell7

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.29 00:36:05