Creo que me explico mejor con un ejemplo:
1 => a, 2 => b, 3 => c, ..., 26 => z, 27=> A, 28 => B, ..., 52 => Z, ..., 53 => Aa, 54 => Ab, 55 => Ac, ..., 78 => Az, ..., 676 => ZZ, 677 => AAa... etc... etc...
Esto lo hago con el fin de crear algún tipo de encriptación para acortar URL donde están identificados con números pero para no tener por ejemplo el artículo #65754898 me quede como el articulo ID: ArLf o algo por el estilo, no se si mi algoritmo sea el mejor pero necesito uno que me acorte lo mas que pueda un numero de forma automática y no sea de forma aleatoria para que cuando tenga que guardarlo en una base de datos primero tenga que verificar si existe o no el ID generado (para ahorrar consultas) . De la misma forma una funcion que me pase ese ID ArLf a el número 65754898 (esta vez si para poder buscar su respectivo registro en la base de datos).
He estado usando una pequeña función que hice pero no arroja el resultado que quiero.
Código PHP:
function keyEcode($numero) {
$chars = array(1 => 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z');
$total = count($chars);
$vueltas_por_letra = ceil($numero/($total*2));
$vueltas_por_mayuscula = ceil($numero/$total);
$letras = array();
for($i = 1;$i <= $vueltas_por_letra; $i++) {
$letra = $numero-$total*($vueltas_por_mayuscula-1);
$mayuscula = $i%2 == 0 ? true : false;
if($mayuscula) {
$letras[$i] = strtoupper($chars[$letra]);
} else {
$letras[$i] = $chars[$letra];
}
}
return implode('', $letras);
}