Complete solution (see it running):
function formatNum1000($num) { $tail = $num % 1000; $head = (int)($num / 1000); $char1 = chr(ord('A') + (int)($head / 26)); $char2 = chr(ord('A') + ($head % 26)); return sprintf('%s%s%03d', $char1, $char2, $tail); } function formatNum999($num) { $tail = (($num - 1 ) % 999) + 1; $head = (int)(($num - $tail) / 999); $char1 = chr(ord('A') + (int)($head / 26)); $char2 = chr(ord('A') + ($head % 26)); return sprintf('%s%s%03d', $char1, $char2, $tail); } $ns = array(1, 500, 999, 1000, 1998, 1999, 2000, 25974, 25975, 25999, 26000, 675324, 675999); foreach($ns as $n) { $formatted1000 = formatNum1000($n); $formatted999 = formatNum999 ($n); echo "Num: $n => $formatted1000 / $formatted999\n"; }
Note: you need to make sure that the input number is within the valid range (0...675999 when including 000-numbers, 1...675324 otherwise)
Note: answer revised, missed the point earlier that 000 is not allowed
result AB000for1000?