- array_pop: documentation ( source)
- str_split: documentation ( source)
<?php
function calculate_hub_sortation_check_digit($str_hub_sortation_prefix) {
$arr_split_prefix = str_split($str_hub_sortation_prefix);
$int_weight = 19;
$int_total = 0;
// calculate position coefficient
foreach($arr_split_prefix as $int_i => $mix_value) {
$int_total += $mix_value * $int_weight;
$int_weight--;
}
// modulus 11
$int_hub_check_digit = $int_total % 11;
// if modulus is 10, check digit is repetition of last digit
if ($int_hub_check_digit === 10) {
echo "is ten\n";
$int_hub_check_digit = array_pop($arr_split_prefix);
}
return $int_hub_check_digit;
}
echo calculate_hub_sortation_check_digit('0465011111500021051');