You need to enable JavaScript to run this app. Python中如何正确校验用户输入的卡号与PIN是否匹配字典键值对
优惠活动
大模型
产品
解决方案
定价
更多

Python中如何正确校验用户输入的卡号与PIN是否匹配字典键值对

银行卡与PIN绑定校验的正确实现

原代码的两处核心错误

  • 类型不匹配:生成卡片时存储的card_num、pin_num都是整数类型,但input获取的用户输入默认是字符串类型,哪怕数值完全相同,也无法通过字典键值匹配
  • 校验逻辑失效:原判断逻辑是分别检查“输入的卡号是否存在于所有键中”“输入的PIN是否存在于所有值中”,完全没有校验二者的绑定对应关系。比如系统里有两张卡,卡1PIN是1234、卡2PIN是5678,用户输入卡1的卡号+卡2的PIN,也会被判定为成功。

修正后的实现方案

  1. 统一数据类型:将用户输入的内容转换为与存储一致的整数类型,消除类型差异带来的匹配失败
  2. 调整校验逻辑:先判断输入的卡号是否存在于字典键中,若存在则取出该卡号对应的存储PIN,直接与用户输入的PIN做相等比对,从根本上保证校验的是“同一张卡的卡号和对应PIN”

可运行的修正代码

import random

card_numbers = {}

# 补全原代码缺失的随机数字生成逻辑
def random_digits_gen(length):
    return int(''.join(str(random.randint(0, 9)) for _ in range(length)))

def create_card():
    first_half = 400000
    second_half = random_digits_gen(10)
    card_num = int(str(first_half) + str(second_half))
    pin_num = random_digits_gen(4)
    store_nums(card_num, pin_num)
    print('Your card has been created\n'
          'Your card number:\n'
          f'{card_num}\n'
          'Your card PIN:\n'
          f'{pin_num}')


def store_nums(number, pin):
    card_numbers[number] = pin


def check_nums():
    # 将输入转换为与存储一致的整数类型
    input_card = int(input('Enter your card number:\n'))
    input_pin = int(input('Enter your pin:\n'))
    # 直接基于键查对应值做匹配,不需要分开校验键和值的全局存在性
    if input_card in card_numbers and card_numbers[input_card] == input_pin:
        print('Success!')
    else:
        print('nope')

create_card()
check_nums()

实现说明

  • Python中字典的in操作默认就是检查键的存在性,不需要额外书写card_numbers.keys()
  • 这类绑定关系的校验,绝对不能拆分检查键和值的全局存在性,必须通过键的取值做对应关系比对
  • 如果后续需要处理输入非数字的异常场景,可以增加try-except块捕获类型转换错误,避免程序直接崩溃

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.11.05 22:15:05