博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
信用卡号校验
阅读量:2074 次
发布时间:2019-04-29

本文共 854 字,大约阅读时间需要 2 分钟。

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

该校验的过程:

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

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

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

例如,卡号是:5432123456788881

逆向奇数位为 4 2 2 4 6 8 8 1 和 = 35

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

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

请编写一个程序,从标准输入获得卡号,然后判断是否校验通过。

通过显示:“成功”,否则显示“失败”。

比如,

输入:356827027232780

程序输出:成功

本题关键:读懂题意,从卡位最后一位数字开始,逆向,也就是,最后一位为第1位,倒数第二位为第2位

#include
#include
int main(){ int n,i,sum,m; char s[100],s1[100]; scanf("%s",&s1); n=strlen(s1); sum=0; m=n; s[m]='\0'; for(i=0;i
9){ sum+=((s[i]-48)*2-9); printf("%d偶:%d\n",i,(s[i]-48)*2-9); } else{ sum+=(s[i]-48)*2; printf("%d偶:%d\n",i,(s[i]-48)*2); } }  } printf("sum=%d\n",sum); if(sum%10==0) printf("成功\n"); else printf("失败\n"); return 0;}

转载地址:http://qmtmf.baihongyu.com/

你可能感兴趣的文章
【MyBatis学习06】输入映射和输出映射
查看>>
【MyBatis学习07】动态sql
查看>>
【MyBatis学习08】高级映射之一对一查询
查看>>
【MyBatis学习09】高级映射之一对多查询
查看>>
【MyBatis学习10】高级映射之多对多查询
查看>>
【MyBatis学习11】MyBatis中的延迟加载
查看>>
【MyBatis学习12】MyBatis中的一级缓存
查看>>
【MyBatis学习13】MyBatis中的二级缓存
查看>>
【MyBatis学习14】MyBatis和Spring整合
查看>>
【MyBatis学习15】MyBatis的逆向工程生成代码
查看>>
Java 中 final、finally 和 finalize 使用总结
查看>>
volatile关键字解析
查看>>
单例模式的八种写法比较
查看>>
比较常见的数据库SQL面试题以及答案
查看>>
MySQL与Oracle的区别
查看>>
关于Oracle数据库优化的几点总结
查看>>
69道Spring面试题和答案
查看>>
40个Java多线程问题总结
查看>>
Oracle数据库面试题
查看>>
java面试中的智力题
查看>>