/**
* Validates EAN-13.
*
* @see https://wpcodebook.com/validate-ean-php/
* @param string $ean EAN to validate
* @return bool
*/
function wpcodebook_is_valid_ean13( $ean ) {
// Length
if ( 13 != strlen( $ean ) ) {
return false;
}
// Only digits
if ( ! preg_match( "/^[0-9]+$/", $ean ) ) {
return false;
}
// The check digit
$check = substr( $ean, -1 );
$ean = substr( $ean, 0, -1 );
$sum_even = 0;
$sum_odd = 0;
$even = true;
while ( strlen( $ean ) > 0 ) {
$digit = substr( $ean, -1 );
if ( $even ) {
$sum_even += 3 * $digit;
} else {
$sum_odd += $digit;
}
$even = ! $even;
$ean = substr( $ean, 0, -1 );
}
$sum = $sum_even + $sum_odd;
$sum_rounded_up = ceil( $sum / 10 ) * 10;
$result = ( $check == ( $sum_rounded_up - $sum ) );
return $result;
}