カード番号を検証するために正規表現に依存することはできません。範囲の長さと範囲からタイプへのマッピングを含む最近のカード検証テーブルが必要です。支払いゲートウェイプロバイダーは、最新の検証テーブルを提供できる必要があります。
多くの場合、Is-this-number-make-upタイプの検証については、Luhnに依存できますが、ゲートウェイの責任テストに合格するには、ユーザーが番号の書き込みカードタイプを入力したこと、および開始したかどうかを検証する必要があります。日付はプロバイダーによって要求され、入力する必要があります。
C#でのLuhnの例を次に示します。
public static bool IsLuhnValid(string cardNumber) {
if (string.IsNullOrEmpty(cardNumber))
return false;
Int64 cardNumberAsBigInt;
if (!Int64.TryParse(cardNumber, out cardNumberAsBigInt) || (cardNumberAsBigInt == 0))
return false;
int indicator = 1;
int firstNumberToAdd = 0;
int secondNumberToAdd = 0;
for (int i = cardNumber.Length - 1; i >= 0; i--) {
int currentNumber = int.Parse(cardNumber[i].ToString());
if (indicator == 1) {
firstNumberToAdd += currentNumber;
indicator = 0;
}
else {
int doubleCurrentNumber = currentNumber + currentNumber;
if (doubleCurrentNumber >= 10) {
int num1 = Convert.ToInt32(doubleCurrentNumber.ToString().Substring(0, 1));
int num2 = Convert.ToInt32(doubleCurrentNumber.ToString().Substring(1, 1));
secondNumberToAdd += num1 + num2;
}
else {
secondNumberToAdd += doubleCurrentNumber;
}
indicator = 1;
}
}
return ((firstNumberToAdd + secondNumberToAdd) % 10 == 0);
}