Automattic\WooCommerce\Internal\Fulfillments\Providers

DPDShippingProvider::validate_country_patternprivateWC 1.0

Validate tracking number against country-specific patterns and determine service type.

Method of the class: DPDShippingProvider{}

No Hooks.

Returns

Array|true|false. Array with service info if valid, false otherwise.

Usage

// private - for code of main (parent) class only
$result = $this->validate_country_pattern( $tracking_number, $country_code );
$tracking_number(string) (required)
The tracking number to validate.
$country_code(string) (required)
The country code for the shipment.

DPDShippingProvider::validate_country_pattern() code WC 10.3.3

private function validate_country_pattern( string $tracking_number, string $country_code ) {
	if ( ! isset( self::TRACKING_PATTERNS[ $country_code ] ) ) {
		return false;
	}

	$country_data     = self::TRACKING_PATTERNS[ $country_code ];
	$detected_service = null;
	$confidence_boost = 0;

	// Check service-specific patterns first.
	if ( isset( $country_data['services'] ) ) {
		if ( preg_match( '/^02\d{12}$/', $tracking_number ) ) {
			$detected_service = 'classic';
			$confidence_boost = $country_data['services']['classic'] ?? 0;
		} elseif ( preg_match( '/^0[34578]\d{12}$/', $tracking_number ) ) {
			$detected_service = 'express';
			$confidence_boost = $country_data['services']['express'] ?? 0;
		} elseif ( preg_match( '/^0[49]\d{12}$/', $tracking_number ) ) {
			$detected_service = 'predict';
			$confidence_boost = $country_data['services']['predict'] ?? 0;
		} elseif ( preg_match( '/^03\d{12}$/', $tracking_number ) && 'GB' === $country_code ) {
			$detected_service = 'next_day';
			$confidence_boost = $country_data['services']['next_day'] ?? 0;
		} elseif ( preg_match( '/^02\d{12}$/', $tracking_number ) && 'FR' === $country_code ) {
			$detected_service = 'relais';
			$confidence_boost = $country_data['services']['relais'] ?? 0;
		} elseif ( preg_match( self::S10_PATTERN, $tracking_number ) ) {
			$detected_service = 's10';
			$confidence_boost = $country_data['services']['s10'] ?? 90;
		}
	}

	// Check all patterns.
	foreach ( $country_data['patterns'] as $pattern ) {
		if ( preg_match( $pattern, $tracking_number ) ) {
			return array(
				'valid'            => true,
				'service'          => $detected_service,
				'confidence_boost' => $confidence_boost,
			);
		}
	}

	return false;
}