Este caso es muy útil para crear llaves únicas a partir de un número long, como puede ser el Timestamp, obteniendo un identificador con una cantidad de caracteres menores a los que pude ser representado por el Timestamp.
Este código tiene las siguientes características
- El algoritmo utiliza un sistema numérico base 64, lo cual significa que tiene 64 símbolos para representar un número decimal.
- La función toBase64 es la función principal la cual esta encargada de convertir un número de tipo entero (long) a su representación numérica de base 64, representada en un string.
- La función secundaría toSingleBase estará encargada de convertir un numero menor a 64 a su representación en el sistema numérico base 64.
- Los caracteres utilizados son los número del 0 al 9, las letras mayúscula y minúsculas, sin caracteres especiales, y dos símbolos adicionales: + y *.
long value = DateTime.Now.Ticks; string strVal = toBase64(value);
private static string toBase64(int n)
{
string ret = "";
int cosiente = 0;
int residuo = 0;
if (n < 64)
return toSingleBase64(n);
residuo = n / 64;
cosiente = n % 64;
ret = toBase64(residuo) + toBase64(cosiente);
return ret;
}
private static string toSingleBase64(int n)
{
string ret = null;
if(n < 0)
ret = "0";
if (n < 10)
ret = "" + n;
else
{
if (n >= 10 && n < 36)
{
n = n - 10;
n = 65 + n; //65 inicia el caracte 'A' (Mayusculas)
ret = "" + (char)n;
}
else if (n >= 36 && n < 62)
{
n = n - 36;
n = 97 + n; //97 inicia el caracte 'a' (minusculas)
ret = "" + (char)n;
}
else if (n >= 62 && n <= 63)
{
n = n - 62;
n = 42 + n; //42 inicia el caracter '+', seguido por el caracter '*'.
ret = "" + (char)n;
}
else
ret = "0";
}
return ret;
}