[devdiv精华转载] ios开发 信用卡卡号验证

原帖地址:http://www.devdiv.com/forum.php?mod=viewthread&tid=104289&extra=page%3D1%26filter%3Ddigest%26digest%3D1%26digest%3D1

通过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整除,认定校验通过。

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

  1. //将一个字符串倒置
  2. void reverse(char * str)
  3. {
  4.         int i;
  5.         char ch;
  6.         for(i=0;i<(int)strlen(str)/2;i++){
  7.         ch=*(str+i);
  8.                 *(str+i)=*(str+strlen(str)-i-1);
  9.         *(str+strlen(str)-i-1)=ch; 
  10.         }
  11. }
  12. //校验卡号是否合法
  13. int examine(char* numbers)
  14. {
  15.         int i;
  16.         int sum_even=0;//偶数和
  17.         int sum_odd=0;//奇数和
  18.     reverse(numbers);
  19.         for(i=0;i<(int)strlen(numbers);i++){
  20.                 if(i%2==0){//因为小标从0开始
  21.                         sum_odd+=numbers[i]-'0';
  22.                 }else{
  23.                         sum_even+=(numbers[i]-'0')*2>9?((numbers[i]-'0')*2-9):(numbers[i]-'0')*2;
  24.                 }
  25.         }
  26.         return !((sum_even+sum_odd)%10);
  27. }
复制代码

objective-c里可以通过(char *)[string UTF8string]这么传进参数。

posted on 2011-12-06 11:30  Evalon  阅读(196)  评论(0)    收藏  举报

导航