信用卡检查验证C++

信用卡检查验证C++,c++,C++,C中的问题++ 信用卡号检查,信用卡号的最后一个数字是检查数字,它可以防止抄写错误,如单个数字的错误或两个数字的转换。以下方法用于验证实际信用卡号,但为简单起见,我们将针对8位数字而非16位数字进行说明: •从最右边的数字开始,形成每个其他数字的总和。例如,如果信用卡号为43589795,则您形成的总和为:5+7+8+3=23 •将前一步骤中未包含的每个数字加倍。将结果数字的所有数字相加。例如,对于上面给出的数字,将数字加倍,从倒数第二个数字开始,得到:18 10 8。将这些值中的所有数字相加得

C中的问题++

信用卡号检查,信用卡号的最后一个数字是检查数字,它可以防止抄写错误,如单个数字的错误或两个数字的转换。以下方法用于验证实际信用卡号,但为简单起见,我们将针对8位数字而非16位数字进行说明:

•从最右边的数字开始,形成每个其他数字的总和。例如,如果信用卡号为43589795,则您形成的总和为:5+7+8+3=23

•将前一步骤中未包含的每个数字加倍。将结果数字的所有数字相加。例如,对于上面给出的数字,将数字加倍,从倒数第二个数字开始,得到:18 10 8。将这些值中的所有数字相加得到:1+8+1+8+1+0+8=27

•将前面两个步骤的总和相加。如果结果的最后一位为0,则该数字有效。在我们的例子中,23+27=50,所以这个数字是有效的

编写一个实现此算法的程序,并打印数字是否有效

这就是我目前所拥有的


我的方法正确吗?我如何前进,因为我在循环中得到了一个核心转储错误,包括从1到8的迭代。所以,当你的代码到达

if (i%2 == 0)
{
    sum_even = number.substr(i, 1); 
}
它将尝试从字符串边界外创建子字符串, 在担心校验位之前,您需要通过调试程序运行代码。你缺少一些基本概念,下面是我注意到的一些事情。 在表面上,你的j值永远不会增加。对for循环、变量作用域和递增进行一些研究 您正在尝试遍历字符串oddnum而不使用oddnum的长度,并移动到字符串所拥有的内存之前。对字符串操作做一些研究 字符串和C++中的所有其他数组都是零基的,从1开始计数,总是丢失字符串中的第一个元素。阵列接入技术研究 您需要记住,您正在将数字存储在字符串中。这意味着你必须在字符串中取每个元素,并将字符的值转换成C++中的一个数值研究。
可能还有一些事情需要清理。但是,通过在调试器中设置几个断点,您将能够很好地捕获错误

试试这段代码,它的工作原理与您想要的完全相同

//Credit card no validation
#include<iostream>
#include<cstring>
#include<stdlib.h>
#include<conio.h>                        //for getche()
using namespace std;
int main()
{
    int no1=0,od=0,to=0,fi=0;
    int j=(-1),ev=0,odd=0;
    int i=1;
    int max=15;
    int x[max];
    char ch='a';
    string cardno;
    cout<<"Enter the 8 digit card no";
          do
            {
              ch=getche();
              x[i] = ch-48;                //-48 because of ASCII valuse
              ++i;
              ++j;
            }while(ch != '\r');

            if(j!=8)
            {
                cout<<"\nCredit card is INVALID";
                exit(0);
            }

      cout<<endl;
      for(int j=1;j<5;j++)
      ev+=x[2*j];
        for(int j=0;j<4;j++)
      {
          od=2*x[(2*j)+1];
          no1=od%10+od/10;
          odd+=no1;
      }
   cout<<"Total no of DIGITS in CARD is:"<<j<<endl;
   cout<<"Sum of odd digit is "<<ev<<endl;
   cout<<"Sum of even digit is "<<odd<<endl;
   to=ev+odd;
   fi=to%10;
   if(fi==0)
   {
     cout<<"CREDIT CARD IS VALID";
   }
   if(fi!=0)
   {
     cout<<"Credit card is INVALID";
   }

   return 0;

它应该是有用的,我想

试试这个它会有用的

但是这个程序是用java语言编写的,所以请理解解决这个问题的方法,并在解决方案中使用它

import java.util.Scanner;

public class Creditcard {

    public static void main(String[] args) {
        int sum = 0;
        int sum1 = 0;
        System.out.println("Enter 8 digit credit card number :");
        Scanner kb = new Scanner(System.in);
        String string = kb.nextLine();
        for (int i = 0; i < 8; i++) {

            if (i % 2 != 0) {
                char ch = (string.charAt(i));
                int no = ch - 48;
                sum = sum + no;
            }

            if (i % 2 == 0) {
                char ch1 = (string.charAt(i));
                int no1 = ch1 - 48;
                no1 = (2 * no1);
                while (no1 != 0) {
                    int temp1 = no1 % 10;
                    no1 = no1 / 10;
                    sum1 = sum1 + temp1;
                }

            }

        }
        int result = sum + sum1;
        if (result % 10 == 0) {
            System.out.println("valid");
        } else {
            System.out.println("Invalid");
        }

    }
}

您的问题与信用卡号码无关,而是内存处理问题。看看标题,还有你的示例代码,在那灯光下。。。您是否应该以不同的方式询问/准备此问题?如果您遇到了分段错误,那么您会崩溃,因为您做了不应该做的坏事。您需要学习如何使用调试器,然后可以在调试器中运行程序,并捕获实际发生的崩溃并查看它发生的位置。您还可以查看并遍历函数调用堆栈,这样,如果调试器尚未停止,您可以转到代码,然后检查变量的值,所有这些都可以帮助您定位并理解崩溃发生的原因。至少请告诉我们在代码中发生了什么碰撞。字符串中的字符索引是C++中的零,就像其他所有的一样。int i=1的最大值;不过,你应该注意的一件事是,C++中的字符串索引从零开始,直到大小减去一个。此外,当从第一个字符以外的任何字符开始时,如何从8个字符的字符串中获取8个字符的子字符串?最后,如果读取字符串,则该字符串中包含字符而不是数字。字符具有不同的编码,但对于最常见的编码,字符“1”的值不是1而是49。
import java.util.Scanner;

public class Creditcard {

    public static void main(String[] args) {
        int sum = 0;
        int sum1 = 0;
        System.out.println("Enter 8 digit credit card number :");
        Scanner kb = new Scanner(System.in);
        String string = kb.nextLine();
        for (int i = 0; i < 8; i++) {

            if (i % 2 != 0) {
                char ch = (string.charAt(i));
                int no = ch - 48;
                sum = sum + no;
            }

            if (i % 2 == 0) {
                char ch1 = (string.charAt(i));
                int no1 = ch1 - 48;
                no1 = (2 * no1);
                while (no1 != 0) {
                    int temp1 = no1 % 10;
                    no1 = no1 / 10;
                    sum1 = sum1 + temp1;
                }

            }

        }
        int result = sum + sum1;
        if (result % 10 == 0) {
            System.out.println("valid");
        } else {
            System.out.println("Invalid");
        }

    }
}