【问题标题】:credit card validation using Luhn's [closed]使用 Luhn 的信用卡验证 [关闭]
【发布时间】:2012-03-01 11:01:33
【问题描述】:

我正在使用 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 吗?我无法确认。

【问题讨论】:

  • 您想部署信用卡验证程序而不进行测试?
  • 这里不接受代码审查问题。这不是免费的软件测试服务。
  • 也许他确实测试过了,而他的卡不是其中之一……嗯……没关系。
  • 网上有很多资源可以获取虚假信用卡详细信息。不过,它们通常会有所不同,具体取决于您打算在哪里使用它们。请注意,他们仍然应该使用算法。

标签: php credit-card luhn


【解决方案1】:

根据维基百科,Luhn algorithm 用于所有ISO/IED-7812 卡号。美国运通属于旅游和娱乐类别,因此其编号以3 开头。 Discover、Visa 和 Mastercard 属于银行和金融类别,因此它们的编号以 45 开头(Discover 也属于商品销售,因此它们的编号也以 6 开头)。

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

【讨论】:

  • @meager 我不是要求进行代码审查。我没有所有这些卡。我会考虑到fuzzyDunlop 和CanSpice 的建议。
【解决方案2】:

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

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

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

【讨论】:

  • 链接似乎已损坏
  • 链接再次完整
【解决方案3】:

这是一个 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

【讨论】:

猜你喜欢
  • 2013-10-21
  • 2017-01-09
  • 2014-08-03
  • 2014-01-20
  • 2021-10-29
  • 2014-01-30
  • 2014-01-25
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多