我正在使用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,发现,签证和万事达卡?我无法证实。
答案 0 :(得分:5)
根据维基百科,Luhn algorithm用于所有ISO/IED-7812卡号。美国运通属于旅游和娱乐类别,因此其号码以3
开头。发现,维萨和万事达卡属于银行和金融类别,因此他们的号码以4
或5
开头(发现也在商品推销中,所以他们的号码也以6
开头)。
简而言之,如果您的代码实现了Luhn算法,是的,它将适用于American Express,Discover,Visa和Mastercard。
答案 1 :(得分:1)
这是一个jquery插件:https://github.com/iHwy/jQuery-Validation-Extension
关于银行卡号码的维基条目 http://en.wikipedia.org/wiki/Bank_card_numbers.
编辑: 和一个PHP脚本:http://www.braemoor.co.uk/software/creditcard.php
答案 2 :(得分:1)
当潜在的巨大风险很大时,不要重新发明轮子。
有许多经过验证的图书馆 - 这里有一个:
http://framework.zend.com/manual/1.12/en/zend.validate.set.html#zend.validate.set.creditcard