Генератор уникального буквенного кода
Сегодня при разработке одного проекта, необходимо было генерировать уникальный буквенный код. Для реализации этой задачи было принято решение брать текущее время в миллисекундах и переводить их в буквенный код. Для этого я использовал следующую функцию:
function num2alpha($n) { $r = ''; for ($i = 1; $n >= 0 && $i < 10; $i++) { $r = chr(0x41 + ($n % pow(26, $i) / pow(26, $i - 1))) . $r; $n -= pow(26, $i); } return $r; }
Результат этой функции будет напоминать нумерацию колонок в Microsoft Excel, т. е. A-Z, AA-ZZ, AAA-ZZZ и т. д. Например:
echo num2alpha(0); // Выведет «A» echo num2alpha(10); // Выведет «K» echo num2alpha(100); // Выведет «CW»
А если в качестве аргумента использовать функцию time(), которая возвращает количество секунд, прошедших с начала Эпохи Unix (1 января 1970, 00:00:00 GMT) до текущего времени, то можно получить уникальный буквенный код:
$time = time(); // 1313755781 echo num2alpha($time); // Выведет DFNWCRN
Для обратного декодирования строки нужно использовать эту функцию:
function alpha2num($a) { $r = 0; $l = strlen($a); for ($i = 0; $i < $l; $i++) { $r += pow(26, $i) * (ord($a[$l - $i - 1]) - 0x40); } return $r - 1; }
Надеюсь для кого-то эта статья будет полезной. Оставляйте в комментариях Ваши способы реализации уникального буквенного кода!
-
Комментарии (0)
- Сайт