信用卡号码验证程序

编写一个程序,提示用户以长整数形式输入信用卡号,并显示该卡是否有效。 信用卡号码遵循一定的模式。 信用卡号必须在13到16位之间。它必须从以下方面开始:

null
  • 4.Visa卡
  • 5张万事达卡
  • 37张美国运通卡
  • 6.探索卡

这个问题可以通过使用 卢恩算法 . 卢恩支票 或者 Mod 10 检查,可描述如下(用于说明, 考虑卡号4388576018402626): 第一步 .从右到左每隔两位数。如果数字加倍会导致 两位数,将两位数相加得到一个位数(如12:1+2,18=1+8)。 第二步 .现在将步骤1中的所有单位数相加。 4 + 4 + 8 + 2 + 3 + 1 + 7 + 8 = 37 第三步 .在卡号中从右到左的奇数处添加所有数字。 6 + 6 + 0 + 8 + 0 + 7 + 8 + 3 = 38 第四步 .将步骤2和步骤3的结果相加。 37 + 38 = 75 第五步 .如果步骤4的结果可被10整除,则卡号有效;否则无效。 例如:

Input : 379354508162306Output : 379354508162306 is ValidInput : 4388576018402626Output : 4388576018402626 is invalid

C++

// C++ program to check if a given credit
// card is valid or not.
#include <iostream>
using namespace std;
// Return this number if it is a single digit, otherwise,
// return the sum of the two digits
int getDigit( int number)
{
if (number < 9)
return number;
return number / 10 + number % 10;
}
// Return the number of digits in d
int getSize( long d)
{
string num = to_string(d);
return num.length();
}
// Return the first k number of digits from
// number. If the number of digits in number
// is less than k, return number.
long getPrefix( long number, int k)
{
if (getSize(number) > k)
{
string num = to_string(number);
return stol(num.substr(0, k));
}
return number;
}
// Return true if the digit d is a prefix for number
bool prefixMatched( long number, int d)
{
return getPrefix(number, getSize(d)) == d;
}
// Get the result from Step 2
int sumOfDoubleEvenPlace( long int number)
{
int sum = 0;
string num = to_string(number) ;
for ( int i = getSize(number) - 2; i >= 0; i -= 2)
sum += getDigit( int (num[i] - '0' ) * 2);
return sum;
}
// Return sum of odd-place digits in number
int sumOfOddPlace( long number)
{
int sum = 0;
string num = to_string(number) ;
for ( int i = getSize(number) - 1; i >= 0; i -= 2)
sum += num[i] - '0' ;
return sum;
}
// Return true if the card number is valid
bool isValid( long int number)
{
return (getSize(number) >= 13 &&
getSize(number) <= 16) &&
(prefixMatched(number, 4) ||
prefixMatched(number, 5) ||
prefixMatched(number, 37) ||
prefixMatched(number, 6)) &&
((sumOfDoubleEvenPlace(number) +
sumOfOddPlace(number)) % 10 == 0);
}
// Driver Code
int main()
{
long int number = 5196081888500645L;
cout << number << " is " <<  (isValid(number) ? "valid" : "invalid" );
return 0;
}
// This code is contributed by yuvraj_chandra


JAVA

// Java program to check if a given credit
// card is valid or not.
import java.util.Scanner;
public class CreditCard {
// Main Method
public static void main(String[] args)
{
long number = 5196081888500645L;
System.out.println(number + " is " +
(isValid(number) ? "valid" : "invalid" ));
}
// Return true if the card number is valid
public static boolean isValid( long number)
{
return (getSize(number) >= 13 &&
getSize(number) <= 16 ) &&
(prefixMatched(number, 4 ) ||
prefixMatched(number, 5 ) ||
prefixMatched(number, 37 ) ||
prefixMatched(number, 6 )) &&
((sumOfDoubleEvenPlace(number) +
sumOfOddPlace(number)) % 10 == 0 );
}
// Get the result from Step 2
public static int sumOfDoubleEvenPlace( long number)
{
int sum = 0 ;
String num = number + "" ;
for ( int i = getSize(number) - 2 ; i >= 0 ; i -= 2 )
sum += getDigit(Integer.parseInt(num.charAt(i) + "" ) * 2 );
return sum;
}
// Return this number if it is a single digit, otherwise,
// return the sum of the two digits
public static int getDigit( int number)
{
if (number < 9 )
return number;
return number / 10 + number % 10 ;
}
// Return sum of odd-place digits in number
public static int sumOfOddPlace( long number)
{
int sum = 0 ;
String num = number + "" ;
for ( int i = getSize(number) - 1 ; i >= 0 ; i -= 2 )
sum += Integer.parseInt(num.charAt(i) + "" );
return sum;
}
// Return true if the digit d is a prefix for number
public static boolean prefixMatched( long number, int d)
{
return getPrefix(number, getSize(d)) == d;
}
// Return the number of digits in d
public static int getSize( long d)
{
String num = d + "" ;
return num.length();
}
// Return the first k number of digits from
// number. If the number of digits in number
// is less than k, return number.
public static long getPrefix( long number, int k)
{
if (getSize(number) > k) {
String num = number + "" ;
return Long.parseLong(num.substring( 0 , k));
}
return number;
}
}


C#

// C# program to check if a given
// credit card is valid or not.
using System;
class CreditCard {
// Main Method
public static void Main()
{
long number = 5196081888500645L;
Console.Write(number + " is " +
(isValid(number) ?
"valid" : "invalid" ));
}
// Return true if the card number is valid
public static bool isValid( long number)
{
return (getSize(number) >= 13 &&
getSize(number) <= 16) &&
(prefixMatched(number, 4) ||
prefixMatched(number, 5) ||
prefixMatched(number, 37) ||
prefixMatched(number, 6)) &&
((sumOfDoubleEvenPlace(number) +
sumOfOddPlace(number)) % 10 == 0);
}
// Get the result from Step 2
public static int sumOfDoubleEvenPlace( long number)
{
int sum = 0;
String num = number + "" ;
for ( int i = getSize(number) - 2; i >= 0; i -= 2)
sum += getDigit( int .Parse(num[i] + "" ) * 2);
return sum;
}
// Return this number if it is a
// single digit, otherwise, return
// the sum of the two digits
public static int getDigit( int number)
{
if (number < 9)
return number;
return number / 10 + number % 10;
}
// Return sum of odd-place digits in number
public static int sumOfOddPlace( long number)
{
int sum = 0;
String num = number + "" ;
for ( int i = getSize(number) - 1; i >= 0; i -= 2)
sum += int .Parse(num[i] + "" );
return sum;
}
// Return true if the digit d
// is a prefix for number
public static bool prefixMatched( long number, int d)
{
return getPrefix(number, getSize(d)) == d;
}
// Return the number of digits in d
public static int getSize( long d)
{
String num = d + "" ;
return num.Length;
}
// Return the first k number of digits from
// number. If the number of digits in number
// is less than k, return number.
public static long getPrefix( long number, int k)
{
if (getSize(number) > k)
{
String num = number + "" ;
return long .Parse(num.Substring(0, k));
}
return number;
}
}
// This code is contributed by nitin mittal.


输出:

5196081888500645 is valid

本文由 维沙尔·库马尔·古普塔 .如果你喜欢GeekSforgek,并想贡献自己的力量,你也可以使用 贡献极客。组织 或者把你的文章寄到contribute@geeksforgeeks.org.看到你的文章出现在Geeksforgeks主页上,并帮助其他极客。 如果您发现任何不正确的地方,或者您想分享有关上述主题的更多信息,请写下评论。

© 版权声明
THE END
喜欢就支持一下吧
点赞10 分享