• Resolved waschhalle

    (@waschhalle)


    Hallo,

    ich nutze die mehrstufe Kasse von Germanized. Ich habe dort ein Feld “Kartennummer” (Nummer der beim Kunden vorliegenden Kundenkarte). Diese Nummer entspricht einem EAN-13 Barcode. Ich würde gerne via PHP die Validität der Nummer prüfen (Prüfung der Checksum).

    Die Programmierung via PHP ist nicht die Frage. Jedoch die Frage wie und wo ich dies integrieren muss.

    Grüße
    Georg Huber

    The page I need help with: [log in to see the link]

Viewing 4 replies - 1 through 4 (of 4 total)
  • Plugin Author vendidero

    (@vendidero)

    Hi,

    grundsätzlich müsstest du das einfach wie in den herkömmlichen WooCommerce Checkout integrieren/implementieren. Dafür verwendest du z.B. den Hook:

    woocommerce_after_checkout_validation

    und fügst deine Funktion zur Überprüfung via add_action an.

    Grüße

    Thread Starter waschhalle

    (@waschhalle)

    Ich habe in der Datei function.php im Child-Theme folgendes integriert.

    Ich habe jedoch checkout_process als Hock verwendet. Wäre after_checkout_validation besser?

    add_action( 'woocommerce_checkout_process', 'validate_ean13');
    
    function validate_ean13($post_id) {
    	
    	$barcode = $_POST['additional_kartennummer'];
    
    	if (!preg_match("/^[0-9]{13}$/", $barcode)) {
            wc_add_notice( __( 'Die Kartennummer ist zu kurz.'), 'error');
    		wc_add_notice( __( 'Die Kartennummer muss aus 13 Ziffern bestehen.' ), 'error');
    		wc_add_notice( __( 'Sie finden die Nummer auf der Rückseite Ihrer Kundenkarte' ), 'error');
    		wc_add_notice( __( 'Die Kartennummer beginnt mit 109201...'), 'error');
    		return false;
        }
    
        $digits = $barcode;
    
        // 1. Add the values of the digits in the 
        // even-numbered positions: 2, 4, 6, etc.
        $even_sum = $digits[1] + $digits[3] + $digits[5] +
                    $digits[7] + $digits[9] + $digits[11];
    
        // 2. Multiply this result by 3.
        $even_sum_three = $even_sum * 3;
    
        // 3. Add the values of the digits in the 
        // odd-numbered positions: 1, 3, 5, etc.
        $odd_sum = $digits[0] + $digits[2] + $digits[4] +
                   $digits[6] + $digits[8] + $digits[10];
    
        // 4. Sum the results of steps 2 and 3.
        $total_sum = $even_sum_three + $odd_sum;
    
        // 5. The check character is the smallest number which,
        // when added to the result in step 4, produces a multiple of 10.
        $next_ten = (ceil($total_sum / 10)) * 10;
        $check_digit = $next_ten - $total_sum;
    
        // if the check digit and the last digit of the 
        // barcode are OK return true;
        if ($check_digit == $digits[12]) {
            return true;
        }
    	
    	wc_add_notice( __( 'Die Kartennummer ist ungültig.'), 'error');
    	wc_add_notice( __( 'Die Kartennummer muss aus 13 Ziffern bestehen.' ), 'error');
    	wc_add_notice( __( 'Sie finden die Nummer auf der Rückseite Ihrer Kundenkarte' ), 'error');
    	wc_add_notice( __( 'Die Kartennummer beginnt mit 109201...'), 'error');
    
    }
    Plugin Author vendidero

    (@vendidero)

    Hi,

    das ginge denke ich auch. Du müsstest nur mal testen ob das mit der mehrstufigen Kasse dann korrekt funktioniert, d.h. das die Formularfelder entsprechend direkt im ersten Schritt geprüft werden.

    Grüße

    Thread Starter waschhalle

    (@waschhalle)

    Tatsächlich klappt es nur so. Benutze ich woocommerce_after_checkout_validation funktioniert die Validierung nicht.

Viewing 4 replies - 1 through 4 (of 4 total)
  • The topic ‘Validierung eines Eingabefeldes’ is closed to new replies.