| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 307 人关注过本帖
标题:帮看下程序
取消只看楼主 加入收藏
tompobing
Rank: 8Rank: 8
等 级:蝙蝠侠
帖 子:260
专家分:809
注 册:2012-12-9
结帖率:78.13%
收藏
 问题点数:0 回复次数:1 
帮看下程序
当你输入信用卡号码的时候,有没有担心输错了而造成损失呢?其实可以不必这么担心,因为并不是一个随便的信用卡号码都是合法的,它必须通过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整除,认定校验通过。

请编写一个程序,从键盘输入卡号,然后判断是否校验通过。通过显示:“成功”,否则显示“失败”。
比如,用户输入:356827027232780
程序输出:成功









#include "stdio.h"
#include"string.h"
#include"stdlib.h"
#define N 30
 main()
{
    char a[N];
    char *p;
    int k,i;
    int sumj=0,sumo=0;
    printf("please enter any numbers\n");
    gets(a);
    k=strlen(a);
   // printf("%d  ",k);
   atoi(a);
    for(p=a;*p!='\0';p++)
    ;
   p--;
   k=k-1;
    for(i=1;k>=0;p--,k--,i++)
    {
        if(i%2!=0)
          {
              sumj+=(*p);
          }
        if(i%2==0)
          {
              if((*p)*2>9)
                {
                    sumo+=((*p)*2-9);
                }
              else
                {
                    sumo+=(*p)*2;
                }
          }
    }
    printf("%d   %d",sumj,sumo);
       if((sumj+sumo)%10==0)
          printf("ok!!");
          else
          printf("error!!");
}
2012-12-09 17:54
tompobing
Rank: 8Rank: 8
等 级:蝙蝠侠
帖 子:260
专家分:809
注 册:2012-12-9
收藏
得分:0 
明白了!!!多谢各位啊!!
2012-12-09 19:25
快速回复:帮看下程序
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.016639 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved