Automattic\WooCommerce\Admin\Features\Fulfillments

FulfillmentUtils::validate_mod11_check_digit │ public static │ WC 1.0

Validate Mod 11 check digit for tracking numbers (used by DHL).

Метод класса: FulfillmentUtils{}

Хуков нет.

Возвращает

bool. True if valid, false otherwise.

Использование

$result = FulfillmentUtils::validate_mod11_check_digit( $tracking_number ): bool;
$tracking_number(строка) (обязательный)
The tracking number.

Код FulfillmentUtils::validate_mod11_check_digit() WC 11.2.2

public static function validate_mod11_check_digit( string $tracking_number ): bool {
	if ( ! preg_match( '/^\d+$/', $tracking_number ) || strlen( $tracking_number ) < 2 ) {
		return false;
	}

	$check_digit = (int) substr( $tracking_number, -1 );
	$number      = substr( $tracking_number, 0, -1 );

	$weights      = array( 2, 3, 4, 5, 6, 7, 8, 9, 10, 11 );
	$sum          = 0;
	$weight_index = 0;

	// Process each digit from right to left.
	for ( $i = strlen( $number ) - 1; $i >= 0; $i-- ) {
		$digit = (int) $number[ $i ];
		$sum  += $digit * $weights[ $weight_index % count( $weights ) ];
		++$weight_index;
	}

	$calculated_check = 11 - ( $sum % 11 );
	if ( 10 === $calculated_check ) {
		$calculated_check = 0;
	} elseif ( 11 === $calculated_check ) {
		$calculated_check = 5;
	}

	return $calculated_check === $check_digit;
}