-1

我正在使用 Luhn 算法进行信用卡验证:我只需要查看该号码是否是有效的信用卡号码。

$number=clean($_GET['number']);
if (LuhnCheck($number) == 0)
{
   echo "credit card valid";
}
else
{
   echo "invalid";
}

 function LuhnCheck($strDigits)
    {
        $sum = 0;
        $alt = false;
        for($i = strlen($strDigits) - 1; $i >= 0; $i--) 
        {
            if($alt)
            {
               $temp = $strDigits[$i];
               $temp *= 2;
               $strDigits[$i] = ($temp > 9) ? $temp = $temp - 9 : $temp;
            }
            $sum += $strDigits[$i];
            $alt = !$alt;
        }
        return $sum % 10 == 0;
    }

上述方法适用于 AMEX、discover、visa 和 mastercard 吗?我无法确认。

4

3 回答 3

5

根据 Wikipedia,Luhn 算法用于所有ISO/IED-7812卡号。美国运通属于旅游和娱乐类别,因此其数字以 . 开头3。Discover、Visa 和 Mastercard 属于银行和金融类别,因此它们的编号以4or开头5(Discover 也属于商品销售,因此它们的编号也以 or 开头6)。

简而言之,如果您的代码实现了 Luhn 算法,是的,它将适用于 American Express、Discover、Visa 和 Mastercard。

于 2012-02-08T23:17:45.153 回答
1

这是一个 jquery 插件:https ://github.com/iHwy/jQuery-Validation-Extension

还有一个关于银行卡号的 wiki 条目 http://en.wikipedia.org/wiki/Bank_card_numbers。

编辑:和一个 php 脚本:http ://www.braemoor.co.uk/software/creditcard.php

于 2012-02-08T23:15:49.700 回答
1

当存在巨大的潜在风险时,不要重新发明轮子。

那里有许多经过验证的库 - 这是一个:

http://framework.zend.com/manual/1.12/en/zend.validate.set.html#zend.validate.set.creditcard

于 2012-02-08T23:35:17.127 回答