/**************
This code is public domain.
This function increments a case-sensitive alphanumeric
number. It will use as many digits as you give it. If
it tries to increment a number that is at it's maximum
(eg "ZZ"), it returns boolean false.
**************/
define('NUMBER_START', ord('0'));
define('NUMBER_END', ord('9'));
define('LOWER_START', ord('a'));
define('LOWER_END', ord('z'));
define('UPPER_START', ord('A'));
define('UPPER_END', ord('Z'));
function incrementNumber($number) {
if (strlen($number) == 0)
return false;
$number = str_split($number);
$last = ord(array_pop($number));
switch ($last) {
case NUMBER_END:
$last = LOWER_START;
break;
case LOWER_END:
$last = UPPER_START;
break;
case UPPER_END:
$last = NUMBER_START;
$inc = incrementNumber(implode($number));
if ($inc === false)
return false;
$number = str_split($inc);
break;
default:
$last++;
}
$last = chr($last);
$number[] = $last;
return implode($number);
}
// Usage
echo incrementNumber('0000'); // outputs "0001"
echo incrementNumber('0aB4'); // outputs "0aB5"
echo incrementNumber('0aB9'); // outputs "0aBa"
echo incrementNumber('0aBz'); // outputs "0aBA"
echo incrementNumber('0aBZ'); // outputs "0aC0"