首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

挑战蓝桥之“信用卡号验证”

信用卡

信用卡是一种非现金交易付款的方式,是简单的信贷服务。信用卡一般是长85.60毫米、宽53.98毫米、厚1毫米的塑料卡片,由银行或信用卡公司依照用户的信用度与财力发给持卡人,持卡人持信用卡消费时无须支付现金,待结账日时再行还款。除部分与金融卡结合的信用卡外,一般的信用卡与借记卡、提款卡不同,信用卡不会由用户的账户直接扣除资金....

小编在这绝不是向大家介绍信用卡而发这条公众消息的。蓝桥杯有一道这样的编程题:

信用卡号验证

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

该校验的过程:

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

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

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

奇数位和=35

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

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

请编写一个程序,从标准输入获得卡号,然后判断是否校验通过。通过显示:“成功”,否则显示“失败”。

比如,用户输入:

程序输出:成功

【程序测试参考用例】

小编现将编的代码展示如下,欢迎大家批评与纠正:

#include

#include

int main()

{

char a[20]; //无论哪个国家的信用卡号均不超过20位

int b,i,len,ji=0,ou=0;

scanf("%s",&a);

/*求数组长度*/

len=strlen(a);

if(len%2==0)

{

for(i=len-1;i>=0;i=i-2)

{

b=a[i]-'0';

b=b*2;

b=b-9;

ou=ou+b;

}

for(i=len-2;i>=0;i=i-2)

{

b=a[i]-'0';

ji=ji+b;

}

}

else

{

for(i=len-1;i>=0;i=i-2)

{

b=a[i]-'0';

ji=ji+b;

}

for(i=len-2;i>=0;i=i-2)

{

b=a[i]-'0';

b=b*2;

b=b-9;

ou=ou+b;

}

}

if((ji+ou)%10==0)

printf("PASS!");

else

printf("FAIL!");

//printf("%d",len);

return 0;

}

程序运行结果展示如下:

(1).信用卡号不合格:

(2).信用卡号合格:

欢迎大家留言及讨论!

  • 发表于:
  • 原文链接http://kuaibao.qq.com/s/20171217G0CVS700?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券