C程序实现银行卡号校验

本文介绍了一种用于验证信用卡号码合法性的Luhn算法,通过计算奇数位和偶数位的和并进行特定处理,确保最终结果能被10整除。给出C语言代码示例,演示如何编写一个简单的程序来检查用户输入的16位信用卡号是否有效。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

        当你输入信用卡号码的时候,有没有担心输错了而造成损失呢?其实可以不必这么担心,因为并不是一个随便的信用卡号码都是合法的,它必须通过Luhn算法来验证通过。

该校验的过程:

        

1、从卡号最后一位数字开始,逆向将奇数位(1、3、5等等)相加。

2、从卡号最后一位数字开始,逆向将偶数位数字,先乘以2(如果乘积为两位数,则将其减去9),再求和。

3、将奇数位总和加上偶数位总和,结果应该可以被10整除。

例如,卡号是:5432123456788881

则奇数、偶数位分布:5432123456788881

奇数位和=35

偶数位乘以2(有些要减去9)的结果:1 6 2 6 1 5 7 7,求和=35。

最后35+35=70 可以被10整除,认定校验通过。


编写程序,从键盘输入卡号,然后判断是否校验通过。通过显示:“成功”,否则显示“失败”。

比如,用户输入:4532314379373099

程序输出:成功

#include <stdio.h>

/*
    函数功能: 校验信用卡卡号
    函数参数: 传入卡号
    函数返回值:成功返回1,失败返回0
*/
int check(char *p)
{
    int OddTotal = 0;  // 奇数总和
    int EvenTotal = 0; // 偶数总和
    int i;

    for (i = 15; i >= 0; i -= 2) // 奇数位求和
    {
        OddTotal += *(p + i) - '0';
    }

    for (i = 14; i >= 0; i -= 2) // 偶数位求和
    {
        if ((*(p + i) - '0') * 2 > 9)
        {
            EvenTotal += (*(p + i) - '0') * 2 - 9;
        }
        else
        {
            EvenTotal += (*(p + i) - '0') * 2;
        }
    }

    if ((OddTotal + EvenTotal) % 10 == 0) // 如果奇数总和加上偶数总和能够整除10,则成功
    {
        return 1;
    }
    else
    {
        return 0;
    }
}

int main()
{
    char CardNumner[18];
    int i;

    printf("请输入16位信用卡卡号:");
    fgets(CardNumner, 17, stdin); // fgets会接收回车

    if (check(CardNumner))
    {
        printf("成功!\n");
    }
    else
    {
        printf("失败!\n");
    }

    return 0;
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值