已验证信用卡号

问题描述 投票:0回答:3

需要一些帮助,我已经完成了,但无法让它显示或正常工作。使用 str_replace,它应该获取实际的信用卡号并从中删除 - 。我已经把那部分写下来了,但是当我创建一个嵌套的 if 语句并使用 is_numeric 进行验证时,它显示“这是一个无效的卡号”;当然,如果我将其设置为 is_numeric($CreditNumber)),它也会打印出信用卡号码以及回显。

另外,我注意到一件事。我已将此文件上传到我们的类服务器,它显示信用卡号,但它显示两次,而当我使用 XAMPP 时,它根本不显示它。

有什么指点吗?这是代码

  <?php 

$CreditCard = array ("", "8910-1234-5678-6543", "OOOO-9123-4567-0123");

foreach ($CreditCard as $CreditNumber) {
    if(empty($CreditNumber)) {
        echo "Invalid Card Number <br/>";
    } else {
        $CreditNumber = str_replace("-", "", $CreditCard[1]);

        echo $CreditNumber;
        echo "<br/>";
        if (is_numeric()) {
            echo "This is an invalid Card Number";
        } else {
            echo $CreditNumber; //This shows the credit card number without the dashes
        }
    }
}

?>

编辑:

我已经完成了它,它在最后显示了正确的数字,但由于某些奇怪的原因,它重复了 16 位数字两次

    <?php 

$CreditCard = array ("", "8910-1234-5678-6543", "OOOO-9123-4567-0123");

foreach ($CreditCard as $CreditNumber) {
    if(empty($CreditNumber)) {
        echo "Invalid Card Number <br/>";
    } else {
        $CreditNumber = str_replace("-", "", $CreditCard[1]);

        //echo $CreditNumber;
        //echo "<br/>";
        if (is_numeric($CreditCard)) {
            echo "This is an invalid Card Number";
        } else {
            echo $CreditNumber; //This shows the credit card number without the dashes
        }
    }
}

?>
php foreach str-replace isnumeric
3个回答
0
投票

正则表达式在这里很有用:

$CreditCard = array("", "8910-1234-5678-6543", "OOOO-9123-4567-0123");

foreach ($CreditCard as $CreditNumber) {
    if (preg_match("/^\d{4}-\d{4}-\d{4}-\d{4}$/", $CreditNumber)) {
        echo "VALID:   " . $CreditNumber . "\n";
    }
    else {
        echo "INVALID: " . $CreditNumber . "\n";
    }
}

打印:

INVALID: 
VALID:   8910-1234-5678-6543
INVALID: OOOO-9123-4567-0123

请注意,如果您希望正则表达式模式来验证特定供应商卡(例如 Amex、Mastercard、Visa 等),请使用参考,例如这个


0
投票

在循环中,您覆盖了

$CreditCard
,因此之后无法显示原始格式。您可以使用一个短函数在作用域块中进行测试:

function isCreditNumber($creditNumber) {
    if (empty($creditNumber)) {
        return false;
    }
    $num = str_replace("-", "", $creditNumber);
    if (! is_numeric($num)) {
        return false;
    }
    return true;
}

$CreditCard = ["", "8910-1234-5678-6543", "OOOO-9123-4567-0123"];

foreach ($CreditCard as $CreditNumber) {
    if (! isCreditNumber($CreditNumber)) {
        echo "Invalid Card Number <br/>";
    }
    else {
        echo $CreditNumber . " is valid<br>";
    }
}

输出:

Invalid Card Number
8910-1234-5678-6543 is valid
Invalid Card Number

0
投票

我们必须使用 Luhn 算法来验证信用卡号,这里是验证信用卡号的示例方法

// Function to validate a credit card number using the Luhn algorithm
function validateCreditCard($number)
{
    $number = str_replace(' ', '', $number);
    $sum = 0;
    $numDigits = strlen($number);
    $parity = $numDigits % 2;

    for ($i = 0; $i < $numDigits; $i++) {
        $digit = (int)$number[$i];

        if ($i % 2 == $parity) {
            $digit *= 2;

            if ($digit > 9) {
                $digit -= 9;
            }
        }

        $sum += $digit;
    }

    return ($sum % 10 == 0);
}

// Example usage
$creditCardNumber = "1234567812345670"; // Replace with your credit card number
if (validateCreditCard($creditCardNumber)) {
    echo "Valid credit card number.";
} else {
    echo "Invalid credit card number.";
}
© www.soinside.com 2019 - 2024. All rights reserved.