实现Luhn检验和实现c++实现

本文通过C++代码详细介绍了Luhn算法的实现过程,包括如何处理输入数字、计算奇偶位数字并验证最终的校验码是否正确。适用于理解信用卡等场景中校验码的工作原理。

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

实验代码一

 1 #include <iostream>
 2 using namespace std;
 3 
 4 //<<像程序员一样思考>> 实现Luhn检验和实现 
 5 //Luhn原理 标识号 最后一位是检验数字  
 6 //回车 ASC码值 10 
 7 int method(int temp);
 8 bool luhnMethod(int temp);
 9 int main()
10 {
11 //  const int array_size = 6;
12     const int array_size = 7;
13     int sum = 0;
14     //步骤划分 先实现数组为偶数 大小为6的数组 
15     //乘以2的数字分别为 1 5 9 乘以2后分别为 2 1 9
16     //2 + 1 + 9 + 3 + 7 + 8 = 30 
17     //数组索引0 2 4 
18 //    int age[] = {1,3,5,7,9,8};
19 //    for(int i=0; i<array_size; i++)
20 //    {
21 //        if(i % 2 == 0)
22 //        {
23 //            sum += method(age[i]);
24 //        }
25 //        else
26 //        {
27 //            sum += age[i];
28 //        }
29 //    }
30 //    cout << "sum: " << sum << endl;
31 //    bool flag = luhnMethod(sum);
32 //    cout << "flag: " << flag << endl;
33     //实现数组为奇数 大小为7的数组
34     //1,3,5,7,9,8,2,
35     //乘以2的数字 3 7 8 乘以2的结果为 6 5 7  
36     //在数组中的索引位置 分别为 1 3 5 
37     //相加的结果为 1 + 6 + 5 + 5 + 9 + 7 + 2 = 35 
38     int age[] = {1,3,5,7,9,8,2};
39     for(int i=0; i<array_size; i++)
40     {
41         if(i % 2 != 0)
42         {
43             sum += method(age[i]);
44         }
45         else
46         {
47             sum += age[i];
48         }
49     }
50     cout << "sum: " << sum << endl;
51     bool flag = luhnMethod(sum);
52     cout << "flag: " << flag << endl;
53     return 0;
54 }
55 //如果传入的数值乘以2小于10 返回乘以2之后的数 若大于10 返回个位 十位数 数字相加之和 
56 int method(int temp)
57 {
58     int doubleValue;
59     temp = 2 * temp;
60     if(temp < 10)
61     {
62         doubleValue = temp;
63     }
64     if(temp >= 10)
65     {
66         doubleValue = 1 + temp%10;
67     }
68     return doubleValue;
69 }
70 //Luhn 相加的和能被10整除 则说明标识号正确 否则错误 
71 bool luhnMethod(int temp)
72 {
73     if(temp % 10 == 0)
74     {
75         return true;
76     }
77     else
78     {
79         return false;
80     }
81 }
实验代码二
 1 #include <iostream>
 2 using namespace std;
 3 
 4 //如何处理数字输入  统计输入的数值键的个数 
 5 int main()
 6 {
 7     int temp;
 8     int count = 0;
 9     cout << "input number please" << endl;
10     temp = cin.get();
11     while(true)
12     {
13         //回车键的ASC码值为10  
14         if(temp == 10)
15         {
16             //回车键不算输入的数值键 
17             break;
18         }
19         else
20         {
21             count++;
22             temp = cin.get();
23         }
24     }
25     cout << "输入的数值键的个数为" << count << endl;
26     return 0;
27 }

实验代码三

每输入一个字符就要计算 然而要等到输入完所有数值时,才可以判断输入的数值是奇数还是偶数 

如何用代码实现这个功能

 1 #include <iostream>
 2 using namespace std;
 3 
 4 int inputMethod();
 5 int method(int temp);
 6 int main()
 7 {
 8     int result = inputMethod();
 9     cout << "result: " << result << endl;
10     return 0;
11 }
12 //方法改进 还要对每一个输入的数值调用检验方法 
13 //int inputMethod()
14 //{
15 //    int inputValue;
16 //    //统计输入的数值键的个数 
17 //    int count = 0;
18 //    cout << "请输入标识号" << endl;
19 //    inputValue = cin.get();
20 //    while(true)
21 //    {
22 //        if(inputValue == 10)
23 //        {
24 //            break;
25 //        }
26 //        else
27 //        {
28 //            count++;
29 //            inputValue = cin.get();
30 //        }
31 //    }
32 //    return count;
33 //}
34 int inputMethod()
35 {
36     int inputValue;
37     int count = 1;
38     int jishuLength = 0;
39     int oushuLength = 0;
40     
41     int totalSum = 0;
42     cout << "请输入标识号" << endl;
43     inputValue = cin.get();
44     while(true)
45     {
46         //回车键不算入数字键
47         //回车键ASC码值为10 
48         if(inputValue == 10)
49         {
50             break;
51         }
52         else
53         {
54             //统计输入的数字键个数  
55             //如果输入的数字键的个数为偶数个 则
56             if(count % 2 == 0)
57             {
58                 jishuLength += method(inputValue - '0');
59                 oushuLength += inputValue - '0';
60             }
61                 
62                 //统计输入的数字键的个数为奇数个 则 
63             else
64             {
65                 oushuLength += method(inputValue - '0');
66                 jishuLength += inputValue - '0';
67             }
68 
69             //输入下一个数字键 
70             inputValue = cin.get();
71             count++;
72         }
73     }
74     if(count%2 == 0)
75     {
76         totalSum = jishuLength;
77     }
78     else
79     {
80         totalSum = oushuLength;
81     }
82     return totalSum;
83 }
84 int method(int temp)
85 {
86     int doubleValue;
87     temp = 2 * temp;
88     if(temp < 10)
89     {
90         doubleValue = temp;
91     }
92     if(temp >= 10)
93     {
94         doubleValue = 1 + temp%10;
95     }
96     return doubleValue;
97 }

最后 完整代码

 1 #include <iostream>
 2 using namespace std;
 3 
 4 //<<像程序员一样思考>> 实现Luhn检验和实现 
 5 //Luhn原理 标识号 最后一位是检验数字  
 6 //回车 ASC码值 10 
 7 int method(int temp);
 8 bool luhnMethod(int temp);
 9 int inputMethod(); 
10 int main()
11 {
12 
13 
14     int sum = inputMethod();
15     int result = luhnMethod(sum);
16     cout << "result: " << result << endl;  
17     return 0;
18 }
19 //如果传入的数值乘以2小于10 返回乘以2之后的数 若大于10 返回个位 十位数 数字相加之和 
20 int method(int temp)
21 {
22     int doubleValue;
23     temp = 2 * temp;
24     if(temp < 10)
25     {
26         doubleValue = temp;
27     }
28     if(temp >= 10)
29     {
30         doubleValue = 1 + temp%10;
31     }
32     return doubleValue;
33 }
34 int inputMethod()
35 {
36     int inputValue;
37     int count = 1;
38     int jishuLength = 0;
39     int oushuLength = 0;
40     
41     int totalSum = 0;
42     cout << "请输入标识号" << endl;
43     inputValue = cin.get();
44     while(true)
45     {
46         //回车键不算入数字键
47         //回车键ASC码值为10 
48         if(inputValue == 10)
49         {
50             break;
51         }
52         else
53         {
54             //统计输入的数字键个数  
55             //如果输入的数字键的个数为偶数个 则
56             if(count % 2 == 0)
57             {
58                 jishuLength += method(inputValue - '0');
59                 oushuLength += inputValue - '0';
60             }
61                 
62                 //统计输入的数字键的个数为奇数个 则 
63             else
64             {
65                 oushuLength += method(inputValue - '0');
66                 jishuLength += inputValue - '0';
67             }
68 
69             //输入下一个数字键 
70             inputValue = cin.get();
71             count++;
72         }
73     }
74     if(count%2 == 0)
75     {
76         totalSum = jishuLength;
77     }
78     else
79     {
80         totalSum = oushuLength;
81     }
82     return totalSum;
83 }
84 //Luhn 相加的和能被10整除 则说明标识号正确 否则错误 
85 bool luhnMethod(int temp)
86 {
87     if(temp % 10 == 0)
88     {
89         return true;
90     }
91     else
92     {
93         return false;
94     }
95 }

 

 

转载于:https://www.cnblogs.com/littlelittleprince/p/10663174.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值