मुझे लगता है कि सबसे अच्छा तरीका यह पता लगाने के लिए बस यह परीक्षण करने के लिए है:
using System;
using System.Linq;
using System.Text;
using System.IO;
namespace SO
{
class Program
{
static void Main(string[] args)
{
string[] cards = new string[] {
//http://www.paypalobjects.com/en_US/vhelp/paypalmanager_help/credit_card_numbers.htm
"378282246310005", // American Express
"4012888888881881", // Visa
"6011111111111117", // Discover
"4222222222222", // Visa
"76009244561", // Dankort (PBS)
"5019717010103742", // Dakort (PBS)
"6331101999990016", // Switch/Solo (Paymentech)
"30569309025904", // Diners Club
//http://www.getcreditcardnumbers.com/
"5147004213414803", // Mastercard
"6011491706918120", // Discover
"379616680189541", // American Express
"4916111026621797", // Visa
};
foreach (string card in cards)
{
Console.WriteLine(IsValid(card));
}
Console.ReadLine();
}
public static bool IsValid(object value)
{
if (value == null)
{
return true;
}
string ccValue = value as string;
if (ccValue == null)
{
return false;
}
ccValue = ccValue.Replace("-", "");
ccValue = ccValue.Replace(" ", "");
int checksum = 0;
bool evenDigit = false;
// http://www.beachnet.com/~hstiles/cardtype.html
foreach (char digit in ccValue.Reverse())
{
if (digit < '0' || digit > '9')
{
return false;
}
int digitValue = (digit - '0') * (evenDigit ? 2 : 1);
evenDigit = !evenDigit;
while (digitValue > 0)
{
checksum += digitValue % 10;
digitValue /= 10;
}
}
return (checksum % 10) == 0;
}
}
}
अगर है विधि मूल सी # CreditCardAttribute वर्ग से है। 1 से 12 संख्या से बाहर विफल रहा:
True
True
True
True
False //"76009244561", // Dankort (PBS)
True
True
True
True
True
True
True
तो, आप इसे इस्तेमाल करना चाहिए? नहीं, जाहिर है यह सभी संख्याओं का पता नहीं लगाता है। हालांकि आप अपना कोड ले सकते हैं और इसे बेहतर बना सकते हैं!
स्रोत
2015-04-27 15:38:10
करने के लिए एक कड़ी के रूप में जाना जाता है प्रश्न में विशेषता का दस्तावेज बहुत उपयोगी होगा। –
@OndrejTucny [यहां आप जाते हैं] (https://msdn.microsoft.com/en-us/library/system.componentmodel.dataannotations.creditcardattribute%28v=vs.110%29.aspx)। त्वरित गूगल खोज एक लंबा रास्ता तय करता है। –
[यह प्रश्न] (http://stackoverflow.com/q/12580450/3199927) कुछ अंतर्दृष्टि प्रदान करता है कि 'क्रेडिट कार्ड एट्रिब्यूट' इनपुट को मान्य करता है। – Tom