英国商家的信用卡验证资源

时间:2009-08-27 14:58:28

标签: regex validation credit-card

我正在尝试根据标准检查参数设置信用卡号码,但我发现很多英国卡(Maestro / Visa Debit / Barclaycard Connect)的起始号码不符合其他卡验证脚本正则表达式;

I.eestro(Switch)卡仍然存在,并以4开头,在网上使用大量的正则表达式会导致选择Visa信用卡。

是否有人知道存储这些注册起始码的资源?

TA

任何人都在寻找英国信用卡验证表(BIN表)

http://www.barclaycard.co.uk/business/documents/pdfs/bin_rules.pdf

4 个答案:

答案 0 :(得分:1)

以下是rules regarding credit card formatting and validation

注意:切换卡实际上是借记卡而不是信用卡,因此具有不同的验证规则。实际上,交换卡通常具有嵌入在号码中的帐号。可能有一个校验和算法,但我还没有看到它。

答案 1 :(得分:1)

您不能依赖正则表达式来验证卡号。您需要一个最近的卡验证表,其中包括范围的长度和类型映射的范围。您的支付网关提供商应该能够为您提供最新的验证表。

您通常可以依赖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);
}

答案 2 :(得分:0)

我不知道注册的开始代码,但我得到了一个适用于cc验证(javascript)的脚本:Determine credit card type by number?

这是经过严格测试的,并且用于相当多的交易,所以它应该处理所有特殊情况(如果你把它改成正则表达式,你能分享吗?)

答案 3 :(得分:0)

Wiki

上的BIN(银行识别码)资源