How to check if the sum of two halves of a number is equal in PHP

2 Answers

0 votes
function sumDigits($n) {
    $n = (int)$n;
    $sum = 0;

    while ($n != 0) {
        $sum += $n % 10;
        $n = intdiv($n, 10);
    }

    return $sum;
}

function checkHalvesSumEqual($n) {
    $s = strval(abs($n));
    $length = strlen($s);

    if ($length % 2 != 0) {
        echo "The number of digits is NOT even. It cannot be split into two halves: ";
        return false;
    }

    $halfLength = $length / 2;

    $firstHalf = substr($s, 0, $halfLength);
    $secondHalf = substr($s, $length - $halfLength);

    $num1 = intval($firstHalf);
    $num2 = intval($secondHalf);

    return sumDigits($num1) === sumDigits($num2);
}

$nums = [
    123456,
    123321,
    123123,
    123411,
    1234321,
    12321
];

foreach ($nums as $n) {
    echo $n . ": " . (checkHalvesSumEqual($n) ? "true" : "false") . PHP_EOL;
}



/*
run:

123456: false
123321: true
123123: true
123411: true
The number of digits is NOT even. It cannot be split into two halves: 1234321: false
The number of digits is NOT even. It cannot be split into two halves: 12321: false

*/

 



answered Dec 23, 2025 by avibootz
0 votes
function halvesSumEqual(int $n): bool {
    $s = (string) abs($n);
    $len = strlen($s);

    if ($len % 2 !== 0) {
        return false;
    }

    $half = $len / 2;

    $left  = substr($s, 0, $half);
    $right = substr($s, $half);

    return array_sum(str_split($left)) === array_sum(str_split($right));
}


$nums = [123456, 123321, 123123, 123411, 1234321, 12321];

foreach ($nums as $n) {
    echo $n . ': ' . (halvesSumEqual($n) ? 'true' : 'false') . PHP_EOL;
}



/*
run:

123456: false
123321: true
123123: true
123411: true
1234321: false
12321: false

*/

 



answered Dec 23, 2025 by avibootz
edited Dec 23, 2025 by avibootz
...